<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발자의 기록습관</title>
    <link>https://ict-nroo.tistory.com/</link>
    <description>주니어 개발자가 성장하는 공간</description>
    <language>ko</language>
    <pubDate>Thu, 7 May 2026 09:09:53 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>nroo</managingEditor>
    <image>
      <title>개발자의 기록습관</title>
      <url>https://t1.daumcdn.net/cfile/tistory/2139CC4855D5E3502E</url>
      <link>https://ict-nroo.tistory.com</link>
    </image>
    <item>
      <title>[Spring]Jackson json deserialize시 snake_case to camelCase</title>
      <link>https://ict-nroo.tistory.com/136</link>
      <description>&lt;ul class=&quot;ul-list&quot; cid=&quot;n158&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n161&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;RestTemplate으로 외부 연동 API 응답 값을 받을때 굉장히 다양한 case convention을 경험할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n171&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만 restTemplate에 기본적으로 등록되어 있는 messageConverters에서는 필드 매핑시 snake_case를 제대로 매핑하지 못해서 null이 들어가는 경우가 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;restTemplate에 Spring이 이미 등록한 기본 &lt;/span&gt;MappingJackson2HttpMessageConverter보다 &lt;b&gt;우선하도록&lt;/b&gt; 새롭게 커스텀한 messageConverter를 등록하자.&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n190&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;jackson version 2.7 이전에서는 &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n158&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n190&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;PropertyNamingStrategy. CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 를&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n190&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;이후 버전에서는 PropertyNamingStrategy.SNAKE_CASE 를 사용해야 한다.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;pre class=&quot;ce-code-text&quot; spellcheck=&quot;false&quot; style=&quot;font-family: Consolas, &amp;quot;Liberation Mono&amp;quot;, Menlo, Courier, monospace; font-size: 12px; white-space: pre-wrap; width: 1830px; height: 815px; border: 0px; outline: 0px; margin-top: 0px; margin-bottom: 0px; padding: 10px 0px; tab-size: 4; background-color: rgb(255, 255, 255); color: rgb(1, 1, 1);&quot;&gt;&lt;div style=&quot;overflow-wrap: normal; word-break: normal; hyphens: none; white-space: pre; min-width: 1px; height: 14px; padding: 0px 7px;&quot;&gt;&lt;div class=&quot;colorscripter-code&quot; style=&quot;overflow: auto; position: relative !important;&quot;&gt;&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0px; padding: 0px; border: none; background-color: rgb(250, 250, 250); border-radius: 4px; width: 822px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; width=&quot;822&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;padding: 6px; border-right: 2px solid rgb(229, 229, 229); height: 361px;&quot;&gt;&lt;div style=&quot;margin:0;padding:0;word-break:normal;text-align:right;color:#666;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&gt;&lt;/td&gt;&lt;td style=&quot;padding: 6px 0px; width: 761px; height: 361px;&quot;&gt;&lt;div style=&quot;margin:0;padding:0;color:#010101;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;span style=&quot;color:#999999&quot;&gt;//&amp;nbsp;AdapterConfig.java&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#999999&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;private&lt;/span&gt;&amp;nbsp;ObjectMapper&amp;nbsp;createCustomObjectMapper()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;ObjectMapper&amp;nbsp;objectMapper&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;ObjectMapper();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;objectMapper;&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;&lt;span style=&quot;color:#ff3399&quot;&gt;private&lt;/span&gt;&amp;nbsp;MappingJackson2HttpMessageConverter&amp;nbsp;createMappingJackson2HttpMessageConverter()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;MappingJackson2HttpMessageConverter&amp;nbsp;converter&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;MappingJackson2HttpMessageConverter();&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;converter.setObjectMapper(createCustomObjectMapper());&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;converter;&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;@Bean(name&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#993333&quot;&gt;&quot;restTemplate&quot;&lt;/span&gt;)&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&lt;span style=&quot;color:#ff3399&quot;&gt;public&lt;/span&gt;&amp;nbsp;RestTemplate&amp;nbsp;restTemplate()&amp;nbsp;{&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;RestTemplate&amp;nbsp;restTemplate&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;new&lt;/span&gt;&amp;nbsp;RestTemplate(clientHttpRequestFactory());&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;restTemplate.getMessageConverters().&lt;span style=&quot;color:#0099cc&quot;&gt;add&lt;/span&gt;(&lt;span style=&quot;color:#308ce5&quot;&gt;0&lt;/span&gt;,&amp;nbsp;createMappingJackson2HttpMessageConverter());&lt;/div&gt;&lt;div style=&quot;padding:0 6px; white-space:pre; line-height:130%&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color:#ff3399&quot;&gt;return&lt;/span&gt;&amp;nbsp;restTemplate;&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;&lt;br /&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;&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;a href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;vertical-align: bottom; padding: 0px 2px 4px 0px; width: 32px; height: 361px;&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; background-color: rgb(229, 229, 229); border-radius: 10px; padding: 1px;&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;/pre&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Spring</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/136</guid>
      <comments>https://ict-nroo.tistory.com/136#entry136comment</comments>
      <pubDate>Wed, 24 Jun 2020 11:42:40 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] EC2 서버 생성, 접속시 필수 설정</title>
      <link>https://ict-nroo.tistory.com/135</link>
      <description>&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: 217px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9931714C5E04DDFE11&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9931714C5E04DDFE11&quot; width=&quot;217&quot; height=&quot;232&quot; filename=&quot;ec2.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;span style=&quot;caret-color: rgb(119, 119, 119); color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; orphans: 4; white-space: pre-wrap; text-size-adjust: auto;&quot;&gt;&lt;i&gt;&lt;u&gt;아마존 리눅스 1 서버 기준&lt;/u&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n190&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EC2 서버 접속 간소화&lt;/span&gt;&lt;/h2&gt;&lt;blockquote cid=&quot;n191&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119);&quot;&gt;&lt;p cid=&quot;n193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Mac 기준&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n194&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n196&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n197&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EC2 서버로 SSH 접속하려면 매번 pem파일과 ip를 입력해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n213&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n212&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ ssh i {pem 키 위치} {public Ip주소}&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n216&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;~/.ssh/ 디렉토리로 pem 파일을 옮겨 놓으면 ssh 실행 시 pem 키 파일을 자동으로 읽어 접속할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n230&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n220&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n218&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ cp {pem키 위치} ~/.ssh/&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n224&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n222&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;pem키 권한 변경&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n232&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n228&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n226&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ chmod 600 ~/ssh/{pem 키}&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n235&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n233&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;pem키가 있는 ~/.ssh 디렉토리에 config 파일 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n240&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n239&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n237&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ vim ~/.ssh/config&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; cid=&quot;n245&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;# myServiceName용 접근 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Host myServiceName&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; HostName {public Ip 주소}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; User ec2-user&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; IdentityFile ~/.ssh/myServiceName.pem&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n249&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n253&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;config 파일 권한 변경&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n254&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n258&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n259&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ chmod 700 ~/.ssh/config&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n262&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n260&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래와 같이 간소화된 명령어로 EC2 접근&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n267&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n266&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n264&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ ssh myServiceName&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;h2 cid=&quot;n23&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; orphans: 2; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Java8 설치&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n33&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n37&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n38&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아마존 리눅스 1의 경우 기본 자바 버전이 7, 프로젝트 버전에 맞게 변경.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n27&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo yum install -y java-1.8.0-openjdk-devel.x86_64&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n41&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo /usr/sbin/alternatives --config java&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n45&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Java8 선택 후 변경 완료 확인: &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ java -version&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Java7 제거: &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo yum remove java-1.7.0-openjdk&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;h2 cid=&quot;n55&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Timezone 변경&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n57&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EC2 서버의 기본 타임존은 UTC다. 한국과는 9시간 차이 발생. 애플리케이션에서 생성되는 시간도 모두 9시간 차이나게 됨. 필수 변경 사항.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n66&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo rm /etc/localtime&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n73&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경 확인 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ date&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n88&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hostname 변경&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n89&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 서버를 관리 중일 경우 IP만으로 어떤 서비스의 서버인지 확인이 어려움&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 서비스를 표현하기 위해 HOSTNAME 변경&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo vim /etc/sysconfig/network&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경 전&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; cid=&quot;n107&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;NETWORKING&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;localhost.localdomain&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;NOZEROCONF&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경 후&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; cid=&quot;n113&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;NETWORKING&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;HOSTNAME&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;myServiceName&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;NOZEROCONF&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n119&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hostname 변경 확인&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo reboot&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n125&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;추가 설정 사항&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n132&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n130&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;호스트 주소를 찾을 때 가장 먼저 보는 /etc/hosts에 변경한 hostname을 등록해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이유는 hostname이 /etc/hosts에 등록되지 않아서 장애가 발생할 수 있기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n139&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;http://woowabros.github.io/experience/2017/01/20/billing-event.html&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우아한형제들 기술 블로그 - 빌링 시스템 장애, 이러지 말란 Maria~&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ sudo vim /etc/hosts&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n152&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hostname 추가 등록&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n157&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;127.0.0.1 myServiceName&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n160&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;curl로 확인&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n165&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n164&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;$ curl myServiceName&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n170&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n166&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정상 등록 됐다면 80 포트 접근 불가 메시지&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n174&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n173&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n171&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;curl: (7) Fail to connect .... port 80: Connection refused&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비정상이라면 호스트 찾지 못했음을 나타내는 메시지&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n182&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n181&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;Could not resolve host: ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n276&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n277&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n279&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n280&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 이동욱&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n283&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link md-expand&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;http://woowabros.github.io/experience/2017/01/20/billing-event.html&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;http://woowabros.github.io/experience/2017/01/20/billing-event.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Cloud</category>
      <category>AWS</category>
      <category>EC2</category>
      <category>ssh</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/135</guid>
      <comments>https://ict-nroo.tistory.com/135#entry135comment</comments>
      <pubDate>Fri, 27 Dec 2019 01:19:00 +0900</pubDate>
    </item>
    <item>
      <title>NHN FORWARD 2019 후기</title>
      <link>https://ict-nroo.tistory.com/134</link>
      <description>&lt;h1 cid=&quot;n2&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;NHN TOAST FORWARD 2019&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n3&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2019.11.27&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n3398&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: 1.2; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;&lt;b&gt;&lt;i&gt;한줄 후기&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n3401&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: 1.2; orphans: 4; margin-top: 0.8em; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 10pt;&quot;&gt;&lt;b&gt;&lt;i&gt;최근에 가봤던 컨퍼런스중에 실무와 가까이 있다고 생각되는 주제들이 가장 많았습니다. 이미 팀에서 도입해서 사용하고 있거나, 우리가 내년에 개선하고자 하는 것들에 대한 주제 위주로 들었는데요, 우리와 비슷한 고민들을 하고 있는 것 같았습니다. &lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: 1.2; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/nhn_forward_2019/0.jpg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992B7B4F5DDF34B109&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992B7B4F5DDF34B109&quot; width=&quot;400&quot; height=&quot;299&quot; filename=&quot;0.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;   &lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99C20F465DDF34C80B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99C20F465DDF34C80B&quot; width=&quot;400&quot; height=&quot;299&quot; filename=&quot;1.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;/p&gt;&lt;h2 cid=&quot;n37&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1.  '깃' 깔나는 Git 워크플로우 알아보기&lt;/span&gt;&lt;/h2&gt;&lt;blockquote cid=&quot;n38&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NHN Edu 서버개발팀 - 신승엽&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; 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/99A29A3F5DDFB03D22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A29A3F5DDFB03D22&quot; width=&quot;820&quot; height=&quot;614&quot; filename=&quot;2.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/nhn_forward_2019/2.jpg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n41&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주요 Git 워크플로우 살펴보기&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n42&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Git flow&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n45&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;항상 존재하는 브랜치&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n48&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;master 브랜치&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;develop 브랜치&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서포팅 브랜치&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n55&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n56&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n57&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;필요할 때 생성 후 삭제하는 브랜치&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;feature 브랜치&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n60&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 feature의 개발이 완료되면 다시 develop으로 merge 이때, fast forward 하지 않도록 주의&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;release 브랜치&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n65&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;feature들이 포함된 develop 에서 따고, 릴리즈 후엔 master와 develop에서 merge&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hotfix 브랜치&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n70&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;master에서 출발&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;GitHub flow&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n75&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n76&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n77&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Git glow는 대부분의 케이스에서는 너무 복잡하다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n78&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n79&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사람들이 워크 플로우를 이해하기 쉽게 되어 실수가 없어지고 헤메지 않게 되었다고 설명함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Master 브랜치&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가 항상 stable한 상태여야 한다. 현재 master 그대로 배포되어도 이상하지 않은 상태로 유지해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;새로운 기능을 개발할 때는, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Topic 브랜치&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 master 브랜치에서 딴다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n84&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기능 개발&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Pull request 개설&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n89&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n90&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드 리뷰 / 논의&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;완료된 토픽 브랜치를 그대로 배포한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n93&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n94&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;토픽 브랜치 배포시 반드시 CI 빌드를 통과해야 하며&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;락이 가능하다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Master 브랜치의 최신 커밋이 존재하는지 확인해서 충돌을 막는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 후 이상없다면, master에서 해당 토픽 브랜치 merge&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n102&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이때 배포 락이 해제 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;GitLab flow&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n107&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;git flow는 너무 복잡하며, github flow는 너무 간단하다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지속적인 배포가 어려울 때&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n112&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n113&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n114&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;github flow는 마스터를 실서버에 그대로 배포하는 컨셉인데, 대부분의 회사에서 불가능할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이럴경우 production 브랜치를 관리하고, production에서 master를 merge해서 배포한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포버전 관리에 용이하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;환경별 배포&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가 필요할 때&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n121&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n122&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n123&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;master는 staging에 자동 배포되고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n124&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n125&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Pre-production, production 브랜치 두개를 관리할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;릴리즈 소프트웨어&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일 때&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n128&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마스터에서 버전별 stable 브랜치를 따서 배포한 후&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n131&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n132&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;핫픽스의 경우 master에서 수정하고 각 버전의 stable 브랜치로 cherry pick 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이것은 마치 리눅스에서 hotfix 하고, 각 배포판에 적용하는 것과 같은 원리이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n135&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우리는 이렇게 해요&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n136&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;브랜치 전략&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n139&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n140&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n141&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상황&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n142&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n143&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n144&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;단기간의 배포 일정&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인 경우&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n145&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 날짜로 관리. develop-20191121 등&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n148&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n149&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;장기간의 배포 일정&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인 경우&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n150&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드네임으로 관리. develop-tomato 등&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;git flow base&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n155&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n156&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;develop 브랜치에서 위의 상황에 맞는 각 sub develop 브랜치를 따고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;sub develop 브랜치 개발이 완료되면 QA를 진행한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실 이 정책의 경우 릴리즈 브랜치가 필요 없다. sub develop이 명확하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n161&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;sub develop 개발 후 QA가 끝나서 배포가 완료되면, master와 develop에서 merge한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n163&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n164&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;나머지 sub develop을 현재 develop에 rebase 한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n165&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연속되는 충돌이 있을 경우 -&amp;gt; 영상 참조&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;같은 이름의 sub develop 브랜치를 새로 따고, 체리픽 활용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n170&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n171&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;핫픽스는 master에서 따서 완료후 master, develop merge&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n172&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n173&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;핫픽스 브랜치 merge 후에 sub develop들을 develop에 다시 merge.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n174&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;현재 포털개발팀 TV줌파트에서 쓰는 방식과 매우 유사함.&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; (릴리즈 브랜치 관리는 협업 환경에 따라 다르다고 생각함)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발 플로우&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative; 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/998F843E5DDFB04E26&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998F843E5DDFB04E26&quot; width=&quot;820&quot; height=&quot;820&quot; filename=&quot;3.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/nhn_forward_2019/3.jpg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 770px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n268&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;/p&gt;&lt;h2 cid=&quot;n269&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2. 레거시 웹 서비스 길들이기 : 서버 개발자의 SPA 적용기&lt;/span&gt;&lt;/h2&gt;&lt;blockquote cid=&quot;n270&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n271&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NHN 클라우드 프레임워크 개발팀 - 최강훈&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n272&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹 개발은 백엔드와 프런트엔드로 나눠서 전문성을 가지고 개발하는 게 트렌드입니다.&lt;/span&gt;&lt;span md-inline=&quot;softbreak&quot; class=&quot;md-softbreak&quot; style=&quot;box-sizing: border-box;&quot;&gt;
&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나, 이미 서비스 중인 덩치 큰 일체형 웹 서비스를 나누는 건 막막하고 두려운 일입니다.&lt;/span&gt;&lt;span md-inline=&quot;softbreak&quot; class=&quot;md-softbreak&quot; style=&quot;box-sizing: border-box;&quot;&gt;
&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 세션에서는 서버 개발자 관점에서 SPA를 도입하여 레거시 웹 서비스라는 괴물을 길들였던 경험과 고민을 공유하고자 합니다.&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; cid=&quot;n273&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n274&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n275&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프롤로그: 무엇이 문제인가?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n276&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n277&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1막: 워밍업&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n278&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n279&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2막: 본격 분리 작업&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n280&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에필로그: 1년간 운영해보니...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;p cid=&quot;n282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; 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/99B53E375DDFB05F2C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99B53E375DDFB05F2C&quot; width=&quot;820&quot; height=&quot;614&quot; filename=&quot;4.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/nhn_forward_2019/4.jpg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n283&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프롤로그 : 무엇이 문제인가?&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n284&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n285&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n286&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일체형 웹 서비스(with MVC) 방식은 기능과 화면이 적을 땐 괜찮았다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n287&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n288&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;점점 비대해지는 웹 서비스&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n289&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n290&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n291&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모두가 꺼리게 된 자바스크립트 코드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n292&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n293&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페이지는 무거워지고 서스테이닝은 점점 어려워 진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n294&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n295&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어떻게 하면 될까요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n296&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n297&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n298&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SPA를 도입하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n299&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n300&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹 페이지 구현에 필요한 모든 정적 리소스를 최초 한번 다운 받고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n301&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n302&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이후 필요한 데이터는 그때그때 비동기로 받아서 화면을 만든다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n303&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n304&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하나의 페이지만 존재하고 페이지 전환 및 구성을 자바스크립트로 구현한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n305&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n306&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n307&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n308&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n309&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n310&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;성능 개선&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n311&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n312&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;불필요한 네트워크 통신이 없어 진다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n313&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n314&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n315&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n316&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n317&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;검색엔진 최적화에 어려움이 있다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n318&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n319&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;언제 쓰면 좋은가?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n320&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n321&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n322&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;UI 구성이 복잡하고, 데이터가 많이 필요한 웹 페이지&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n323&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n324&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페이지 내에 정적인 요소보다 동적인 요소가 많은 경우&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n325&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n326&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로그인을 필수로 해야되는 경우(검색엔진 최적화가 불필요한 경우)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n327&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n328&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개편에 앞서 동료와 협업 부서 설득하기.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n329&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;워밍업&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n330&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n331&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n332&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;무기를 고르자&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n333&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n334&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n335&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;앵귤러, 리액트, vue.js&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n336&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n337&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n338&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뭐가 제일 좋을까?(X)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n339&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n340&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뭐가 우리 조직에 잘 맞을까?(O)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n341&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n342&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;앵귤러&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n343&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든걸 갖췄지만 러닝커브가 높다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n346&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n347&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리액트&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n348&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n349&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n350&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;강력한 기능을 가지고 있지만, 더 필요한 도구는 필요에 따라서 선택해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n351&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n352&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vue.js&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n353&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최소한의 있을건 다 있고, 배우기 쉬우며, 빠르게 만들어 낼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n356&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n357&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우리 팀은 어떤가?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n358&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n359&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n360&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 개발자가 많고, 자바스크립트 개발 비중은 상대적으로 적은 편&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n361&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n362&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vue.js 를 골랐다&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n363&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n364&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n365&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;러닝커브가 가장 낮고, 가이드 문서도 잘 되어 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n366&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n367&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;single file component로 개발하면 하나의 파일에서 컴포넌트 단위로 작업할 수 있다.(퍼블리싱 팀과 협업시 용이)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n368&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n369&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;많이 변해버린 자바스크립트&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n370&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n371&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n372&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 문법이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n373&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n374&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n375&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;let, const&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n376&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n377&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Arrow function&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n378&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n379&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;import, export&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n380&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n381&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;class&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n382&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n383&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;등 구글링해서 10분만 보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n384&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n385&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;webpack 설정은 어떻게?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n386&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n387&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n388&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프론트엔드 프레임워크를 도입할때 최대 고비.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n389&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n390&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;gradle 학습할때와 비슷한 느낌으로 공부하자..&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n391&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;본격 분리 작업&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n392&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n393&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n394&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로젝트 구성&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n395&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n396&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n397&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Back-end, Front-end 어떻게 구성할까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n398&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n399&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어떻게든 둘을 합쳐보자&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n400&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n401&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n402&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring-boot-vuejs&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n403&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n404&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n405&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;부트와 vuejs를 maven으로 한번에 빌드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n406&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n407&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빌드 프로세스&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n408&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n409&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n410&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프론트 엔드 빌드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n411&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n412&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;백엔드 리소스 디렉토리에 copy&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n413&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n414&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;백엔드 빌드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n415&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n416&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 요청을 was에서 해결하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n417&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n418&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n419&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;static 파일인데도 was로 서비스 해야되나?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n420&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n421&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;UI 변경이 잦은 편인데, 매번 백엔드 포함하서 빌드/배포 해야되나?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n422&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n423&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전과 차리가 없는데?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n424&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n425&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;UI요청과 API 요청을 구분하자&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n426&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n427&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n428&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리소스 요청은 웹서버에서&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n429&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n430&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;나머지는 was에서&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n431&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n432&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n433&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n434&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n435&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;굳이 둘을 섞어서 프로젝트를 구성할 필요가 없었다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n436&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n437&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모놀리스 개발을 하다보니 합치는 것에 강박이 있었던 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n438&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n439&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;백엔드 프로젝트와 프론트엔드 프로젝트는 과감하게 나누자&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n440&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n441&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;API 호출 방식&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n442&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n443&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n444&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일체형 웹 서비스에서는?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n445&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n446&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n447&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버 렌더를 위해 API 명세에 맞는 VO클래스를 만들어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n448&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n449&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라이언트 렌더링에서도 이렇게 해야 될까?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n450&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n451&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n452&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;API Gateway 사용 - 많은 기능중 API 라우팅 기능에 집중&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n453&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n454&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Zuul 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n455&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n456&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n457&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;부트에서 간단하게 적용 가능&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n458&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 640px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99A7EB3B5DDFB0A134&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A7EB3B5DDFB0A134&quot; width=&quot;640&quot; height=&quot;640&quot; filename=&quot;5.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n458&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n459&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n460&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;백엔드는 API Gateway의 역할을 충실하게 하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n461&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n462&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n463&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존의 VO를 제거하고 json으로 쭉쭉 내리면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n464&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n465&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n466&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n467&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n468&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;API Gateway를 적용하고 불필요한 중복 코드를 걷어내자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n469&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n470&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상태 관리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n471&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n472&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n473&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프론트엔드의 복잡한 컴포넌트 간 데이터 전달&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n474&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n475&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트간 의존 관계가 복잡하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n476&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n477&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n478&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트 통신이나 이벤트 버스로는 벅차다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n479&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n480&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;중략 ...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n481&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n482&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;상태 관리 라이브러리 vuex 사용하자는 결론&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n483&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n484&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex 사용 팁&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n485&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n486&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n487&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;api 호출 횟수 줄여보기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n488&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n489&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n490&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;lodash의 debounce를 적용하여 여러 번 호출해도 한 번만 호출되도록 구성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n491&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n492&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이미 로드한 데이터라면 추가로 호출되지 않도록&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n493&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n494&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 가공은 어떻게?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n495&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n496&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n497&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RxJS에는 데이터 가공을 위한 유용한 연산자가 많이 존재함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n498&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n499&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex의 state, getter는 컴포넌트뿐만 아니라 다른 곳에서도 호출이 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n500&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n501&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n502&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;router에서 사용하면 데이터 로딩이 완료된 다음에 화면을 노출할 수 있음(서버 렌더링 처럼 보이는 효과)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n503&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n504&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n505&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n506&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n507&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상태관리 라이브러리 사용해서 중앙 집중식 데이터 관리 하자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n508&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n509&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다국어 처리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n510&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n511&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n512&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring MVC에서 다국어 처리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n513&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n514&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n515&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring MessageSource 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n516&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n517&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버 렌더 방식이다 보니 언어 변경을 하려면 반드시 새로 고침&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n518&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n519&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이제 다국어 처리도 프론트엔드에서&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n520&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n521&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n522&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vue-i18n 플러그인 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n523&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n524&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;새로고침 없이도 언어 변경 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n525&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n526&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아직 남아있는 문제점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n527&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n528&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n529&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문구 수정 요청이 잦다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n530&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n531&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문구 수정을 위해서는 여전히 빌드/배포가 필요하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n532&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n533&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해결 책&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n534&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n535&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n536&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메시지 서비스를 만들자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n537&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n538&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다국어 메세지를 관리하는 통합 메세지 서비스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n539&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n540&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;동일한 key를 사용하여 4개 국어 저장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n541&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n542&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빌드 배포를 하지 않더라도 메세지 서비스에 요청해서 처리할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n543&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n544&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 환경에 따른 설정 값 처리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n545&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n546&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n547&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프론트엔드에서는 배포 환경에 따라 설정값을 어떻게 처리?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n548&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n549&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n550&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;development &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n551&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n552&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;production&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n553&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n554&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서는?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n555&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n556&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n557&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀, 프로젝트마다 사용중인 환경설정이 제각각&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n558&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n559&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;webpack 설정 파일의 분리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n560&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n561&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n562&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;각 환경별로 webpack 설정 파일 분리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n563&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n564&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DefinePlugin 사용하여 각 환경별로 다른 설정값 추가&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n565&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n566&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;package.json에서 각 환경에 맞게 빌드 명령어 구성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n567&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에필로그 : 1년간 운영해보니...&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n568&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n569&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n570&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;성능 측면&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n571&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n572&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n573&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;확실히 줄어든 API 호출 횟수&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n574&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n575&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹 리소스 최적화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n576&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n577&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n578&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹팩 빌드 최적화 되면서 리소스 용량 작아짐&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n579&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n580&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;운영 측면&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n581&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n582&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n583&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빌드/배포는 꼭 필요할 때 필요한 모듈만&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n584&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n585&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발 측면&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n586&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n587&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n588&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프론트엔드 프레임워크의 도입&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n589&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n590&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n591&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;규칙과 일관성이 생긴 코드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n592&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n593&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ESLint가 많이 도와줌&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n594&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n595&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가독성 증가&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n596&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n597&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;재사용 가능한 컴포넌트 개발 지향&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n598&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n599&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;백엔드는 데이터에만 집중하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n600&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n601&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n602&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버 렌더링이 없으니 데이터만 생각하면 됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n603&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n604&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;API Gateway의 역할에 집중&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n772&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;/p&gt;&lt;h2 cid=&quot;n605&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;3. Spring Data JPA의 사실과 오해&lt;/span&gt;&lt;/h2&gt;&lt;blockquote cid=&quot;n606&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n607&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NHN Dooray개발실 - 신동민&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; cid=&quot;n608&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n609&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n610&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring JPA의 사실과 오해&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n611&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n612&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관 관계 맵핑에 대한 모든 것&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n613&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n614&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Data JPA Repository의 숨겨진(?) 기능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;p cid=&quot;n615&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; 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/99A072355DDFB0B803&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99A072355DDFB0B803&quot; width=&quot;820&quot; height=&quot;614&quot; filename=&quot;6.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n615&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/nhn_forward_2019/6.jpg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n616&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;요약&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n617&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n618&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n619&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 매핑&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n620&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n621&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n622&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실상 단방향 매핑만으로 연관관계 매핑은 이미 완료&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n623&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n624&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대개의 경우 단방향 매핑이면 충분하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n625&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n626&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, 일대다 단방향 연관관계 매핑에서 영속성 전이(cascade)를 사용할 경우 양방향으로 변경하자&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n627&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n628&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n629&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;추가 update 쿼리 방지&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n630&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n631&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Data JPA Repository&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n632&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n633&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n634&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JpaRepository 상속하면 웬만한 CRUD, Paging, Sorting 메서드 사용가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n635&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n636&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메서드 이름 규칙을 통한 쿼리 생성 가능&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n637&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n638&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n639&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이름 규칙에 따라 interface에 메서드 선언만 하면 쿼리 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n640&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n641&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA Repository 메서드로도 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JOIN 쿼리 수행 가능&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n642&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n643&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n644&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이름 규칙에 따라 Entity 내 연관관계 필드 탐색함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n645&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n646&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span class=&quot;md-plain&quot; md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA Repository 메서드에서도 다양한 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;DTO &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n777&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n775&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Projection 지원&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n647&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n648&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n649&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Dynamic DTO Projection도 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p style=&quot;orphans: 4;&quot;&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;관련 예제&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n617&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n617&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li style=&quot;orphans: 4;&quot;&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;a href=&quot;https://www.baeldung.com/spring-data-jpa-projections&quot;&gt;https://www.baeldung.com/spring-data-jpa-projections&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p cid=&quot;n781&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;/p&gt;&lt;h2 cid=&quot;n650&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;4. 바르게, 빠르게! Reactive를 품은 Spring Kafka&lt;/span&gt;&lt;/h2&gt;&lt;blockquote cid=&quot;n651&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n652&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NHN 이병찬&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; cid=&quot;n653&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n654&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n655&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Kafka 메시지를 비동기로 처리하는 방법&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n656&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n657&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ReactiveX에서 제공하는 연산자를 활용하는 사례&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n658&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n659&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Project Reactor의 내부 구조(Publisher-Subscriber 간 처리 흐름)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p cid=&quot;n660&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-top: 0.8em; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예제 코드 저장소 - &lt;/span&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://github.com/EleganceLESS/nhn-forward-2019&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://github.com/EleganceLESS/nhn-forward-2019&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p cid=&quot;n661&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; 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/99F3C4385DDFB0CA23&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F3C4385DDFB0CA23&quot; width=&quot;820&quot; height=&quot;614&quot; filename=&quot;7.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n661&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/nhn_forward_2019/7.jpg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n662&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;01. Kafka 그리고 Spring&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n663&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n664&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n665&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 인기 있고 대중적인 스트리밍 플랫폼&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n666&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n667&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring에서 Kafka 쓰는 방법이 매우 간단해 졌다. JMS 리스너와 유사.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n668&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n669&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;제약 조건&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n670&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n671&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n672&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1스레드당 1개의 일감을 처리할 수 있는데, 일감이 오래걸리면 병목이 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n673&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n674&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;병렬로 처리할 순 있으나 동일한 문제는 여전히 존재 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n675&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n676&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스트리밍 플랫폼의 본질?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n677&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n678&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n679&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;producer의 publish&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n680&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n681&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;consumer의 subscribe&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n682&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n683&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그 사이의 stream&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n684&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n685&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Kafka를 reactive하게 사용하기 위해 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Reactor Kafka 또는 Spring Kafka 사용&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n686&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n687&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n688&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;producer가 publish 할 때, Flux를 만들어서 stream에 밀어 넣는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n689&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n690&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;consumer도 subscribe 할 때, Flux로 가져와서 처리한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n691&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;02. 적용 프로젝트 소개&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n692&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n693&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n694&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버 모니터링 시스템에서 reactive kafka를 활용했다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n695&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n696&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본 로직은 서버에서 메트릭 정보를 가져와서 메트릭DB에 넣고 그것을 보여준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n697&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n698&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그 사이에서 Detector(관찰자)가 존재하여 메트릭 정보를 활용해 사용자에게 Event를 전달한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n699&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n700&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 때 Detector는 수 많은 서버에서 오는 메트릭을 다 관장해야 한다. 커버링 범위가 매우 크다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n701&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n702&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n703&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1000 대 이상의 서버에서 동시다발적으로 이벤트가 감지되면?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n704&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n705&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 이벤트가 짧은 간격으로 수차례 반복하면?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n706&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n707&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어쨋든 이상 이벤트 통지에 지연이 발생해서는 안되며, 각 이벤트는 상호 독립성이 보장되어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n708&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;03. 기본 기능 구현&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n709&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n710&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n711&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이벤트가 발생하면 Detector는 그 정보를 메세지로 만들고 스트림에 집어 넣는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n712&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n713&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이벤트 프로세서에서는 메세지를 읽고 DB에 기록 후, 필요하면 메세지 발송 요청을 보내자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n714&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;04. 메세지 중복 제거&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n715&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n716&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n717&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버에서 Dector에게 데이터 보내고, 문제가 있으면 Event에 집어 넣는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n718&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n719&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우리는 Detector가 매우 중요하므로 HA 구성을 하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n720&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n721&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2대의 Detector는 2개의 input과 2개의 ouput이 발생한다. 이벤트 중복을 제거하자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n722&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n723&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n724&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Flux Operator의 sampleFirst(), groupBy()를 이용해서 처리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n725&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;05. 데이터 모아서 처리하기&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n726&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n727&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n728&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최악의 상황의 경우? 동시다발적 또는 많은 양의 메세지 발생&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n729&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n730&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기준 시간 동안 발생한 여러 이벤트는 하나의 메세지로 모아서 통지하자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n731&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n732&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n733&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;발생하는대로 메세지를 보내게 되면 1000건 발생하면 1000개의 메세지를 받게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n734&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n735&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ex) 30초 단위로 버퍼에 쌓아서 1건으로.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n736&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n737&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Flux Operator의  buffer() 이용해서 처리 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n738&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;process&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;consume&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flatMap&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;::&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;recordToNotifyObject&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;groupBy&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Message&lt;/span&gt;::&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;key&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flatMap&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flux&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flux&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;buffer&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Duration&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ofSeconds&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;30&lt;/span&gt;))) &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//버퍼링 - 30초&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flatMap&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;::&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;notify&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flatMap&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;::&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;saveResult&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;subscribe&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n739&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;06. 정해진 양 만큼만 처리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n740&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n741&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n742&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우리가 잘 만들었다고 쳐도, 이 시스템을 사용하는 연관 시스템이 해당 API Call을 견딜 수 있는지 확인해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n743&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n744&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;API 서버도 reactive하게 만들었다. 해결 됐지 않나?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n745&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n746&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n747&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;결국 그 요청은 DB가 다 받는다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n748&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n749&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;발송 시스템의 경우에도 과도하게 요청을 다 보내면 과금이 어마어마하게 늘어난다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n750&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n751&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Custom Subscriber를 만들어서 subscribe할 때, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;hookOnSubscribe()&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 를 정의할 수 있다. (정해진 양 만큼 발송)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n752&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;07. 시간을 달리는 메시지&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n753&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n754&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n755&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;subscribe 시작시점에는 순차지만, 비동기기 때문에 끝나는 시점에 순서를 보장할 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n756&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n757&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;request(4)로 요청해서 1243 순서로 끝났는데 서버가 뻗었다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n758&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n759&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그 다음 요청은 3부터 시작해서 onNext() 4567을 처리하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n760&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n761&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해결 - offset이 증가하는 경우에만 commit을 하자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n762&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n763&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n764&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드는 추후 제공되는 영상 참조&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n765&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;08. 몇 가지 결론&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n766&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n767&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n768&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;많이 공부하고, 많이 고민하고, 적게 코딩하자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Experience/2019</category>
      <category>NHN FORWARD</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/134</guid>
      <comments>https://ict-nroo.tistory.com/134#entry134comment</comments>
      <pubDate>Thu, 28 Nov 2019 11:46:42 +0900</pubDate>
    </item>
    <item>
      <title>우아한 Redis 세미나 후기</title>
      <link>https://ict-nroo.tistory.com/133</link>
      <description>&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;우아한 레디스&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n2&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;2019.11.21 우아한 형제들 테크 세미나&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;강대명 - 유데미 데이터 엔지니어&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n5&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n6&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n7&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis 소개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;왜 Collection이 중요한가&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Collection&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n12&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n13&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis 운영&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n14&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n15&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis 데이터 분산&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n16&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n17&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Failover&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n18&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n19&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Monitoring Factor&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n20&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n21&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;결론&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;다루지 않는 것들&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n23&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Persistence&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Pub/Sub&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Stream&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n30&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n31&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;확률적 자료구조&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n32&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n33&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Modules&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;한줄 후기&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;Redis Intro와 사용법 내용은 압축과 생략으로 과감하게 진행하고, 경험에 의해 쌓인 redis 운영과 관리에 관한 이야기를 중점적으로 들을 수 있어서 매우 흥미로웠습니다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;모든 내용을 담진 못했으므로, 미흡한 부분은 테크 세미나 유튜브 채널에 공개될 영상을 참고하시면 좋을 것 같습니다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n37&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/channel/UC-mOekGSesms0agFntnQang&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;https://www.youtube.com/channel/UC-mOekGSesms0agFntnQang&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span class=&quot;imageblock&quot; style=&quot;display: inline-block; width: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99389B4E5DD771DF01&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99389B4E5DD771DF01&quot; width=&quot;400&quot; height=&quot;400&quot; filename=&quot;20191121_redis.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span style=&quot;color: rgb(119, 119, 119); text-align: start;&quot;&gt;P.S. 세미나 킬링파트 - 몸으로 이해하는 레디스(PT 30-40장 스킵 스킬, 발표시간 맞추기 스킬)&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n42&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1. Redis 소개&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n43&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;In-Memory Data Structure Store&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;오픈소스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Support data structures&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n50&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;strings, set, sorted-set, hashes, list&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Only 1 Committer&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;파레토 법칙 2:8&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n57&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전체 요청의 80%는 20%의 사용자가 만들어낸다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;캐시구조&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n62&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Look aside Cache&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n65&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;캐시에 있으면 리턴, 없으면 캐시에 저장하고 리턴&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Write Back&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n70&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 데이터를 캐시에 저장, 특정 시점에만 캐시 데이터 DB에 저장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ex) 로그를 캐시에 쌓아두고, 특정 시점마다 DB로&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n75&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2. 왜 Collection이 중요한가&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n76&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발의 편의성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발의 난이도&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;랭킹 서버를 구현한다면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n83&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;간단한 방법은 DB에 넣고 score로.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유저가 많다면?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n88&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n89&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis Sorted Set을 이용하면 랭킹을 구현할 수 있음.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;덤으로 Replication도 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;친구리스트를 key-value 형태로 저장해야 한다면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n94&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스의 경우 자료구조가 Atomic하기 때문에 Race Condition을 피할 수 있음.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외부의 Collections을 잘 이용하는 것으로 우리가 비즈니스 로직에 집중할 수 있음. 시간 단축, 문제를 줄여줌.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n99&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n100&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis 사용처&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n101&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Remote Data Store&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n104&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;A, B, C 에서 데이터를 공유하고 싶을때&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한대에서만 필요하다면, 전역 변수를 쓰면 되지 않을까?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n109&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis 자체가 Atomic을 보장해준다.(싱글 스레드라서)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n112&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n113&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주로 많이 쓰이는 곳들&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n114&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인증 토큰 등을 저장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;랭킹&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유저 API limit&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;좌표&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n123&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;3. Redis Collections&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n124&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 컬렉션을 잘못 선택해서 속도 차이가 날 수 있음.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n127&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Strings&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n129&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n130&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n131&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Key-value&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n132&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용법은 생략&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n134&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n135&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Key를 어떻게 잡을 것인가가 중요하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n136&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;키를 어떻게 잡느냐에 따라서 분산이 바뀔 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n139&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;List&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n141&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n142&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n143&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Lpush, Rpush : 시작과 끝이 데이터 추가 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;LPOP, RPOP : 마찬가지로 시작과 끝 꺼내기 가능.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Set&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n148&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n149&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;중복 제거, 순서 없음. find 빠름&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SADD, SMEMBERS, SISMEMBERS&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 유저를 Follow 하는 목록을 저장해 둔다면&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n155&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n156&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Sorted Set&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n157&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n158&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n159&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;score를 포함한 순서가 있는 Set&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n160&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n161&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;ZADD &amp;lt;Key&amp;gt; &amp;lt;Score&amp;gt; &amp;lt;Value&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n162&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n163&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;범위를 대상으로 데이터 가져올 수 있음&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n164&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n165&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n166&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;zrange&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n167&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n168&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유저 랭킹 보드로 사용할 수 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n169&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n170&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;(주의) Sorted set의 score는 double 타입이기 때문에 값이 정확하지 않을 수 있다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n171&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n172&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n173&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;score는 실수형이기 때문에 실수하기 쉽다.(?ㅎ)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n174&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어떤 특정 정수는 실수에서 표현이 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴퓨터에서는 실수가 표현할 수 없는 정수값들이 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바스크립트에서 유저 ID를 보낸다면 Long 정수형으로 보내면 안된다. String으로 보내야 정상적으로 동작한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hash&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n182&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n183&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n184&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Key Value 안에 sub key value가 존재하는 형태&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n185&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n186&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Collection 주의 사항&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n187&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n188&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n189&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하나의 컬렉션에 너무 많은 아이템을 담으면 좋지 않다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n190&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n191&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n192&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1만개 이하로 유지하는게 좋음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n193&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n194&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Expire는 Collection의 아이템 개별로 걸리지 않고 전체 Collection에 대해서만 걸린다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n195&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;4. Redis 운영&lt;/span&gt;&lt;/h2&gt;&lt;h3 cid=&quot;n196&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리 관리를 잘하자&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n197&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n198&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n199&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Physical 메모리 이상을 사용하면 문제가 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n200&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n201&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n202&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Swap이 있다면 Swap 사용으로 해당 메모리 Page 접근시 마다 늦어진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n203&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n204&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Swap 이 한번 발생하면 계속 발생한다. 디스크 사용으로 인해 느려진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n205&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n206&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Swap이 없다면? OOM으로 죽을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n207&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n208&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Maxmemory를 설정하더라도 이보다 더 사용할 가능성이 크다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n209&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n210&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n211&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스는 메모리 allocator에 의존하는데. jemaloc&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n212&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n213&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1바이트만 달라고해도 jemaloc는 페이지 단위에 의해서 메모리를 주므로 4096을 할당한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n214&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n215&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리 파편화가 일어나면, 레디스 사용량과 jemaloc 할당량이 달라진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n216&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n217&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RSS&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n218&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n219&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;많은 업체가 현재 메모리를 사용해서 Swap을 쓰고 있다는 것을 모를때가 많다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n220&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n221&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;큰 메모리를 사용하는 instance 하나보다는 적은 메모리를 사용하는 instance 여러개가 안전하다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n222&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n223&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n224&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스는 Fork를 하게 되는데, read만 하면 상관없지만, write를 하게되면 최대 2배 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n225&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n226&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들면 4코어 24기가 한대가 2배 사용하면 48기가 사용하지만,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n227&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n228&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;8기가 3대에서 1대가 2배를 사용하게 되면, 32기가만 사용하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n229&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스는 메모리 파편화가 발생할 수 있음. 4.x대 부터...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n231&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n232&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리가 부족할 때는?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n233&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n234&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n235&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Cache is Cach!!!&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n236&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n237&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n238&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;좀 더 메모리 많은 장비로 마이그레이션. 시점은 75% 정도&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n239&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n240&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리가 빡빡하면 마이그레이션 중에 문제가 발생할 수도&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n241&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n242&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아니면, 데이터 줄이기..&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n243&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n244&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리를 줄이기 위한 설정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n245&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n246&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n247&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로 Collection 들은 아래와 같은 자료구조 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n248&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n249&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n250&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hash -&amp;gt; HashTable 하나 더 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n251&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n252&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Sorted Set -&amp;gt; Skiplist 와 HashTable 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n253&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n254&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Set -&amp;gt; HashTable 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n255&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n256&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 자료구조들은 메모리를 많이 사용함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n257&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n258&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ziplist를 사용하자&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n259&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n260&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n261&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;선형으로 저장한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n262&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n263&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인메모리 특성상 적은 개수라면 선형 탐색을 하더라도 빠르다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n264&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n265&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;List, Hash, Sorted Set을 ziplist로 대체해서 처리하는 설정이 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n266&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n267&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n268&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;30% 정도까지 적게 사용 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n269&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;O(N) 관련 명령어는 주의하자&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n270&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n271&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n272&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스는 Sigle Threaded&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n273&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n274&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n275&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;동시에 여러개의 명령을 처리할 수 있을까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n276&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n277&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;참고로 단순한 get/set의 경우 초당 10만 TPS 이상 가능하다(CPU영향 가능)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n278&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n279&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;작업 하나가 1초 걸리면? 300ms 타임아웃 설정되어있으면 터진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n280&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Pocket으로 하나의 Command가 완성되면 processCommand로 처리함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n282&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n283&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한번에 하나의 명령을 처리하므로 오래걸리는 명령을 수행하면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n284&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n285&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대표적인 O(N) 명령들&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n286&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n287&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n288&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;KEYS&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n289&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n290&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;FLUSHALL, FLUSHDB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n291&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n292&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Delete Collections&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n293&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n294&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Get All Collections&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n295&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n296&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대표적인 실수 사례&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n297&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n298&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n299&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Key가 백만개 이상인데 확인을 위해 KEYS 명령을 사용하는 경우&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n300&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n301&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n302&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모니터링 스크립트가 1초에 한번씩 호출&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n303&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n304&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아이템이 몇만개든 hash, sorted set, set에서 데이터를 가져오는 경우&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n305&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n306&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring security oath RedisTokenStore 이슈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n307&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n308&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;KEYS는 어떻게 대체할 것인가?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n309&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Scan 명령을 사용하는 것으로 하나의 긴 명령을 짧은 여러번의 명령으로 바꿀 수 있다.(cursor 방식)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;짧은 명령들 사이에 read 몇만개가 처리될 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n314&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n315&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Collection의 모든 아이템을 가져와야 할 때?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n316&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n317&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n318&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Collection의 일부만 가져오거나&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n319&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n320&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;큰 Collections을 여러개의 Collection으로 나눠서 저장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n321&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n322&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring security oath RedisTokenStore 이슈&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n323&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n324&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n325&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Access Token의 저장을 List 자료구조를 통해서 이루어졌었음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n326&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n327&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;검색, 삭제시에 모든 item을 매번 찾아야함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n328&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n329&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최신 버전에서는 Set(O(1))로 해결 함.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n330&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Replication&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n331&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n332&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n333&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Async Replication&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n334&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n335&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n336&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Replication lag이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n337&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n338&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리플리케이션 하는 틈 사이에 데이터가 바뀔 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n339&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n340&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;'Replicaof'(5.0.0 버전 이상) 명령으로 설정 가능&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n341&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n342&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n343&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Replicaof hostname port&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DBMS로 보면 statement replication과 유사&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n346&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n347&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n348&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에서 now는 1, 2가 다를 수 있음.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n349&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n350&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Replication 설정 과정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n351&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n352&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n353&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Replicaof 명령 전달&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Secondary는 Primary에 sync 명령 전달&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n356&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n357&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Primary는 현재 메모리 상태 저장하기 위해 Fork&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n358&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n359&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;... 생략&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n360&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n361&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주의할 점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n362&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n363&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n364&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Replication 과정에서 Fork가 발생하므로 메모리 부족이 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n365&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n366&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis-cli --rdb 명령은 현재 상태의 메모리 스냅샷을 가져오므로 문제를 발생시킴. 치명적&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n367&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n368&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS나 클라우드의 Redis는 좀 다르게 구현되어서 해당 부분이 안정적&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n369&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n370&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;많은 대수의 Redis 서버가 많은 Replica를 두고 있다면?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n371&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n372&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;네트웍 이슈나, 사람의 작업으로 동시에 replication이 재시도 되도록 하면 문제가 발생할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n373&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n374&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;권장 설정 Tip&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n375&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n376&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n377&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Maxclient 설정 50000&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n378&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n379&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RDB/AOF 설정 off&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n380&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n381&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n382&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마스터에서는 무조건 off&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n383&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n384&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 commands disable&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n385&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n386&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n387&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Keys&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n388&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n389&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS의 ElasticCache는 이미 하고 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n390&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n391&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전체 장애의 99%는 KEYS나 SAVE설정을 사용해서 발생&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n392&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n393&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n394&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SAVE 주의.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n395&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n396&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;적절한 ziplist 설정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n397&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;5. Redis 데이터 분산&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n398&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n399&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n400&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터의 특성에 따라서 선택할 수 있는 방법이 달라진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n401&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n402&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Consistent Hashing&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n403&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n404&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n405&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버가 추가되거나 빠지더라도 해당 서버에 있는 데이터들만 리밸런싱이 일어남.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n406&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n407&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1,2,3 번 서버중에 2번 죽으면 2번에 있는 데이터들만 이동.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n408&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n409&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Sharding&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n410&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n411&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n412&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터를 어떻게 나눌것인가? 는 데이터를 어떻게 찾을것인가? 와 같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n413&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n414&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하나의 데이터를 모든 서버에서 찾아야 하면?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n415&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n416&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Range&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n417&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n418&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n419&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 Range를 정의 하고 해당 Range에 속하면 거기에 저장.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n420&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n421&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;불균형이 생긴다. 이벤트 처리 할때 많이 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n422&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n423&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;확장은 편한데, 서버 상황에 따라서 놀고 있는 서버와 열일하는 서버가 나뉜다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n424&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n425&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Modular&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n426&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n427&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n428&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버 한대 추가할 때 재분배 양이 많아 진다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n429&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n430&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Indexed&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n431&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n432&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n433&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 Key가 어디에 저장되어야 할 관리 서버가 따로 존재.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n434&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n435&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단일 장애 포인트 문제 존재.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n436&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n437&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis Cluster&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n438&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n439&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n440&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hash 기반으로 slot 16384로 구분&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n441&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n442&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n443&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hash 알고리즘은 CRC16을 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n444&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n445&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 Redis 서버는 이 slot range를 가지고 있고, 데이터 마이그레이션은 이 slot 단위의 데이터를 다른 서버로 전달하게 된다.(migrateCommand 사용)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n446&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n447&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n448&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n449&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n450&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자체적인 Failover 기능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n451&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n452&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;slot 단위의 데이터 관리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n453&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n454&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n455&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n456&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n457&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리 사용량이 더 많다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n458&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n459&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마이그레이션 자체는 관리자가 시점 결정해야 함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n460&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n461&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;라이브러리 구현이 필요함.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n462&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;6. Redis Failover&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n463&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n464&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n465&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Coordinator 기반&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n466&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n467&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n468&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Zookeeper, etcd, consul 등의 Coordinator 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n469&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n470&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Health checker&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n471&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n472&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Coordinator가 API서버에 Primary notify 해줌&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n473&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n474&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 기능을 이용하도록 개발이 필요하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n475&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n476&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;VIP 기반&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n477&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n478&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n479&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;API 서버는 가상 IP 10.0.0.1로만 접속하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n480&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n481&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Health checker는 10.0.0.1 할당 받은 1번 서버 레디스가 죽으면 10.0.0.1을 redis 2번 서버에 할당 &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n482&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n483&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DNS 기반&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n484&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n485&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n486&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;VIP 기반 방식과 같음.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n487&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n488&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;VIP/DNS 특징&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n489&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n490&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n491&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라이언트에 추가적인 구현이 필요없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n492&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n493&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;VIP 기반은 외부로 서비스를 제공해야 하는 서비스 업자에 유리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n494&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n495&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DNS 기반은 DNS cache 를 관리해야함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n496&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;7. Monitor Factor&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n497&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n498&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n499&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis Info를 통한 정보&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n500&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n501&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n502&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RSS&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n503&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n504&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Used Memory&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n505&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n506&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Connection 수&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n507&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n508&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;초당 처리 요청 수&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n509&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n510&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;System&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n511&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n512&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n513&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CPU&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n514&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n515&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Disk&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n516&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n517&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Network rx/tx&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n518&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n519&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CPU 100%를 칠 경우&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n520&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n521&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n522&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;처리량이 매우 많다면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n523&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n524&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n525&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CPU 성능 좋은 서버로 이전&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n526&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n527&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 CPU 성능에 영향을 받음&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n528&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n529&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n530&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나 단순 get/set은 초당 10만 이상 처리 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n531&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n532&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;O(N) 계열의 특정 명령이 많은 경우&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n533&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n534&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n535&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Monitor 명령을 통해 특정 패턴을 파악하는 것이 필요&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n536&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n537&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Monitor 잘못쓰면 부하로 해당 서버에 더 큰 문제를 일이킬 수도 있음(짧게 쓰는게 중요함)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n538&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;8. 결론&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n539&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n540&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n541&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스는 기본적으로 매우 좋은 툴이다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n542&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n543&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나 메모리를 빡빡하게 쓸 경우 관리가 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n544&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n545&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n546&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;32기가 장비면 24기가 이상 사용하면 장비 증설을 고려하는 것이 좋음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n547&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n548&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Write가 Heavy할 경우 마이그레이션도 주의해야 함.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n549&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n550&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;레디스를 Cache로 쓰는 경우&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; - 문제가 적게 발생&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n551&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n552&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n553&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레디스가 문제가 있을 때 DB등의 부하가 어느정도 증가하는지 확인 필요함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n554&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n555&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Consistent Hashing도 부하를 아주 균등하게 나누지는 않음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n556&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n557&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;레디스를 Persistent Store로 쓰는 경우&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n558&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n559&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n560&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;무조건 Primary/Secondary 구조로 구성이 필요함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n561&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n562&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리를 절대로 빡빡하게 사용하면 안됨&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n563&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n564&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n565&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정기적인 마이그레이션 필요&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n566&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n567&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가능하면 자동화 툴 만들어 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n568&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n569&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;RDB/AOF가 필요하다면 Secondary에서만 구동&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Experience/2019</category>
      <category>redis</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/133</guid>
      <comments>https://ict-nroo.tistory.com/133#entry133comment</comments>
      <pubDate>Fri, 22 Nov 2019 14:05:47 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 즉시 로딩과 지연 로딩(FetchType.LAZY or EAGER)</title>
      <link>https://ict-nroo.tistory.com/132</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99E7424D5D760E2B2B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99E7424D5D760E2B2B&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h2 cid=&quot;n194&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시 로딩과 지연 로딩&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n195&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n196&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n197&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 학습 처음에 했던 질문. Member를 조회할 때 Team도 함께 조회 해야 할까?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n198&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n199&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n200&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비즈니스 로직에서 단순히 멤버 로직만 사용하는데 함께 조회하면, 아무리 연관관계가 걸려있다고 해도 손해이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n201&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n202&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 이 문제를 지연로딩 LAZY를 사용해서 프록시로 조회하는 방법으로 해결 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n203&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드로 이해하기&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n204&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n205&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n206&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member와 Team 사이가 다대일 @ManyToOne 관계로 매핑되어 있는 상황에서,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n207&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n208&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@ManyToOne 어노테이션에 fetch 타입을 줄 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n209&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;FetchType.LAZY&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n211&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Getter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Setter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BaseEntity&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;name&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Integer&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Enumerated&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EnumType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;STRING&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RoleType&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;roleType&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Lob&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;description&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 패치 타입 LAZY 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;FetchType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;LAZY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;team_id&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;insertable&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;updatable&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;locker_id&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Locker&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;locker&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;MemberProduct&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberProducts&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getMembers&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;add&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n212&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n213&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메인 함수에서 팀과 멤버를 저장하고 조회 해보자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n214&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member를 조회하고, Team 객체의 클래스를 확인해보면 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Proxy 객체&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가 조회 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n217&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getClass&lt;/span&gt;());&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n218&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age6_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.description&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; descript7_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; locker_10_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.roleType&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; roleType8_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; team_id11_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name9_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name2_3_1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member member0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Locker locker1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt;=locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;class hello&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.jpa.Team&lt;/span&gt;$HibernateProxy$e97rdqZR  // 프록시 객체&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n219&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n220&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀의 이름을 출력해보자&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n221&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n222&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n223&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 시점에. 실제로 팀 객체의 조회가 필요한 시점에 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n224&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getClass&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TEAM NAME : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;());&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n225&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age6_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.description&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; descript7_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; locker_10_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.roleType&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; roleType8_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; team_id11_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name9_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name2_3_1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member member0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Locker locker1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt;=locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;class hello&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.jpa.Team&lt;/span&gt;$HibernateProxy$z4JtUeLD  // 프록시 객체&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name6_8_0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team team0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;TEAM NAME : teamA&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n226&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지연 로딩(LAZY)&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n227&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/32_lazy.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/32_lazy.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n228&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n229&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;내부 매커니즘은 위의 그림과 같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n231&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n232&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로딩되는 시점에 Lazy 로딩 설정이 되어있는 Team 엔티티는 프록시 객체로 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n233&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n234&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;후에 실제 객체를 사용하는 시점에(Team을 사용하는 시점에) 초기화가 된다. DB에 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n235&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n236&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n237&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getTeam()으로 Team을 조회하면 프록시 객체가 조회가 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n238&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n239&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getTeam().getXXX()으로 팀의 필드에 접근 할 때, 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n240&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대부분 비즈니스 로직에서 Member와 Team을 같이 사용한다면?&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n241&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n242&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n243&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이런 경우 LAZY 로딩을 사용한다면, SELECT 쿼리가 따로따로 2번 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n244&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n245&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;네트워크를 2번 타서 조회가 이루어 진다는 이야기이다. 손해다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n246&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n247&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이때는 즉시 로딩(EAGER) 전략을 사용해서 함께 조회하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n248&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시 로딩(EAGER)&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n249&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n250&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n251&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;fetch 타입을 EAGER로 설정하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n252&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n253&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대부분의 JPA 구현체는 가능하면 조인을 사용해서 SQL 한번에 함께 조회하려고 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n254&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n255&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 하면, 실제 조회할 때 한방 쿼리로 다 조회해온다.(실제 Team을 사용할 때 쿼리 안나가도 된다.)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n256&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n257&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행 결과를 보면 Team 객체도 프록시 객체가 아니라 실제 객체이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n258&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Getter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Setter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BaseEntity&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;FetchType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EAGER&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;team_id&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;insertable&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;updatable&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n259&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getClass&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TEAM NAME : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n260&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;실행 결과&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age6_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.description&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; descript7_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; locker_10_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.roleType&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; roleType8_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; team_id11_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name9_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name2_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name6_8_2_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member member0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Locker locker1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt;=locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team team2_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt;=team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;class hello&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.jpa.Team&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;TEAM NAME : teamA&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n261&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시와 즉시 로딩 주의할 점&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n262&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n263&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n264&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서는 가급적 지연 로딩만 사용하다. 즉시 로딩 쓰지 말자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n265&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n266&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n267&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 구현체도 한번에 가저오려고 하고, 한번에 가져와서 쓰면 좋지 않나?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n268&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n269&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시 로딩을 적용하면 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;예상하지 못한 SQL이 발생&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n270&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n271&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n272&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@ManyToOne이 5개 있는데 전부 EAGER로 설정되어 있다고 생각해보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n273&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n274&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인이 5개 일어난다. 실무에선 테이블이 더 많다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n275&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n276&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시 로딩은 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPQL에서 N+1 문제&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 일으킨다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n277&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n278&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n279&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서 복잡한 쿼리를 많이 풀어내기 위해서 뒤에서 학습할 JPQL을 많이 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n280&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.find()는 PK를 정해놓고 DB에서 가져오기 때문에 JPA 내부에서 최적화를 할 수 있다.(한방 쿼리)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n282&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n283&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, JPQL에선 입력 받은 query string이 그대로 SQL로 변환된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n284&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n285&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n286&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;select m from Member m&quot; 이 문장으로 당연히 Member만 SELECT 하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n287&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n288&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MEMBER를 쭉 다 가져와서 보니까&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n289&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n290&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어 근데, Member 엔티티의 Team의 fetchType이 EAGER네?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n291&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n292&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n293&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;LAZY면 프록시를 넣으면 되겠지만, EAGER는 반환하는 시점에 다 조회가 되어 있어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n294&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n295&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, Member를 다 가져오고 나서, 그 Member와 연관된 Team을 다시 다 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n296&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n297&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드로 이해하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n298&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n299&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n300&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버가 2명이고, 팀도 2개다. 각각 다른 팀이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n301&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n302&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 멤버를 조회해보자.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n303&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team1&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team1&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team2&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamB&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team2&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team1&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberB&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team2&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createQuery&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;select m from Member m&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getResultList&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n304&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n305&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행 결과를 보면, &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n306&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n307&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일단 멤버를 조회해서 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n308&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n309&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 나서 Member들의 Team이 비어있으니까 채워서 반환시키기 위해서 TEAM을 각각 쿼리 날려서 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버가 수천 수만명이라고 생각하면...... 아찔해진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;N + 1의 문제의 의미&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;는&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n314&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n315&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n316&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래 처럼 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;쿼리를 1개&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 날렸는데, 그것 때문에 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;추가 쿼리가 N개&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 나간다는 의미이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n317&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;m &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;Member m */&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age6_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.description&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; descript7_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; locker_10_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.roleType&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; roleType8_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; team_id11_4_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name9_4_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member member0_&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name6_8_0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team team0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_8_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name6_8_0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team team0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n318&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n319&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론. 실무에서는 LAZY 로딩 전략을 가져가자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n320&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n321&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n322&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;근데 실무에서 대부분 멤버 팀을 함께 사용하는 경우가 있는데, 그러면 LAZY로 해놓고 계속 쿼리 두방 날려서 조회 해올까요?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n323&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n324&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이런 경우를 위해서 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPQL의 fetch join&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 을 통해서 해당 시점에 한방 쿼리로 가져와서 쓸 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n325&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n326&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;추가적으로 엔티티그래프와 어노테이션으로 푸는 방법, 배치 사이즈 설정으로 해결하는 방법이 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n327&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n328&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대부분 fetch join으로 해결 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n329&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n330&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@ManyToOne, @OneToOne과 같이 @XXXToOne 어노테이션들은 기본이 즉시 로딩(EAGER) 이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n331&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n332&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n333&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;꼭 LAZY로 명시적으로 설정해서 사용하자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n334&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n335&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;@OneToMany와 @ManyToMany는 기본이 지연 로딩(LAZY)이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n336&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지연 로딩 활용&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n337&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/33_lazy.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/33_lazy.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n338&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n339&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n340&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member와 Team을 자주 함께 사용한다 -&amp;gt; 즉시 로딩&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n341&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n342&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member와 Order는 가끔 사용한다 -&amp;gt; 지연 로딩&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n343&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n344&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Order와 Product는 자주 함꼐 사용한다 -&amp;gt; 즉시 로딩&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n345&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n346&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위와 같이 설정해 놓고 쓸 수 있지만, 굉장히 이론적인 개념이고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n347&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n348&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서는 다 LAZY로 쓰자. 즉시 로딩 사용하지 말자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n349&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n350&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL fetch join이나, 엔티티 그래프 기능으로 해결하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n351&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n352&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시 로딩은 상상하지 못한 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n488&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n489&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n490&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n491&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>eager</category>
      <category>fetchtype</category>
      <category>JPA</category>
      <category>lazy</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/132</guid>
      <comments>https://ict-nroo.tistory.com/132#entry132comment</comments>
      <pubDate>Mon, 9 Sep 2019 17:34:38 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 프록시란?</title>
      <link>https://ict-nroo.tistory.com/131</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/990A47455D760AB617&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F990A47455D760AB617&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h2 cid=&quot;n17&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n18&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n19&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n20&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;질문으로 부터 프록시에 대한 학습을 시작한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n21&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member 엔티티를 조회할 때 Team도 함께 조회해야 할까?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n23&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로 필요한 비즈니스 로직에 따라 다르다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비즈니스 로직에서 필요하지 않을 때가 있는데, 항상 Team을 함께 가져와서 사용할 필요는 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;낭비가 발생하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n30&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n31&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 이 낭비를 하지 않기 위해, 지연로딩과 프록시라는 개념으로 해결한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n32&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 기초&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n33&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지연 로딩을 이해하려면, 프록시의 개념에 대해서 명확하게 이해해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA에서 em.find() 말고, em.getReference()라는 메서드도 제공 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;em.find()&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 는 DB를 통해서 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;실제 엔티티 객체를 조회&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하는 메서드이고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n40&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;em.getReference()&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 는 DB의 조회를 미루는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;가짜(프록시) 엔티티 객체를 조회하는 메서드&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n42&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member 엔티티&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n44&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Getter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Setter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BaseEntity&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;name&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Integer&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Enumerated&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EnumType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;STRING&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RoleType&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;roleType&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Lob&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;description&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;team_id&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;locker_id&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Locker&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;locker&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;MemberProduct&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberProducts&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n45&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n46&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.find()로 멤버를 조회하면 아래와 같이 데이터베이스에 쿼리가 바로 나간다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n47&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setCreatedBy&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;creator&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;findMember.id = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;findMember.username = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getUsername&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n48&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert hello.jpa.Member&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, createdBy, createdDate, lastModifiedBy, lastModifiedDate, age, description, locker_id, roleType, name) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?, ?, ?, ?, ?, ?, ?, ?, ?)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age6_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.description&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; descript7_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; locker_10_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.roleType&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; roleType8_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; team_id11_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name9_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name2_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name6_8_2_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member member0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Locker locker1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt;=locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team team2_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt;=team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;findMember&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; = &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;findMember&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.username&lt;/span&gt; = creator&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나, em.getReference()로 멤버를 조회하면, 실제로 필요한 시점에 데이터베이스에 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n51&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n53&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행결과에서 보면 findMember.username 필드를 출력할 때, DB에서 조회가 필요하므로 그때 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n54&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n55&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 findMember.getClass()로 객체를 확인하면 Member객체가 아니라, 하이버네이트가 강제로 만든 가짜 클래스인 HibernateProxy 객체인 것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n56&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;creator&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;findMember = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getClass&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;findMember.id = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;findMember.username = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getUsername&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n57&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert hello.jpa.Member&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, createdBy, createdDate, lastModifiedBy, lastModifiedDate, age, description, locker_id, roleType, name) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?, ?, ?, ?, ?, ?, ?, ?, ?)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;findMember = class hello&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.jpa.Member&lt;/span&gt;$HibernateProxy$yJgMgbkR&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;findMember&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; = &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age6_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.description&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; descript7_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; locker_10_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.roleType&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; roleType8_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; team_id11_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name9_4_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name2_3_1_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdB2_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.createdDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; createdD3_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi4_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; lastModi5_8_2_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name6_8_2_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member member0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Locker locker1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.locker_id&lt;/span&gt;=locker1_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  left outer &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;join&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team team2_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;on&lt;/span&gt; member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team_id&lt;/span&gt;=team2_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  member0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;findMember&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.username&lt;/span&gt; = creator&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n58&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 특징&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/29_proxy.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/29_proxy.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n60&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;실제 클래스를 상속&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 받아서 만들어진다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n63&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n64&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n65&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트가 내부적으로 상속받아서 만든다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 클래스와 겉 모양이 같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용하는 입장에서는 진짜 객체인지 프록시 객체인지 구분하지 않고 사용하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n70&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;/p&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/30_proxy.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/30_proxy.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n72&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체는 실제 객체의 참조(target)을 보관한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드를 호출한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n77&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체의 초기화&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/31_proxy.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/31_proxy.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n79&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n80&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.getReference()로 프록시 객체를 가져온 다음에, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;getName() 메서드를 호출&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 하면&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n83&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n84&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MemberProxy 객체에 처음에 target 값이 존재하지 않는다. JPA가 영속성 컨텍스트에 초기화 요청을 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트가 DB에서 조회해서&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 Entity를 생성해준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n89&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n90&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 프록시 객체가 가지고 있는 target(실제 Member)의 getName()을 호출해서 결국 member.getName()을 호출한 결과를 받을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체에 target이 할당 되고 나면, 더이상 프록시 객체의 초기화 동작은 없어도 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로는 위와 같이 프록시 객체가 동작 한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n94&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 특징 정리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n95&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체는 처음 사용할 때 한 번만 초기화 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체를 초기화 할 때, 프록시 객체가 실제로 엔티티로 바뀌는 것은 아니다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n100&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n101&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n102&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;초기화 되면 프록시 객체를 통해서 실제 엔티티에 접근 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정확히 말하면 target에 값이 채워지는 것 뿐이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.getReference()로 조회한 클래스를 getClass()로 보면, HibernateProxy 클래스였던 것을 위에서 학습했다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;심화&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;)프록시 객체는 원본 엔티티를 상속 받는다고 했다. 프록시 객체와 원본 객체가 타입이 다르다. 타입 체크시 주의해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n109&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;== 비교 실패한다. jpa에서 타입 비교는 웬만하면, instanceOf를 사용해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n112&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;m1 == m2 : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m2&lt;/span&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n113&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; : &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n114&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;find : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;reference : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;instanceof&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n115&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; : &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; : &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n117&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;심화&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;)영속성 컨텍스트에 찾는 엔티티가 이미 있으면, em.getReference()를 호출해도 실제 엔티티를 반환한다. 반대도 똑같다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n118&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생각을 해보면, 이미 영속성 컨텍스트에 올려논 객체를 굳이 다시 프록시로 감싸서 반환하는게 의미가 없다. 이점이 없다. JPA는 그렇게 하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPA는 하나의 영속성 컨텍스트에서 조회하는 같은 엔티티의 동일성을 보장한다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n123&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n124&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n125&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 기본적으로 제공하는 매커니즘 중 하나이다. 반복가능한 읽기(repeatable read) 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, 아래의 코드에서 두 객체는 같다. em.gerReference()로 프록시 객체를 굳이 가져오지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n128&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;find == reference : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt;)); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// true&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;더 심화&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;) 그렇다면 둘다 getReference() 로 가져오면?!&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n131&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n132&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;둘 다, 프록시 객체이다. 근데, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;같은 프록시 객체&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다. JPA는 한 트랜잭션에서 조회하는 같은 엔티티의 동일성을 보장한다. 프록시 객체도.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n134&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;reference1 == reference2 : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference2&lt;/span&gt;)); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// true&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러면, getReference()로 먼저 가져오고, find()로 실제 객체를 조회하면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n137&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n139&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하나는 프록시 객체, 하나는 당연히 find니까 실제 객체이지 않을까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n140&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n141&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론 부터 말하면 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;둘 다 같은 프록시 객체를 반환&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n142&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n143&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한 트랜잭션에서 조회하는 같은 엔티티의 동일성을 보장 하기 위해서.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한 트랜잭션 내에서 reference == find를 true로 반환하기 위해서 이렇게 동작한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;여기서 가장 중요한 것은, 이렇게 내부적으로 JPA가 복잡하게 다 처리해주지만, 우리가 개발할때는 프록시던 진짜 객체던 중요하지 않다. 그냥 멤버 조회 하면서 개발 하면 된다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n148&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;reference == find : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;)); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// true&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n151&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n152&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n153&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;p cid=&quot;n150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-bottom: 0.5rem; box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서 많이 만나게 되는 문제&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n151&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n152&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n153&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트의 도움을 받을 수 없는 준영속 상태일 때, 초기화 문제가 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n152&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n153&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;box-sizing: border-box;&quot;&gt;즉, &lt;/span&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션의 범위 밖에서 프록시 객체를 조회&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하려고 할 때!&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트는 org.hibernate.LazyInitializationException 예외를 터트린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;이를 해결하기 위해서 Spring Boot에서는 open-in-view 설정을 true로 가져간다.&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;영속성 컨텍스트(하이버네이트 세션)를 뷰 렌더링하는 시점까지 유지시키는 방법인데,&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;open-session-in-view와 관련해서는 추가로 학습하자.(블로그 url만 봐도 알만한 분들의 좋은 글로 대신...)&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;a href=&quot;https://kingbbode.tistory.com/27&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://kingbbode.tistory.com/27&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;a href=&quot;https://kwonnam.pe.kr/wiki/springframework/springboot/jpa&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://kwonnam.pe.kr/wiki/springframework/springboot/jpa&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;a href=&quot;https://whiteship.tistory.com/1636&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://whiteship.tistory.com/1636&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n151&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.detach(), em.close(), em.clear() 모두 똑같은 예외가 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n161&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 객체를 초기화 할 수 없다. 더이상 영속성 컨텍스트의 도움을 받지 못한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n163&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;creator&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getReference&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;detach&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//em.close도 동일&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;findMember.username = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reference&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getUsername&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n164&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;org&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.hibernate.LazyInitializationException&lt;/span&gt;: could &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; initialize proxy [hello&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.jpa.Member&lt;/span&gt;#1] - no Session&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;at org&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.hibernate.proxy.AbstractLazyInitializer.initialize&lt;/span&gt;(AbstractLazyInitializer&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.java&lt;/span&gt;:169)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;at org&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.hibernate.proxy.AbstractLazyInitializer.getImplementation&lt;/span&gt;(AbstractLazyInitializer&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.java&lt;/span&gt;:309)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;at org&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor.intercept&lt;/span&gt;(ByteBuddyInterceptor&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.java&lt;/span&gt;:45)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;at org&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.hibernate.proxy.ProxyConfiguration&lt;/span&gt;$InterceptorDispatcher&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.intercept&lt;/span&gt;(ProxyConfiguration&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.java&lt;/span&gt;:95)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;at hello&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.jpa.Member&lt;/span&gt;$HibernateProxy$bCLaGKb1&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.getUsername&lt;/span&gt;(&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;Unknown&lt;/span&gt; Source)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;at JpaMain&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.main&lt;/span&gt;(JpaMain&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.java&lt;/span&gt;:35)&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n165&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 관련 Utils&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n166&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n167&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n168&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 확인을 도와주는 Util성 메소드들이 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n169&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n170&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 인스턴스의 초기화 여부를 직접 확인&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n171&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n172&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n173&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;PersistenceUnitUtil.isLoaded(Object entity);&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n174&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 엔티티 매니저 팩토리로 부터 get&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;boolean&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isLoaded&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;emf&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getPersistenceUnitUtil&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isLoaded&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;referenceMember&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n175&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n176&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 클래스 확인 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n177&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;entity.getClass().getName() 출력 (..javasist.. or HibernateProxy...)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프록시 강제 초기화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n182&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n183&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n184&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;org.hibernate.Hibernate.initialize(entity);&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n185&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;initialize&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;referenceMamber&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n186&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n187&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;참고로&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n188&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n189&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n190&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 표준은 강제 초기화 메서드(initialize)가 없다. Hibernate가 지원한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n191&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n192&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그냥 프록시 객체에서 getXXX() 호출해서 강제로 초기화 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n488&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n489&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n490&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n491&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>Proxy</category>
      <category>프록시</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/131</guid>
      <comments>https://ict-nroo.tistory.com/131#entry131comment</comments>
      <pubDate>Mon, 9 Sep 2019 17:27:18 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 영속성 컨텍스트와 플러시 이해하기</title>
      <link>https://ict-nroo.tistory.com/130</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/994F673E5D64FB8C04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F994F673E5D64FB8C04&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트&lt;/span&gt;&lt;/h1&gt;&lt;p cid=&quot;n2&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA를 공부할 때 가장 중요한게&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체와 관계형 데이터베이스를 매핑하는 것(Object Relational Mapping)&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 과&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트를 이해하는 것&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 이다. &lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;두가지 개념은 꼭 알고 JPA를 활용하자.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n6&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저 팩토리와 엔티티 매니저&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n7&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 스레드가 하나 생성될 때 마다(매 요청마다) EntityManagerFactory에서 EntityManager를 생성한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EntityManager는 내부적으로 DB 커넥션 풀을 사용해서 DB에 붙는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n12&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/10_jpa_em.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/10_jpa_em.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n12&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/10_jpa_em.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n13&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n14&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n15&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n16&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPA를 이해하는데 가장 중요한 용어&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n17&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n18&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;엔티티를 영구 저장하는 환경&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;이라는 뜻&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n19&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n20&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;EntityManager.persist(entity);&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n21&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n22&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n23&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;앞의 예제에서 persist()로 db에 객체를 저장하는 것이라고 배웠지만,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로는 DB에 저장하는 것이 아니라, 영속성 컨텍스트를 통해서 엔티티를 영속화 한다는 뜻이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정확히 말하면 persist() 시점에는 영속성 컨텍스트에 저장한다. DB 저장은 이후이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저? 영속성 컨텍스트?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n30&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n31&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n32&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트는 논리적인 개념&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n33&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;눈에 보이지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저를 통해서 영속성 컨텍스트에 접근한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/11_jpa_em.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 755px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/11_jpa_em.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n38&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링에서 EntityManager를 주입 받아서 쓰면, 같은 트랜잭션의 범위에 있는 EntityManager는 동일 영속성 컨텍스트에 접근한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;h2 cid=&quot;n41&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티의 생명주기&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n42&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/12_entity_lifecycle.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/12_entity_lifecycle.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n43&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;비영속(new/transient)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n46&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n47&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n48&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트와 전혀 관계가 없는 상태&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n49&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 객체를 생성만 한 상태(비영속)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setId&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;회원1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n50&quot; mdtype=&quot;list_item&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n51&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;영속(managed)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n52&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트에 저장된 상태&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티가 영속성 컨텍스트에 의해 관리된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이때 DB에 저장 되지 않는다. 영속 상태가 된다고 DB에 쿼리가 날라가지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n59&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n60&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션의 커밋 시점에 영속성 컨텍스트에 있는 정보들이 DB에 쿼리로 날라간다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n61&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 객체를 생성한 상태(비영속)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setId&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;회원1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManager&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;emf&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createEntityManager&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTransaction&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;begin&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 객체를 저장한 상태(영속)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n62&quot; mdtype=&quot;list_item&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n63&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;준영속(detached)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n64&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n65&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n66&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트에 저장되었다가 분리된 상태&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n67&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 회원 엔티티를 영속성 컨텍스트에서 분리, 준영속 상태&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;detach&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;삭제(removed)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n70&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;font-size: 14px; box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;삭제된 상태. DB에서도 날린다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n73&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 객체를 삭제한 상태&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;remove&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 12.6px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;h2 cid=&quot;n74&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트의 이점&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n75&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n76&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n77&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션과 DB사이에 왜 중간에 영속성 컨텍스트가 있냐. 왜 필요하냐. 아래와 같은 개념들이 가능하려면, 영속성 컨텍스트가 존재해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n78&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n79&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/03_persistence_context_cache.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/03_persistence_context_cache.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n80&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트(엔티티 매니저)에는 내부에 1차 캐시가 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n83&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n84&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티를 영속성 컨텍스트에 저장하는 순간. 1차 캐시에&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;key : @Id로 선언한 필드 값, value : 해당 엔티티 자체로 캐시에 저장된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시가 있으면 어떤 이점이있을까?  조회할 때 이점이 생긴다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n89&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n90&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;find()가 일어나는 순간, 엔티티 매니저 내부의 1차 캐시를 먼저 찾는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시에 엔티티가 존재하면 바로 반환한다. DB 들리지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n93&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n94&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;주의! 1차 캐시는 글로벌하지 않다. 해당 스레드 하나가 시작할때 부터 끝날때 까지 잠깐 쓰는거다. 공유하지 않는 캐시다&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n95&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;100명 한테 요청 100개 오면, 엔티티 매니저 100개 생기고 1차캐시도 100개 생긴다. 스레드 종료되면, 그때 다 사라진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션의 범위 안에서만 사용하는 굉장히 짧은 캐시 레이어이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전체에서 쓰는 글로벌 캐시는 2차 캐시라고 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n102&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setId&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;회원1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 1차 캐시에 저장됨&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 1차 캐시에서 조회&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시에 데이터가 없다면? 데이터베이스에서 조회 한다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n105&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n106&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n107&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;member2를 조회하는데 1차 캐시에 해당 엔티티가 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러면 DB에서 꺼내온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시에 저장&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n112&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n113&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그 후에 member2를 반환한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n114&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n115&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다시 member2를 조회하면, 1차 캐시에 있는 member2가 반환된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n116&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SELECT 쿼리가 안나간다. 한 트랜잭션 내에서.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n119&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;동일성(identity) 보장&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n120&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속 엔티티의 동일성을 보장한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시 덕분에 member1을 두번 조회해도 다를 객체가 아니다. 같은 레퍼런스가 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시로 반복 가능한 읽기(REPEATABLE READ) 등급의 트랜잭션 격리 수준을 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스가 아닌 애플리케이션 차원에서 제공&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n127&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;b&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Member2&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Systen&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;b&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 동일성 비교 true &lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n128&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션을 지원하는 쓰기 지연(transactional write-behind) - 엔티티 등록&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n129&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/04_transactional_write_behind.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/04_transactional_write_behind.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n130&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n131&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n132&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션 내부에서 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;persist()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가 일어날 때, &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티들을 1차 캐시에 저장하고, 논리적으로 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;쓰기 지연 SQL 저장소&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 라는 곳에 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;INSERT 쿼리들을 생성해서 쌓아 놓는다&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에 바로 넣지 않고 기다린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;언제 넣냐. &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;commit()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하는 시점에 DB에 동시에 쿼리들을 쫙 보낸다.(쿼리를 보내는 방식은 동시 or 하나씩 옵션에 따라)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n139&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 쌓여있는 쿼리들을 DB에 보내는 동작이 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;flush()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;flush()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 는 1차캐시를 지우지는 않는다. 쿼리들을 DB에 날려서 DB와 싱크를 맞추는 역할을 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n143&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n144&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로 쿼리를 보내고 나서, &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;commit()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n146&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션을 커밋하게 되면, &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;flush() 와 commit()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 두가지 일을 하게 되는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n147&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManager&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;emf&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createEntityManager&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityTransaction&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTransaction&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 엔티티 매니저는 데이터 변경시 트랜잭션을 시작해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;begin&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 트랜잭션 시작&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberB&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 이때까지 INSERT SQL을 데이터베이스에 보내지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 커밋하는 순간 데이터베이스에 INSERT SQL을 보낸다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 트랜잭션 커밋&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n148&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n149&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;persistence.xml에 아래와 같은 옵션을 줄 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n151&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n152&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n153&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JDBC 일괄 처리 옵션으로 커밋 직전까지 insert 쿼리를 해당 사이즈 만큼 모아서 한번에 처리한다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;xml&quot; cid=&quot;n154&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hibernate.jdbc.batch_size&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket cm-error&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n155&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경 감지(Dirty Checking) - 엔티티 수정&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 수정이 일어나면 update()나 persist()로 영속성 컨텍스트에 알려줘야 하지 않을까?&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n159&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManager&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;emf&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createEntityManager&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityTransaction&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTransaction&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;begin&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 트랜잭션 시작&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 영속 엔티티 조회&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 영속 엔티티 수정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;nj&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setAge&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;27&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//em.update(member) 또는 em.persist(member)로 다시 저장해야 하지 않을까?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 트랜잭션 커밋&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n160&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n161&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 데이터만 수정하면 끝이다. 데이터만 set하고 트랜잭션을 커밋하면 자동으로 업데이트 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n162&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n163&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어떻게 이게 가능할까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n164&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n165&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경 감지를 Dirty Checking이라고 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실은 1차 캐시에 저장할 때 동시에 스냅샷 필드도 저장한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러고나서 commit()또는 flush()가 일어날 때 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;엔티티와 스냅샷을 비교&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해서, 변경사항이있으면 UPDATE SQL을 알아서 만들어서 DB에 저장한다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n170&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/13_dirty_checking.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 755px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/13_dirty_checking.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n171&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n172&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;update() 만들면 되지 왜 이렇게 복잡한 방법으로 처리하나...&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n173&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n174&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사상 때문이다. 우리는 자바 컬렉션에서, 리스트에서 값을 변경하고 리스트에 다시 그 값을 담지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;값을 변경하면 변경된 리스트가 유지되는 것과 같은 컨셉이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, 영속상태의 엔티티를 가져와서 값만 바꾸면 수정은 끝이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 수정시 기본적으로 전체 필드 다 업데이트, 변경된 필드만 반영 되도록 할 수도 있음. &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@DynamicUpdate&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n182&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n183&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n184&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://jojoldu.tistory.com/415&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://jojoldu.tistory.com/415&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n185&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 삭제&lt;/span&gt;&lt;/h3&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n186&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;memberA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;remove&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 엔티티 삭제&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n187&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n188&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n189&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;삭제는 위의 매커니즘이랑 같고, 트랜잭션의 commit 시점에 DELETE 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;h2 cid=&quot;n190&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n191&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n194&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n195&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션 커밋이 일어날 때 플러시가 동작하는데, 쓰기 지연 저장소에 쌓아 놨던 INSERT, UPDATE, DELETE SQL들이 데이터베이스에 날라간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n196&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n197&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쉽게 얘기해서 영속성 컨텍스트의 변경 사항들과 데이터베이스를 싱크하는 작업이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n198&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시 발생&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n199&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n200&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n201&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시가 발생하면 어떤 일이 생기나&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n202&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n203&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n204&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경을 감지한다. Dirty Checking.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n205&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n206&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;수정된 엔티티를 쓰기 지연 SQL 저장소에 등록한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n207&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n208&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다.(등록, 수정, 삭제 SQL)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n209&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시가 발생한 다고 커밋이 이루어지는게 아니고, 플러시 다음에 커밋이 일어난다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n211&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트를 Flush 하는 방법&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n212&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;em.flush()&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 로 직접호출&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n215&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 영속&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;200L&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;플러시 직접 호출하면 쿼리가 커밋 전 플러시 호출 시점에 나감&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n216&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n217&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션 커밋&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시 플러시 자동 호출&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n218&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n219&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPQL 쿼리 실행&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하면 플러시 자동 호출&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n220&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n221&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n222&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL 쿼리 실행시 플러시가 자동으로 호출되는 이유는&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n223&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n224&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래와 같이 member1,2,3을 영속화한 상태에서. 쿼리는 안날라간 상태&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n225&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n226&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL로 SELECT 쿼리를 날리려고 하면 저장되어 있는 값이 없어서 문제가 생길 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n227&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n228&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 이런 상황을 방지하고자 JPQL 실행 전에 무조건 flush()로 DB와의 싱크를 맞춘 다음에 JPQL 쿼리를 날리도록 설정 되어 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n229&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그래서 아래의 상황에서는 JPQL로 멤버들을 조회할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n231&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 중간에 JPQL 실행&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createQuery&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;select m from Member m&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getResultList&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n232&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n233&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;플러시가 일어나면 1차 캐시가 삭제될까?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n234&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n235&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n236&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;삭제 되지 않는다. 쓰기 지연 SQL 저장소에 있는 쿼리들만 DB에 전송되고 1차 캐시는 남아있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n237&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시 모드 옵션&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n238&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n239&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n240&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;em.setFlushMode(FlushModeType.COMMIT);&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n241&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n242&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n243&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;FlushModeType.AUTO&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n244&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n245&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n246&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커밋이나 쿼리를 실행할 때 플러시(&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;기본값&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n247&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n248&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;FlushModeType.COMMIT&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n249&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n250&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n251&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커밋 할때만 플러시&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n252&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시 정리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n253&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n254&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n255&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시는 영속성 컨텍스트를 비우지 않는다. 오해하면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n256&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n257&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n258&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n259&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;플러시가 동작할 수 있는 이유는 데이터베이스 트랜잭션이라는 작업 단위(개념)가 있기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n260&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n261&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n262&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어쨋든 트랜잭션이 시작되고 커밋되는 시점에만 동기화 해주면 되기 때문에, 그 사이에서 플러시 매커니즘의 동작이 가능한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n263&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n264&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 기본적으로 데이터를 맞추거나 동시성에 관련된 것들은 데이터베이스 트랜잭션에 위임한다. 참고로 알아두자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;h2 cid=&quot;n265&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;준영속 상태&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n266&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n267&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n268&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;영속 상태&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n269&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n270&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n271&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트의 1차 캐시에 올라간 상태가 영속 상태이다.&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 엔티티 매니저가 관리하는 상태.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n272&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n273&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.persist()로 영속성 컨텍스트에 저장한 상태도 영속 상태이지만,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n274&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n275&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;em.find()로 조회를 할 때, 영속성 컨텍스트 1차 캐시에 없어서 DB에서 조회해와서 1차 캐시에 저장한 상태도 영속 상태다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n276&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n277&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드로 보면&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n278&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n279&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n280&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.find()가 일어 날때, 1차 캐시에 없으므로 DB에서 조회한 엔티티를 1차 캐시에 넣는다. 영속상태가 됐다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n281&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName으로 이름을 바꾸고 커밋 하려니까, Dirty Checking이 일어나서 1차 캐시의 엔티티와 스냅샷이 다른 것을 감지하고 Update 쿼리를 날리게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n283&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;150L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;AAAAA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n284&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n285&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;준영속 상태 - 영속 상태의 엔티티가 영속성 컨텍스트에서 분리된 상태(detached)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n286&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n287&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n288&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;em.detach(member);&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 로 멤버를 영속성 컨텍스트에서 분리하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n289&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n290&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션을 커밋하면, 아무 일도 일어나지 않는다. JPA가 관리 하지 않는 객체가 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n291&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n292&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로 아래에선 UPDATE 쿼리가 나가지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n293&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;150L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;AAAAA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;detach&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n294&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n295&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트가 제공하는 기능을 사용하지 못함. 쿼리 안나감.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n296&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n297&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;준영속 상태로 만드는 방법&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n298&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n299&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n300&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.detach(entity) - 특정 엔티티만 준영속 상태로 전환&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n301&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n302&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.clear() - 영속성 컨텍스트를 완전히 초기화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n303&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n304&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n305&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래 코드의 경우 첫번째 find에서 멤버를 SELECT 해서 영속성 컨텍스트에 저장하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n306&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n307&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;영속성 컨텍스트를 초기화 했다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n308&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n309&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러고나서 같은 아이디를 가지는 멤버를 다시 조회했을때는 SELECT 쿼리가 다시 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;총 2번의 SELECT 쿼리가 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;clear는 테스트 케이스 작성시에 도움이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n314&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;150L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;AAAAA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;150L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transaction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n315&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n316&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.close() - 영속성 컨텍스트를 종료&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n317&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n318&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n319&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n320&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>영속성 컨텍스트</category>
      <category>플러시</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/130</guid>
      <comments>https://ict-nroo.tistory.com/130#entry130comment</comments>
      <pubDate>Tue, 27 Aug 2019 18:47:32 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] @MappedSuperclass</title>
      <link>https://ict-nroo.tistory.com/129</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99330B455D63B7E32B&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99330B455D63B7E32B&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 cid=&quot;n306&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;@MappedSuperclass&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n307&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n308&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n309&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체의 입장에서&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 공통 매핑 정보가 필요할 때 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;id, name은 객체의 입장에서 볼 때 계속 나온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 공통 매핑 정보가 필요할 때, 부모 클래스에 선언하고 속성만 상속 받아서 사용하고 싶을 때 @MappedSuperclass를 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n314&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n315&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB 테이블과는 상관없다. 아래에 보면 DB는 매핑 정보 다 따로 쓰고 있다. 객체의 입장이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n316&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/25_mapped_super_class.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/25_mapped_super_class.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n317&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드로 이해하기&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n318&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n319&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n320&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생성자, 생성시간, 수정자, 수정시간을 모든 엔티티에 공통으로 가져가야 하는 상황에서&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n321&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n322&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래와 같이 BaseEntity를 정의해서 활용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n323&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n324&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BaseEntity.java&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n325&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n326&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n327&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;매핑정보만 상속받는 Superclass라는 의미의 @MappedSuperclass 어노테이션 선언&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n328&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Getter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Setter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@MappedSuperclass&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;BaseEntity&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createdBy&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;LocalDateTime&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createdDate&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lastModifiedBy&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;LocalDateTime&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lastModifiedDate&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n329&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n330&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member.java, Team.java&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n331&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n332&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n333&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BaseEntity 상속&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n334&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BaseEntity&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n335&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BaseEntity&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n336&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n337&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행된 DDL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n338&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n339&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n340&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BaseEntity에 선언된 컬럼들이 생성 된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n341&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;generated&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;identity&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createdBy&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createdDate&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;timestamp&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;timestamp&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;integer&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;description&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clob&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;roleType&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;locker_id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team_id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;key&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;generated&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;by&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;identity&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createdBy&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createdDate&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;timestamp&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lastModifiedBy&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lastModifiedDate&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;timestamp&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;key&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n342&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n343&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상속광계 매핑이 아니다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n346&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n347&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@MappedSuperclass가 선언되어 있는 클래스는 엔티티가 아니다. 당연히 테이블과 매핑도 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n348&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n349&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단순히 부모 클래스를 상속 받는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;자식 클래스에 매핑 정보만 제공&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n350&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n351&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회, 검색이 불가하다. 부모 타입으로 조회하는 것이 불가능하다는 이야기.(em.find(BaseEntity) 불가능)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n352&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n353&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;직접 생성해서 사용할 일이 없으므로 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;추상 클래스로 만드는 것을 권장&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블과 관계가 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n356&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n357&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n358&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n359&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;참고&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n360&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n361&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n362&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPA에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정한 클래스만 상속할 수 있다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n363&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n364&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n365&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n366&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>@MappedSuperclass</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/129</guid>
      <comments>https://ict-nroo.tistory.com/129#entry129comment</comments>
      <pubDate>Mon, 26 Aug 2019 19:45:18 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 상속관계 매핑 전략(@Inheritance, @DiscriminatorColumn)</title>
      <link>https://ict-nroo.tistory.com/128</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9953424A5D63B61602&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9953424A5D63B61602&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h2 cid=&quot;n11&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;상속관계 매핑&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n12&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n13&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n14&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체는 상속관계가 존재하지만, 관계형 데이터베이스는 상속 관계가 없다.(대부분)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n15&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n16&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그나마 슈퍼타입 서브타입 관계라는 모델링 기법이 객체 상속과 유사하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n17&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n18&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상속관계 매핑이라는 것은 객체의 상속 구조와 DB의 슈퍼타입 서브타입 관계를 매핑하는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n19&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/01_extends.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/01_extends.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n20&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;슈퍼타입 서브타입 논리 모델 -&amp;gt; 물리모델 구현 방법&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n21&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n22&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n23&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체는 상속을 지원하므로 모델링과 구현이 똑같지만, DB는 상속을 지원하지 않으므로 논리 모델을 물리 모델로 구현할 방법이 필요하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB의 슈퍼타입 서브타입 논리 모델을 실제 물리 모델로 구현하는 방법은 세가지 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;중요한건, DB입장에서 세가지로 구현하지만 JPA에서는 어떤 방식을 선택하던 매핑이 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 이 세가지 방식과 매핑하려면&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n30&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n31&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n32&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@Inheritance(strategy=InheritanceType.XXX)&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의 stategy를 설정해주면 된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n33&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;default 전략은 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;SINGLE_TABLE&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(단일 테이블 전략)이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;InheritanceType 종류&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n38&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JOINED&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n41&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n42&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SINGLE_TABLE&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TABLE_PER_CLASS&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n45&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n46&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@DiscriminatorColumn(name=&quot;DTYPE&quot;)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n47&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;부모 클래스에 선언한다. 하위 클래스를 구분하는 용도의 컬럼이다. 관례는 default = DTYPE&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n50&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n51&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@DiscriminatorValue(&quot;XXX&quot;)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n52&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하위 클래스에 선언한다. 엔티티를 저장할 때 슈퍼타입의 구분 컬럼에 저장할 값을 지정한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어노테이션을 선언하지 않을 경우 기본값으로 클래스 이름이 들어간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 상속관계 구현&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n59&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Item&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n62&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Inheritance&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InheritanceType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;XXX&lt;/span&gt;) &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 상속 구현 전략 선택&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Album&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n65&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Album&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;artist&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Movie&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n68&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Movie&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;director&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actor&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n69&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n70&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Book&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n71&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Book&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;author&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isbn&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 cid=&quot;n72&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.4; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1 - 각각의 테이블로 변환하는 조인 전략(JOINED)&lt;/span&gt;&lt;/h4&gt;&lt;p cid=&quot;n73&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/22_super_sub.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/22_super_sub.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n74&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 정규화 된 방법으로 구현하는 방식이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NAME, PRICE가 ITEM 테이블에만 저장되고, ALBUM, MOVIE, BOOK이 각자의 데이터만 저장한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Item 엔티티 - @Inheritance(strategy = InheritanceType.JOINED) 전략&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n81&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의 조인 전략에서는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@DiscriminatorColumn을 선언하지 않으면 DTYPE 컬럼이 생성되지 않는다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어차피 조인하면 앨범인지 무비인지 알 수 있다. 그래도, DTYPE을 넣어주는 것이 명확하다. 넣어주자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n86&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Inheritance&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InheritanceType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JOINED&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@DiscriminatorColumn&lt;/span&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 하위 테이블의 구분 컬럼 생성(default = DTYPE)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 실행된 DDL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n89&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블 4개 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하위 테이블에 외래키 제약조건 생성. 하위 테이블 입장에서는 ITEM_ID가 PK이면서 FK로 잡아야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n94&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인 전략에 맞는 테이블들이 생섬됨.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n96&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Album (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; artist &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  primary key (id)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Book (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; author &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  isbn &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  primary key (id)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Item (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; DTYPE &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;31&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; generated &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;by&lt;/span&gt; default &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; identity,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  name &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  price &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;integer&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  primary key (id)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Movie (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; actor &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  director &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  primary key (id)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Album &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; add constraint FKcve1ph6vw9ihye8rbk26h5jm9 &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreign key (id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; references Item&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Book &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; add constraint FKbwwc3a7ch631uyv1b5o9tvysi &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreign key (id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; references Item&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Movie &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; add constraint FK5sq6d5agrc34ithpdfs0umo9g &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreign key (id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; references Item&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Movie 객체를 저장하면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n99&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Insert 쿼리가 두개 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Item 테이블, Movie 테이블 저장.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DTYPE에 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;클래스 이름&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 디폴트로 저장됨.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n106&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setDirector&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;감독A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setActor&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;배우B&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;분노의질주&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setPrice&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;35000&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n107&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert advancedmapping.Movie&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Item&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, name, price, DTYPE) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?, ?, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Movie'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert advancedmapping.Movie&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Movie&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (actor, director, id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (?, ?, ?)&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Movie 객체를 조회하면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n110&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;flush(), clear() 해주면, DB에 insert쿼리 날리고, 1차 캐시 지우므로 find에서 SELECT 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n113&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n114&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Item과 inner join을 통해서 결과를 조회한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n115&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setDirector&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;감독A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setActor&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;배우B&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;분노의질주&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setPrice&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;35000&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;(); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//DB에 insert쿼리 날리고, 1차 캐시 지우므로 find에서 SELECT 쿼리가 나간다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;&quot; cid=&quot;n116&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  select&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_.id as id2_2_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_1_.name as name3_2_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_1_.price as price4_2_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_.actor as actor1_3_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_.director as director2_3_0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  from&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Movie movie0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  inner join&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Item movie0_1_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  on movie0_.id=movie0_1_.id &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  where&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_.id=?&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 cid=&quot;n117&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.4; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2 - 통합 테이블로 변환하는 단일 테이블 전략(SINGLE_TABLE)&lt;/span&gt;&lt;/h4&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/23_super_sub.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/23_super_sub.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n119&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n120&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n121&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서비스 규모가 크지 않고, 굳이 조인 전략을 선택해서 복잡하게 갈 필요가 없다고 판단 될 때에는&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n122&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n123&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한 테이블에 다 저장하고, DTYPE으로 구분하는 단일 테이블 전략을 선택할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n124&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n125&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;INSERT 쿼리도 한 번, SELECT 쿼리도 한 번이다. 조인할 필요가 없고, 성능이 좋다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단일 테이블 적용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n128&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;strategy를 SINGLE_TABLE로 변경하면 끝난다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n131&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n132&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA의 장점이다. 테이블 구조의 변동이 일어났는데, 코드를 거의 손대지 않고 어노테이션만 수정했다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n134&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n135&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;만약 JPA를 쓰지 않았더라면, 테이블 구조의 변경이 일어나면 거의 모든 코드를 손대야 할 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n136&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n137&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단일 테이블 전략에서는 @DiscriminatorColumn을 선언해 주지 않아도, 기본으로 DTYPE 컬럼이 생성된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n139&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한 테이블에 모든 컬럼을 저장하기 때문에, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;DTYPE 없이는 테이블을 판단할 수 없다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n140&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@DiscriminatorColumn&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Inheritance&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InheritanceType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SINGLE_TABLE&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행된 DDL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n143&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;통합 테이블이 하나 생성된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n146&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Item (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; DTYPE &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;31&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; generated &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;by&lt;/span&gt; default &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; identity,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  name &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  price &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;integer&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  artist &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  author &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  isbn &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  actor &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  director &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  primary key (id)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n147&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n148&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인 전략에서 실습했던 Movie 저장, 조회 예제를 그대로 돌려보면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n149&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n150&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n151&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Item 테이블을 그냥 조회한다. 조인하지 않고, DTYPE을 검색 조건으로 추가해서 Movie를 조회&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n152&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id2_0_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name3_0_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.price&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; price4_0_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.actor&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; actor8_0_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.director&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; director9_0_0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Item movie0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;? &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;and&lt;/span&gt; movie0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.DTYPE&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Movie'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h4 cid=&quot;n153&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.4; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;3 - 서브타입 테이블로 변환하는 구현 클래스마다 테이블을 생성하는 전략(TABLE_PER_CLASS)&lt;/span&gt;&lt;/h4&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/24_super_sub.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 785px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/24_super_sub.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n155&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인 전략과 유사하지만, 슈퍼 타입의 컬럼들을 서브 타입으로 내린다. NAME, PRICE 컬럼들이 중복되도록 허용하는 전략이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n158&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n159&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;구현 클래스마다 테이블 생성 전략 적용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n160&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n161&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Id 생성 전략 GenerationType.&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AUTO&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 사용하는 경우 strategy를 TABLE_PER_CLASS로 변경하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n163&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n164&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이때, ITEM 엔티티는 실제 생성되는 테이블이 아니므로 abstract 클래스여야 하고, @DiscriminatorColumn도 필요가 없어진다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n165&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, @Id 생성 전략 GenerationType.IDENTITY를 사용하는 경우 문제가 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Inheritance의 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;TABLE_PER_CLASS&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;와 @Id의 GenerationType을 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;IDETITY&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 같이 사용할 경우 에러 발생&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n170&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n171&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n172&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;Cannot use identity column key generation with &amp;lt;union-subclass&amp;gt; mapping for&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n173&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n174&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Id의 GenerationType을 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;TABLE 타입&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;으로 변경 적용해서 해결. 그러나, 시퀀스 테이블이 생성되므로 이것에 대한 매핑까지 추가해줘야 완벽히 해결이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n175&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n176&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/916169/cannot-use-identity-column-key-generation-with-union-subclass-table-per-clas&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://stackoverflow.com/questions/916169/cannot-use-identity-column-key-generation-with-union-subclass-table-per-clas&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Item 엔티티 설정&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n179&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Inheritance&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InheritanceType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;TABLE_PER_CLASS&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Item&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AUTO&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생성된 DDL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n182&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n183&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n184&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하위 테이블 3개만 생성된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n185&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;:&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Album&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;integer&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;artist&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;key&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Book&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;integer&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;author&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isbn&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;key&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;table&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Movie&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;integer&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actor&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;director&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;varchar&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;255&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;primary&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;key&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n186&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n187&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인 전략에서의 Movie 저장, 조회를 그대로 실행한 결과는?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n188&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n189&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n190&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Movie 테이블에 insert&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n191&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n192&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Movie 테이블에서 select&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n193&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert advancedmapping.Movie&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actor&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;director&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;?&lt;/span&gt;, &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;?&lt;/span&gt;, &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;?&lt;/span&gt;, &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;?&lt;/span&gt;, &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;?&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Hibernate&lt;/span&gt;: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id1_2_0_&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name2_2_0_&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price3_2_0_&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actor&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actor1_3_0_&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;director&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;director2_3_0_&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie0_&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n194&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n195&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문제점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n196&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n197&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n198&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체지향 프로그래밍에서는 MOVIE, ALBUM, BOOK 객체를 ITEM 타입으로도 조회할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n199&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Movie&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setDirector&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;감독A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setActor&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;배우B&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;분노의질주&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setPrice&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;35000&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;movie&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n200&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n201&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행된 SQL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n202&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n203&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n204&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;union all로 전체 하위 테이블을 다 찾는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n205&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n206&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;INSERT 까진 심플했으나, 조회가 시작되면 굉장히 비효율적으로 동작한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n207&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id1_2_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; name2_2_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.price&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; price3_2_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.artist&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; artist1_0_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.author&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; author1_1_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.isbn&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; isbn2_1_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.actor&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; actor1_3_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.director&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; director2_3_0_,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.clazz_&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; clazz_0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  ( &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  name,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  price,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  artist,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; author,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; isbn,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; actor,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; director,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; clazz_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Album &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;union&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  all &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  name,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  price,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; artist,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  author,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  isbn,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; actor,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; director,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; clazz_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Book &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;union&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  all &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  name,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  price,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; artist,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; author,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; isbn,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  actor,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  director,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; clazz_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Movie &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ) item0_ &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  item0_&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt;=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n208&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상속관계 매핑 정리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n209&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n210&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n211&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인 전략&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n666&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/22_super_sub.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 755px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/22_super_sub.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n212&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n215&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n216&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n217&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블이 정규화가 되어있고, &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n218&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n219&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외래 키 참조 무결성 제약조건 활용 가능&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n220&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n221&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n222&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ITEM의 PK가 ALBUM, MOVIE, BOOK의 PK이자 FK이다. 그래서 다른 테이블에서 아이템 테이블만 바라보도록 설계하는 것이 가능 하다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n223&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n224&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저장공간 효율화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n225&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n226&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n227&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블 정규화로 저장공간이 딱 필요한 만큼 소비된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n228&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n229&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n230&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n231&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n232&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회시 조인을 많이 사용한다. 단일 테이블 전략에 비하면 성능이 안나온다. 조인하니까.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n233&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n234&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그래서 조회 쿼리가 복잡하다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n235&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n236&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 저장시에 INSERT 쿼리가 상위, 하위 테이블 두번 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n237&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n238&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n239&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n240&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n241&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;성능 저하라고 되어있지만, 실제로는 영향이 크지 않다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n242&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n243&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;오히려 저장공간이 효율화 되기 때문에 장점이 크다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n244&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n245&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;기본적으로는 조인 정략이 정석&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이라고 보면 된다. 객체랑도 잘 맞고, 정규화도 되고, 그래서 설계가 깔끔하게 나온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n246&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n247&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단일 테이블 전략&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n672&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/23_super_sub.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 755px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/23_super_sub.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n248&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n249&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n250&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n251&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n252&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n253&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인이 필요 없으므로 일반적인 조회 성능이 빠르다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n254&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n255&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회 쿼리가 단순핟.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n256&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n257&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n258&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n259&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n260&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자식 엔티티가 매핑한 컬럼은 모두 NULL을 허용해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n261&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n262&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단일 테이블에 모든 것을 저장하므로 테이블이 커질 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n263&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n264&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상황에 따라서 조인 전략보다 성능이 오히려 느려질 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n265&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n266&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n267&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;보통 이 상황에 해당하는 임계점을 넘을 일은 많지 않다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n268&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n269&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;구현 클래스마다 테이블 전략&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n675&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/24_super_sub.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 755px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/24_super_sub.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n270&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n271&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n272&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론은&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n273&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n274&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n275&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 전략은 쓰지말자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n276&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n277&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORM을 하다보면 데이터 쪽과 객체 쪽에서 trade off를 할 때가 있는데, 이 전략은 둘 다 추천하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n278&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n279&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n280&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n281&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서브 타입을 명확하게 구분해서 처리할 때 효과적이다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n283&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n284&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NOT NULL 제약조건을 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n285&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n286&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n287&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n288&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n289&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 자식 테이블을 함께 조회할 때 성능이 느리다(UNION SQL)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n290&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n291&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자식 테이블을 통합해서 쿼리하기 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n292&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n293&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경이라는 관점으로 접근할 때 굉장히 좋지 않다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n294&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n295&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n296&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들어, ITEM들을 모두 정산하는 코드가 있다고 가정할 때, ITEM 하위 클래스가 추가되면 정산 코드가 변경된다. 추가된 하위 클래스의 정산 결과를 추가하거나 해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n297&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n298&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상속관계 매핑 정리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n299&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n300&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n301&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로는 조인 전략을 가져가자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n302&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n303&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 조인 전략과 단일 테이블 전략의 trade off를 생각해서 전략을 선택하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n304&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n305&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;굉장히 심플하고 확장의 가능성도 적으면 단일 테이블 전략을 가져가자. 그러나 비즈니스 적으로 중요하고, 복잡하고, 확장될 확률이 높으면 조인 전략을 가져가자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n363&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n364&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n365&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n366&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>@DiscriminatorColumn</category>
      <category>@DiscriminatorValue</category>
      <category>@Inheritance</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/128</guid>
      <comments>https://ict-nroo.tistory.com/128#entry128comment</comments>
      <pubDate>Mon, 26 Aug 2019 19:42:13 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] @ManyToMany, 다대다[N:M] 관계</title>
      <link>https://ict-nroo.tistory.com/127</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/992433435D5FB80706&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F992433435D5FB80706&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h2 cid=&quot;n325&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대다[N:M]&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n326&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n327&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n328&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에선 사용하지 않는 것을 추천한다. 사용하면 안되는 이유를 학습하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n329&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n330&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;관계형 데이터베이스는 정규화된 테이블 2개로 다대다 관계를 표현할 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n331&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n332&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연결 테이블(조인 테이블)을 추가해서 일대다, 다대일 관계로 풀어내야한다. &lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n333&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/15_many_to_many.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 770px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/15_many_to_many.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n334&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n335&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체는 컬렉션을 사용해서 객체 2개로 다대다 관계가 가능하다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n336&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n337&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n338&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORM 입장에서는 테이블은 안되고, 객체는 안되는 것을 지원해줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n339&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n340&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, 아래의 그림에서와 같이 객체의 다대다 관계(멤버와 프로덕트가 서로 리스트를 가짐)와&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n341&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n342&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블에서 다대다 관계를 일대다 다대일 관계로 풀어낸 것 두개의 차이를 연결해준다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n343&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/16_many_to_many.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 770px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/16_many_to_many.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA @ManyToMany 어노테이션을 사용하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n346&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n347&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@JoinTable로 연결 테이블을 지정해줄 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n348&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대다 단방향&lt;/span&gt;&lt;/h3&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n349&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToMany&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinTable&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member_product&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Product&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;products&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n350&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n351&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n352&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행된 SQL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n353&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인 테이블이 하나 생성되고, 외래 키 제약조건도 두가지가 설정 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n356&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; member_product (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Member_id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  products_id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; member_product &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; add constraint FK17rh8i9jrsy7yqy2j6e9yijuw &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreign key (products_id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; references Product&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; member_product &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; add constraint FK3cjijenmv5sgu1w04p4ofy6ik &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; foreign key (Member_id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; references Member&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n357&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대다 양방향&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n358&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n359&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n360&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;똑같이 @ManyToMany 설정을 해주고, mappedBy 설정을 해줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n361&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Product&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;products&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n362&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대다 매핑의 한계&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n363&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/17_many_to_many.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/17_many_to_many.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n364&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n365&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n366&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;편리해 보이지만 실무에서 사용하면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n367&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n368&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발하다 보면, 연결 테이블이 단순히 연결만 하고 끝나지 않는다. 조인 테이블 자체에 주문시간, 수량 같은 추가 데이터가 많이 들어갈 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n369&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n370&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, 매핑 정보만 넣는 것이 가능하고, 추가 정보를 넣는 것 자체가 불가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n371&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n372&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 중간 테이블이 숨겨져 있기 때문에 예상하지 못하는 쿼리들이 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n373&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n374&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이런 문제점들 때문에 실무에서는 안쓰는게 맞다고 본다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n375&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대다 한계 극복&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n376&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n377&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n378&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어떻게 한계를 극복할까.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n379&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n380&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연결 테이블용 엔티티를 추가한다. &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;사실상 연결 테이블을 엔티티로 승격&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시킨다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n381&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n382&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 @ManyToMany를 각각 일대다, 다대일로 관계를 맺어준다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1057&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n384&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n385&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실 개인적으로 이부분에 대해서는 @ManyToOne, 다대일 관계 두개로 풀어낸다는 표현이 맞는 것 같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n386&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n387&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;앞서 일대다 관계를 학습할 때, 결론적으로 다대일 양방향 매핑을 사용하자는 결론을 내기도 했고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n388&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n389&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로 아래의 코드상으로 봐도 FK 2개를 중간테이블에서 관리하고, @ManyToOne 양방향 매핑 2개로 이어져있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n390&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n391&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블의 배치 순서상(Member -&amp;gt; MemberProduct(Order) -&amp;gt; Product) 표현을 @OneToMany, @ManyToOne으로 표현했던 것이라면 이해가 간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n392&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n393&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 만들어주는 숨겨진 매핑테이블의 존재를 바깥으로 꺼내는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n394&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n395&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위에 다대다 매핑의 한계 첨부 그림에서는 MemberProduct의 MEMBER_ID, PRODUCT_ID를 묶어서 PK로 썻지만, 실제로는 아래 처럼 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;독립적으로 generated되는 id를 사용하는 것을 권장&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다. ID가 두개의 테이블에 종속되지 않고 더 유연하게 개발 할 수 있다. 시스템을 운영하면서 점점 커지는데 만약 비즈니스적인 제약 조건이 커지면 PK를 운영중에 업데이트 하는 상황이 발생할 수도 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n396&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/18_many_to_many.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/18_many_to_many.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n397&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n398&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n399&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드로 이해하기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n400&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n401&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n402&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n403&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n404&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n405&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버 엔티티에서 @OneToMany 관계로 변경한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n406&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;MemberProduct&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberProducts&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n407&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n408&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Product&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n409&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n410&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n411&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마찬가지로 @OneToMany 관계로 변경한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n412&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Product&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;product&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;MemberProduct&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n413&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n414&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MemberProduct&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n415&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n416&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n417&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연결 테이블을 엔티티로 승격시킨다. 그리고 @ManyToOne 매핑을 두개 한다.(연관관계의 주인)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n418&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n419&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여기서 추가 데이터가 들어간다면 아예 의미있는 엔티티 이름(Order)으로 변경 될 것이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n420&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Getter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Setter&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberProduct&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;strategy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GenerationType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;IDENTITY&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member_id&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;product_id&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Product&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;product&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;&lt;h3 cid=&quot;n1053&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n422&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n424&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&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;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>ICT Eng/JPA</category>
      <category>@ManyToMany</category>
      <category>JPA</category>
      <category>다대다</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/127</guid>
      <comments>https://ict-nroo.tistory.com/127#entry127comment</comments>
      <pubDate>Fri, 23 Aug 2019 19:08:40 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] @OneToOne, 일대일[1:1] 관계</title>
      <link>https://ict-nroo.tistory.com/126</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99AC7B435D5FB6CF13&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99AC7B435D5FB6CF13&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h2 cid=&quot;n678&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 [1:1]&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n223&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n224&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n225&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 관계는 그 반대도 일대일이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n226&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n227&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 관계는 특이하게 주 테이블이나 대상 테이블 중에 외래 키를 넣을 테이블을 선택 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n228&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n229&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 테이블에 외래 키 저장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n231&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n232&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대상 테이블에 외래 키 저장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n233&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n234&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외래 키에 데이터베이스 유니크 제약조건 추가되어야 일대일 관계가 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n235&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 - 주 테이블에 외래 키 단방향&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n236&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/13_one_to_one.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/13_one_to_one.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n237&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n238&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n239&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;회원이 딱 하나의 락커를 가지고 있는 상황이다. 반대로 락커도 회원 한명만 할당 받을 수 있는 비즈니스 적인 룰이 있고, 이때, 둘의 관계는 일대일 관계이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n240&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n241&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 경우 멤버를 주 테이블로 보고 주 테이블 또는 대상 테이블에 외래 키를 저장할 수 있다. 단, 유니크 제약조건을 추가한 상태에서만.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n242&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n243&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;다대일[N:1] 단방향 관계 매핑과 JPA 어노테이션만 달라지고, 거의 유사하다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n244&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 - 주 테이블에 외래 키 양방향&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n245&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n246&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n247&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일[N:1] 양방향 매핑 처럼 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;외래키가 있는 곳이 연관관계의 주인&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n248&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n249&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA @OneToOne 어노테이션으로 일대일 단방향 관계를 매핑하고, @JoinColumn을 넣어준다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n250&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n251&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n252&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@JoinColumn은 Default 값이 있긴 하지만 지저분하게 들어간다. name을 정해주자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n253&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n254&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여기까지만 매핑하면 단방향 관계이고&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n255&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;locker_id&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Locker&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;locker&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n256&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n257&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;반대편에 mappedBy를 적용시켜주면 일대일 양방향 관계 매핑이 된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n258&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n259&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n260&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mappedBy = &quot;locker&quot; 는 Member엔티티에 있는 Locker 필드와 매핑 되었다는 것을 의미.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n261&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n262&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 member 필드는 읽기 전용 필드이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n263&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Locker&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToOne&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;locker&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n264&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 - 대상 테이블에 외래 키 단방향&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n265&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n266&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n267&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일관계에서 대상 테이블에 외래 키를 저장하는 단방향 관계는 JPA에서 지원하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n268&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 - 대상 테이블에 외래 키 양방향&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n269&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n270&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n271&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 주 테이블에 외래 키 양방향 매핑을 반대로 뒤집었다고 생각하면 된다. 매핑 방법은 같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n272&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n273&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 테이블은 멤버 테이블이지만, 외래 키를 대상 테이블에서 관리하고 주 테이블의 락커 필드는 읽기 전용이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n274&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/14_one_to_one.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/14_one_to_one.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n275&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n276&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n277&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n278&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 테이블에 외래 키&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n279&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n280&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(주 테이블 : 많이 접근하는 테이블)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n282&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n283&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 객체(많이 사용하는 객체)가 대상 객체의 참조를 가지는 것 처럼&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n284&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n285&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 테이블에 외래 키를 두고 대상 테이블을 찾는 방식.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n286&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n287&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체지향 개발자들이 선호하고, JPA 매핑이 편리하다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n288&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n289&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n290&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n291&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n292&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 테이블만 조회해도 대상 테이블에 데이터가 있는지 확인이 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n293&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n294&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n295&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n296&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n297&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;값이 없으면 외래 키에 NULL을 허용해야 한다. DB입장에서는 치명적일 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n298&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n299&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대상 테이블에 외래키&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n300&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n301&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n302&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대상 테이블에 외래 키가 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n303&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n304&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전통적인 데이터베이스 개발자들이 선호하는 방식이다. NULL을 허용해야 하는 문제도 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n305&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n306&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n307&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n308&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n309&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주 테이블과 대상 테이블을 일대일에서 일대다 관계로 변경할 때 테이블 구조를 유지할 수 있다.(멤버가 락커를 여러개 가지도록 비즈니스 룰이 변경될 경우 테이블 구조 유지하면서 유지보수 가능)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단점&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n312&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n313&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n314&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드상에서는 주로 멤버 엔티티에서 락커를 많이 엑세스 하는데, 어쩔 수 없이 양방향 매핑을 해야한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n315&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n316&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n317&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 - 대상 테이블에 외래 키 단방향 매핑을 JPA에서 지원하지 않으므로, 단방향 매핑만 해서는 멤버 객체를 업데이트 했을 때 락커 테이블에 FK를 업데이트 할 방법이 없다. 따라서 양방향 매핑을 해야 한다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n318&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n319&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 제공하는 기본 프록시 기능의 한계로 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;지연 로딩으로 설정해도 항상 즉시 로딩&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 된다.(프록시는 뒤에서 학습)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n320&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n321&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n322&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 입장에서 일대일 관계의 주 테이블에 외래 키를 저장하는 상황에서는, 멤버 객체를 로딩할 때, 멤버 테이블의 FK에 락커 ID가 있는지 없는지만 판단하면 된다. 있으면 프록시 객체를 넣어주고, 없으면 null을 넣으면 된다. 나중에 진짜 락커 필드에 엑세스 할 때, 그때 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n323&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n324&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;그런데, 대상 테이블에 외래 키를 저장한다면, JPA가 멤버의 락커를 조회하는 상황에서 DB의 멤버 테이블만 조회해서는 모른다. 어차피 락커 테이블을 찾아서 멤버가 있는지 확인 해야(쿼리를 날려 봐야) 알 수 있다. 어차피 쿼리가 나간단 이야기는 프록시를 만들 필요가 없다는 이야기이다. 그래서 하이버네이트 구현체 같은 경우는 지연 로딩으로 설정해도 항상 즉시 로딩 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;h3 cid=&quot;n421&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; orphans: 2; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n422&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; orphans: 2;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n424&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 2;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 2;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 2;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 2;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>@OneToOne</category>
      <category>JPA</category>
      <category>일대일</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/126</guid>
      <comments>https://ict-nroo.tistory.com/126#entry126comment</comments>
      <pubDate>Fri, 23 Aug 2019 18:54:11 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] @OneToMany, 일대다[1:N] 관계</title>
      <link>https://ict-nroo.tistory.com/125</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ADF53D5D5FB50F04&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ADF53D5D5FB50F04&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n139&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 [1:N]&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n140&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 관계에서는 일이 연관관계의 주인이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n143&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n144&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일 쪽에서 외래키를 관리하겠다는 의미가 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n146&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론을 먼저 말하자면, 표준스펙에서 지원은 하지만 실무에서 이 모델은 권장하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n147&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n148&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;일대다 단방향&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 매핑&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n149&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/12_one_to_many.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 770px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/12_one_to_many.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n150&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀과 멤버가 일대다 관계이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team이 Members를 가지는데, Member 입장에서는 Team을 참조하지 않아도 된다라는 설계가 나올 수 있다. 객체 입장에서 생각하면 충분히 나올 수 있는 설계이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n155&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n156&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나 DB 테이블 입장에서 보면, 무조건 일대다의 다쪽에 외래키가 들어간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team에서 members가 바뀌면, DB의 Member 테이블에 업데이트 쿼리가 나가는 상황이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n764&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 단방향 매핑&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n766&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@OneToMany와 @JoinColumn()을 이용해서 일대다 단방향 매핑&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 코드로 이해하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n161&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n162&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n163&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member는 코드상 연관관계 매핑 없고, 팀에서만 일대다 단방향 매핑 설정.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n164&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TEAM_ID&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n165&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n166&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Main.java&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n167&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;NJ&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;-----멤버 저장&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getMembers&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;add&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;-----팀 저장&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 발생한 쿼리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n170&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n171&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n172&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;log에서 확인해보면 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션 커밋 시점&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에 create one-to-many row로 시작되는 주석과 함께 Member 테이블을 업데이트 하는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;쿼리가 나간다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n173&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert hello.jpa.Member&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, age, createdDate, description, lastModifiedDate, roleType, name) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?, ?, ?, ?, ?, ?)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;-----멤버 저장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert hello.jpa.Team&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, name) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;-----팀 저장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* create one-to-many row hello.jpa.Team.members */&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;update&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;set&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  TEAM_ID=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;? &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  id=&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n174&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 단방향 정리 - 문제점과 실무적인 해결 방안&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n175&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 단방향은 일대다(1:N)의 일(1)이 연관관계의 주인이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블 일대다 관계는 항상 다(N) 쪽에 외래키가 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체와 테이블의 패러다임 차이 때문에 객체의 반대편 테이블의 외래키를 관리하는 특이한 구조이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n182&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n183&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@JoinColumn을 꼭 사용해야 한다. 그렇지 않으면 조인 테이블 방식을 사용한다.(중간에 테이블을 하나 추가한다.)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n184&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n185&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n186&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로 TEAM_MEMBER라는 테이블이 하나 생성되고, INSERT 쿼리가 나간다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n187&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;create&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;table&lt;/span&gt; Team_Member (&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; Team_id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  members_id &lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;bigint&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...(생략)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;-----팀 저장 이후에&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert collection&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;row hello.jpa.Team.members */&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team_Member&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (Team_id, members_id) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (?, ?)&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n188&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n189&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;문제점&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n190&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n191&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n192&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일단 업데이트 쿼리가 나간다. 성능상 좋지않다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n193&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n194&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Main.java 파일을 보자. 코드를 보면서 쿼리를 추적할 때,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n195&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n196&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀 엔티티를 수정했는데 멤버 테이블에 업데이트 쿼리가 나가는 상황이 나오게되고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n197&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n198&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서는 테이블이 수십개가 엮여서 돌아가는 상황에서 위와 같은 상황은 운영을 힘들게 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n199&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n200&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;답은 위에서 먼저 학습한 다대일 단방향 관계로 매핑하고, 필요할 경우 양방향 매핑을 통해서 해결한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n201&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n202&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 입장에서보면, 반대방향으로 참조할 필요가 없는데 관계를 하나 만드는 것이지만, DB의 입장으로 설계의 방향을 조금 더 맞춰서 운영상 유지보수하기 쉬운 쪽으로 선택할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n203&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 양방향 매핑&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n204&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n205&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n206&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이런 매핑은 공식적으로는 존재하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n207&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n208&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@JoinColumn(name = &quot;team_id&quot;, insertable = false, updatable = false) 사용.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n209&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@ManyToOne과 @JoinColumn을 사용해서 연관관계를 매핑하면, 다대일 단방향 매핑이 되어버린다. 근데 반대쪽 Team에서 이미 일대다 단방향 매핑이 설정되어있다. 이런 상황에서는 두 엔티티에서 모두 테이블의 FK 키를 관리 하게 되는 상황이 벌어진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n211&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n212&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그걸 막기 위해서 insertable, updatable 설정을 FALSE로 설정하고 읽기 전용 필드로 사용해서 양방향 매핑처럼 사용하는 방법이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;읽기 전용으로 사용할 경우도 있을 수 있으니, 알아두자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;그러나, 결론은 다대일 양방향을 사용하자.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n217&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n218&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n219&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블이 수십개 있는데, 매핑이나 설계는 단순해야 팀원 누구나 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n220&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;team_id&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;insertable&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;updatable&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;md-end-block md-p md-focus&quot; mdtype=&quot;paragraph&quot; cid=&quot;n222&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n421&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n422&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n424&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>@OneToMany</category>
      <category>JPA</category>
      <category>일대다</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/125</guid>
      <comments>https://ict-nroo.tistory.com/125#entry125comment</comments>
      <pubDate>Fri, 23 Aug 2019 18:48:22 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] @ManyToOne, 다대일[N:1] 관계</title>
      <link>https://ict-nroo.tistory.com/124</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99D3933F5D5FB3A813&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99D3933F5D5FB3A813&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 cid=&quot;n83&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일 [N:1]&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n84&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA에서 가장 많이 사용하고, 꼭 알야야 되는 다중성이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래 테이블에서 보면, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB 설계상 일대다에서 다 쪽에 외래키가 있어야 한다&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;. 그렇지 않으면 잘못된 설계다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n89&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n90&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체로 와서, 다대일 관계에서 다인 멤버에서 단순하게 팀으로 단방향 참조를 하고 싶다고 할 때, 테이블에 외래키 있는 쪽인 멤버 객체에서 팀객체로 연관관계 매핑 하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블에서 FK가 팀을 찾기 위해 존재하고, 객체에서 Team 필드도 Team을 참조하기 위해 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n93&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n94&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일의 반대는 일대다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/09_modeling.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/09_modeling.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 class=&quot;md-end-block md-heading&quot; mdtype=&quot;heading&quot; cid=&quot;n98&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span class=&quot;md-plain&quot; md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일 단방향 매핑&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n561&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n563&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n564&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA @ManyToOne 어노테이션을 사용해서 다대일 관계를 매핑한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n99&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@JoinColumn은 외래 키를 매핑할 때 사용한다. name은 매핑할 외래 키 이름이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n102&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TEAM_ID&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n103&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일 양방향 매핑&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n104&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일 관계에서 단방향 매핑을 진행하고, 양방향 매핑을 진행할 때&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;반대쪽에서 일대다 단방향 매핑을 해주면 된다.(객체에서 컬렉션 추가해주면 된다.)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n109&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n110&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여기서 중요한건, 반대에서 단방향 매핑을 한다고 해서 DB 테이블에 영향을 전혀 주지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일관계의 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다 쪽에서 이미 연관관계의 주인이 되어서 외래키를 관리&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하고 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n113&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/11_many_to_one.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/11_many_to_one.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n114&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;반대쪽에서 일대다 단방향 매핑. JPA의 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@OneToMany&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 어노테이션을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n117&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n118&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n119&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인이 아니고, 어디에 매핑 됐는지에 관한 정보 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(mappedBy = &quot;team&quot;)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;을 꼭 넣어줘야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n120&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n121&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;b&gt;(mappedBy=&quot;team&quot;)&lt;/b&gt;이 의미하는 바는 Team의 members 필드가 Member 엔티티의 team 필드에 의해 매핑 되어졌다는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n122&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;team&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 발생한 쿼리 확인.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n125&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Main.java&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n128&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;A&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;-----팀 저장&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;NJ&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;-----멤버 저장&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 발생한 쿼리&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n131&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert hello.jpa.Team&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Team&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, name) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;-----팀 저장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Hibernate: &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/* insert hello.jpa.Member&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;insert&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;into&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  Member&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (id, age, createdDate, description, lastModifiedDate, roleType, TEAM_ID, name) &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;values&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  (&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, ?, ?, ?, ?, ?, ?, ?)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;-----멤버 저장&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n132&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n134&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외래키가 있는 쪽이 연관관계의 주인이고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양쪽을 서로 참조하도록 개발하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;h3 cid=&quot;n421&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; orphans: 2; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n422&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; orphans: 2;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n424&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&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;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>ICT Eng/JPA</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/124</guid>
      <comments>https://ict-nroo.tistory.com/124#entry124comment</comments>
      <pubDate>Fri, 23 Aug 2019 18:41:49 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 연관관계 매핑시 고려사항</title>
      <link>https://ict-nroo.tistory.com/123</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99DC62365D5FB31012&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99DC62365D5FB31012&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h2 cid=&quot;n14&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 매핑시 고려사항 3가지&lt;/span&gt;&lt;/h2&gt;&lt;h3 cid=&quot;n25&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다중성&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n26&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n27&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n28&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 에서는 다중성을 위한 어노테이션을 제공한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n29&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n30&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 JPA 어노테이션들은 DB와 매핑하기 위해 존재 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n31&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n32&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그래서 데이터베이스 관점에서의 다중성을 기준으로 고민 하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n33&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대일 - @ManyToOne&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대다 - @OneToMany&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n37&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n38&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일대일 - @OneToOne&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다대다 - @ManyToMany&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다중성을 고민하다가 풀리지 않으면 대칭성을 고려하자. 다중성의 관계들은 대칭성을 다 가지고 있다. 예를 들면, 회원과 팀 - 팀과 회원 둘다를 고려하면 쉬워 진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n46&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단방향, 양방향&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n47&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이전 학습 내용 정리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n47&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin-top: 0.8em; margin-right: 0px; margin-bottom: 0.8em; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단방향 연관관계 - &lt;a href=&quot;https://ict-nroo.tistory.com/121&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://ict-nroo.tistory.com/121&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;양방향 연관관계 - &lt;a href=&quot;https://ict-nroo.tistory.com/122&quot; target=&quot;_blank&quot; class=&quot;tx-link&quot;&gt;https://ict-nroo.tistory.com/122&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n50&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n51&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블은&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n52&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외래 키 하나로 양쪽을 조인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실 방향이라는 개념이 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체는&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n59&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;참조용 필드가 있는 쪽으로만 참조할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n62&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n63&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한쪽만 참조하면 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;단방향&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n64&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n65&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양쪽이 서로 참조하면 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;양방향&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n66&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n67&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n68&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;앞서 말했듯이 사실은 단방향이 두개가 마주보고 있는 것이다 &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n69&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n70&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위의 단방향, 양방향의 개념을 알아야. 연관관계의 주인을 이해할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블은 외래 키 하나로 두 테이블이 연관관계를 맺는데,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 양방향 관계는 A-&amp;gt;B, B-&amp;gt;A 처럼 참조가 2군데에서 일어난다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그렇기 때문에 객체에서 둘중 테이블의 외래키를 관리할 곳을 정해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인은 외래 키를 관리하는 참조&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주인의 반대편에서는 외래키에 영향을 주지 않고, 단순 읽기만 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n421&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n422&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n424&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;color: rgb(65, 131, 196); box-sizing: border-box; cursor: pointer; -webkit-user-drag: none;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>연관관계</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/123</guid>
      <comments>https://ict-nroo.tistory.com/123#entry123comment</comments>
      <pubDate>Fri, 23 Aug 2019 18:34:23 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 양방향 연관관계</title>
      <link>https://ict-nroo.tistory.com/122</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9996704F5D5672700F&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9996704F5D5672700F&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;991768355CC2E0F534.jpg&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;h2 cid=&quot;n150&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 연관관계와 연관관계의 주인&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n151&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/07_jpa_relational2.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/07_jpa_relational2.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n152&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team을 통해서도 getMemberList()로 특정 팀에 속한 멤버 리스트를 가져오고 싶다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n155&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n156&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 설계는 위와 같이 Member에서는 Team을 가지고 있고, Team에서는 Members를 가지고 있도록 설계하면 된다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB를 보자. DB는 단방향 매핑때와 바뀌는게 없다. 왜냐. 둘을 join 하면 된다. DB는 방향이 없다!&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 두가지가 큰 차이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;h3 cid=&quot;n161&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드로 이해&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n162&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n163&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n164&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member 엔티티는 단방향과 동일하다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n165&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;USERNAME&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;age&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TEAM_ID&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Team 엔티티는 컬렉션을 추가해주면 된다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n168&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n169&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n170&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀의 입장에서 바라보는일대다, @OneToMany 어노테이션을 설정하고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n171&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n172&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mappedBy로 team과 연관이 있는 것을 알려준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n173&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n174&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컬렉션을 매핑한다. &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;관례로 ArrayList로 초기화 한다&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;. NPE 방지.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n175&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@OneToMany&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;mappedBy&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;team&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;ArrayList&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;반대 방향으로 객체 그래프 탐색할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n178&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//팀 조회&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findTeam&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 역방향으로 멤버들 조회&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;memberSize&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findTeam&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getMembers&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;size&lt;/span&gt;();&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n179&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 cid=&quot;n179&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 주인과 mappedBy&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n180&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n181&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n182&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;계속 강조하지만, 객체는 방향을 가지고 있고, DB는 방향성이 없다. FK선언 하나면 양방향 관계를 맺을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n183&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n184&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mappedBy = JPA의 멘붕 클래스, mappedBy는 처음에는 이해하기 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n185&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n186&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체와 테이블간에 연관관계를 맺는 차이&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 이해해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;h3 cid=&quot;n187&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; orphans: 2; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체와 테이블간에 연관관계를 맺는 차이&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n188&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n189&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n190&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체 연관관계&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n191&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;회원 -&amp;gt; 팀 연관관계 1개(단방향)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n194&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n195&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀 -&amp;gt; 회원 연관관계 1개(단방향)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n196&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n197&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체의 양방향 관계&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n198&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n199&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n200&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n201&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n202&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체를 양방향으로 참조하려면 억지로 단방향 연관관계를 2개 만들어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n203&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n204&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n205&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;A -&amp;gt; B(a.getB())&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n206&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;A&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;B&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;b&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n207&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n208&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;B -&amp;gt; A(b.getA()) &lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n209&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;B&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;A&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;a&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n210&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n211&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;테이블 연관관계&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n212&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;회원 &amp;lt;-&amp;gt; 팀의 연관관계 1개(양방향)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;테이블의 양방향 연관관계&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n217&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n218&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n219&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블은 외래 키 하나로 두 테이블의 연관관계를 관리&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n220&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n221&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MEMBER.TEAM_ID 외래 키 하나로 양방향 연관관계를 가진다.(양쪽으로 조인할 수 있다.)&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n222&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; TEAM T &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ON&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; = T&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; TEAM T&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; MEMBER M &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ON&lt;/span&gt; T&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; = M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 cid=&quot;n223&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;둘 중 하나로 외래 키를 관리해야 한다&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n224&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n225&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n226&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체로 보자. 멤버에 팀을 넣고, 팀에 멤버를 넣는다. 두군데 모두 넣어 주는데.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n227&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n228&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;둘 중에 뭘로 연관관계를 매핑해야 되나?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n229&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n230&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n231&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버의 팀값을 업데이트 할때 FK 업데이트?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n232&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n233&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀의 members를 업데이트 했을때 FK 업데이트?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n234&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n235&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만 DB 에서는 객체가 참조를 어떻게 하던, FK값만 업데이트 되면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n236&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n237&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단방향 연관관계 매핑에서는 참조와 외래키만 업데이트 하면 됐지만, 양방향 관계 매핑에서는 다르다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n238&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n239&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이게 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 큰 패러다임의 문제&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n240&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/08_jpa_fk.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; data-alt=&quot;img&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/08_jpa_fk.PNG?raw=true&quot; alt=&quot;img&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n241&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 cid=&quot;n241&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인(Owner)&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n242&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n243&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n244&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;패러다임의 문제를 해결하기 위해 만들어진 개념이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n245&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n246&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑 규칙&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n247&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n248&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n249&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 두 관계중 하나를 연관관계의 주인으로 지정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n250&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n251&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인만이 외래 키를 관리(등록, 수정) 한다. DB에 접근한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n252&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n253&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n254&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체에 둘다 정보를 업데이트 해도, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인 것만 DB에 영향&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;을 준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n255&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n256&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;주인이 아닌쪽은 읽기만 가능&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n257&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n258&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n259&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Member에 Team값을 업데이트 하면 mappedBy로 매핑된 Team의 members로 업데이트 된 DB의 멤버들을 읽을 수 있다는 이야기이다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n260&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n261&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Member에 Team 정보 update 했는데, Team에서 getMembers로 가져왔는데 반영 안됐네? -&amp;gt; 연관관계 설정 안했구나.. 라고 바로 알 수 있다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n262&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n263&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mappedBy 키워드로 연관관계 매핑이 되었다. 라는 것을 의미한다. 그래서 JoinColumn도 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n264&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n265&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주인은&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; mappedBy 속성 사용 하지 않고, @ JoinColumn&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n266&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n267&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; width: inherit; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주인이 아니면&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; mappedBy 속성으로 주인을 지정한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 cid=&quot;n268&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;누구를 주인으로 해야 할까?&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n269&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n270&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n271&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외래 키가 있는 곳을 주인으로 정해라.&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; @JoinColumn이 있는 쪽.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n272&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n273&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n274&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team.members를 주인으로 선택했다고 가정하고, members를 업데이트 했다. 결과는? Team의 필드값을 바꿨는데, Member로 업데이트 쿼리가 날라간다. ???&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n275&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n276&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여기서는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member.team&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 연관관계의 주인이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n277&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n278&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버와 팀이 다대일 관계인데, DB에서 보면 다쪽이 FK를 가지고 있다. 다쪽이 주인이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n279&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n280&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인은 비즈니스 적으로 중요하지 않다. 단지 FK를 가진 쪽이 주인이 되면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n281&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들면, 자동차와 자동차 바퀴가 있는데 비즈니스적으로는 자동차가 중요하지만, 자동차와 바퀴는 일대다 관계다. 다인 바퀴가 연관관계의 주인이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n283&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n284&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 설계 해야,&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n285&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n286&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n287&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뒤에서 나올 성능이슈도 없고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n288&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n289&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티랑 테이블이 매핑이 되어있는 테이블에서 FK가 관리가 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n290&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n291&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모 민족에서 프로젝트 중에, 모두 단방향으로 설계하고 개발했다. 양방향으로 뚫어서 조회가 필요한 경우에 그 때 양방향 매핑 하면 된다. 자바 코드만 수정이 일어나기 때문에 DB에 영향 주지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n292&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n293&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n294&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;이미, 단방향 매핑만으로 ORM 매핑이 다 끝났다. 양방향은 단순히 조회를 편하게 하기 위해 부가 기능이 조금더 들어가는 거라고 보면 된다. 어차피 조회할 수 있는 기능만 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n295&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/09_jpa_fk2.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 770px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; data-alt=&quot;img&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/09_jpa_fk2.PNG?raw=true&quot; alt=&quot;img&quot; title=&quot;&quot; class=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 cid=&quot;n296&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑시 가장 많이 하는 실수&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n305&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n346&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에 값을 입력하지 않음&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n363&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n361&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인을 Member.team으로 잡아놓고, Team의 members에만 연관관계를 설정한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n367&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n365&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주인이 아닌 mappdBy가 설정 되어있는 Team의 members는 조회 권한만 가지고 있고, DB에 영향을 주지 못한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n370&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n368&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;DB에 Member를 조회해보면, TEAM_ID 가 NULL인 상황이 발생한다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n373&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n371&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑에 대해서 잘 이해하고 있으면, DB 모델링에 따라서 객체 모델링은, ORM 모델링은 이렇게 엮어 가면 되겠구나 라고 생각하는데 많은 도움이 된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n351&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TeamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//이 작업을 하지 않고,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//member.setTeam(team);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//역방향(주인이 아닌 방향)만 연관관계 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getMembers&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;add&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h3 cid=&quot;n375&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑시 주의할점 &lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n403&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n405&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n406&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑시 연관관계의 주인에 값을 입력해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n376&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n378&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n379&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 입장에서만 보면, 연관관계의 주인인 멤버에다가 팀을 세팅해주면 끝난다. DB에 FK값 세팅 되고 문제가 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n385&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n383&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;굳이 team의 members 컬렉션에 멤버를 새로 넣어주지 않아도, 지연 로딩을 통해서 해당 멤버를 조회해올 수 있기 때문에 (아래의 코드에서는)아무 문제가 없다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n393&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n392&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n390&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래의 코드에서는 em.flush(), clear() 하는 순간에 DB에 FK 세팅 된다. 그래서 지연 로딩을 해도 FK로 조인해서 가져올 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n396&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n394&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, em.flush(), clear()가 일어나지 않으면 DB에 쿼리가 안날라가고, FK도 없이 MEMBER가 1차 캐시에만 영속화 되어있는 상태이다. members 조회해봤자 size 0이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n382&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n380&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론은 진짜 객체 지향적으로 고려하면 항상 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;양쪽다 값을 넣어 주는 것이 맞다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n400&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n399&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n397&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;추가적으로 JPA 없이 순수 자바 Object로 테스트 케이스가 동작하게끔 테스트 코드를 짤때도 NPE 발생한다. 양쪽다 넣어주자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n356&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TeamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 연관관계의 주인에 값 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 역방향 연관관계를 설정하지 않아도, 지연 로딩을 통해서 아래에서 Member에 접근할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//team.getMembers().add(member);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 이 동작이 수행되지 않으면 FK가 설정되어 있지 않은 1차캐시에만 영속화 된 상태이다. SELECT 쿼리로 조회해봤자 list 사이즈 0이다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findTeam&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findMembers&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findTeam&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getMembers&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;m&lt;/span&gt; : &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findMembers&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// flush, clear가 일어난 후에는 팀의 Members에 넣어주지 않았지만, 조회를 할 수 있음. 이것이 지연로딩&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getUsername&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n413&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n412&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n410&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;순수 객체 상태를 고려해서&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 항상 양쪽에 값을 설정하자.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n416&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n414&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계를 설정하다 보면 휴먼에러가 생길 여지가 많다. &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 편의 메소드를 생성하는 것을 권장&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n440&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n439&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n437&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;편의 메소드에서는 주인쪽에서 연관관계의 값을 설정할때, 역방향 값도 함께 설정해준다. 메소드를 원자적으로 사용해서 세트로 움직이면 실수할 일이 없어진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n444&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n442&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;혹시 편의 메소드 안에 비즈니스 로직이 들어가는 복잡한 경우. 책을 참조해보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n431&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;changeTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getMembers&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;add&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n421&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑시에 무한 루프를 주의&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하자&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n441&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n448&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n449&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;lombok이 자동으로 만드는 toString()을 사용하지 말자.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n453&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n452&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n450&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member의 toString()&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n454&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;toString&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Member{&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;id=&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;, username='&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;username&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'\''&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;, team=&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'}'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n459&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n460&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team의 toString()&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n461&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;toString&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Team{&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;id=&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;id&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;, name='&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'\''&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;, members=&quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'}'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n467&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n468&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member의 toString()을 호출하는 순간 Team의 toString()의 members가 호출하는 각 member의 toString()때문에 무한루프 생성. 스택오버플로우 발생&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n471&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n469&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JSON 생성 라이브러리&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n484&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n483&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n481&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 관계의 엔티티를 JSON으로 시리얼라이즈 하는순간 무한루프에 빠져버린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n476&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n474&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;컨트롤러에서는 엔티티를 절대 직접 반환하지 말자.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n495&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n480&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n494&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1 - 엔티티 -&amp;gt; JSON 시 무한루프 걸린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n492&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n490&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2 - 엔티티는 충분히 변경의 여지가 있는데, 엔티티 변경시 API 스펙 자체가 변경된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n503&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n501&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n499&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서 웬만하면 DTO로 변환해서 반환하자. 그렇게 하면 JSON 생성 라이브러리 때문에 생기는 문제는 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;h3 cid=&quot;n509&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; orphans: 2; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑 정리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n512&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n514&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n515&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단방향 매핑만으로도 이미 연관관계 매핑은 끝&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n582&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n580&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n578&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;설계할 때 객체 입장에서 보면 양방향 매핑은 양쪽다 신경을 써야 하므로 복잡도가 올라간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n532&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n530&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서 JPA 모델링 할 때, 단방향 매핑으로 처음에 설계를 끝내야 한다(객체와 테이블을 매핑하는 것). 일대다에서 다쪽에 단방향 매핑으로 쭉 설계하면 이미 테이블 FK 설정은 끝났다. 거기서 필요할때 양방향 매핑을 추가해서 역방향 조회 기능을 쓰면 된다. 자바 코드에 컬렉션만 추가하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n521&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n519&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;양방향 매핑은 반대 방향으로 조회(객체 그래프 탐색) 기능이 추가된 것 뿐이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n524&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n522&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL에서 역방향으로 탐색할 일이 많다. 현업에서 많이 쓴다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n527&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n525&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단방향 매핑을 잘 하고, 테이블이 굳어진 뒤에 양방향 매핑은 필요할 때 추가해도 된다&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;. 테이블에 영향주지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n539&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n538&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n536&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그동안 학습한 것을 보면, 단방향 매핑에서 양방향 매핑으로 넘어가면서 추가된 것은 팀 객체(엔티티)에 members 컬렉션이 들어간것 뿐이다. 테이블은 똑같다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n544&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n542&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계의 주인을 정하는 기준은&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n548&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n547&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n545&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비즈니스 로직을 기준으로 주인을 선택하면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n551&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n549&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 주인은 외래 키의 위치를 기준&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;으로 정해야 한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n557&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; orphans: 2; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n558&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n559&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n560&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&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;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>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>mappedBy</category>
      <category>양방향 연관관계</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/122</guid>
      <comments>https://ict-nroo.tistory.com/122#entry122comment</comments>
      <pubDate>Fri, 16 Aug 2019 18:16:20 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 단방향 연관관계</title>
      <link>https://ict-nroo.tistory.com/121</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/9951413A5D566A8F22&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F9951413A5D566A8F22&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;991768355CC2E0F534.jpg&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;h2 cid=&quot;n72&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단방향 연관관계 매핑 이론&lt;/span&gt;&lt;/h2&gt;&lt;h3 cid=&quot;n73&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체지향 모델링&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n74&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 연관관계 사용해서 아래의 객체 참조와 테이블의 외래키를 매핑하는 방법 학습&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n77&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/06_jpa_relational.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 800px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; data-alt=&quot;img&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/06_jpa_relational.PNG?raw=true&quot; alt=&quot;img&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin-top: auto; margin-bottom: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n78&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 참조와 테이블의 외래 키를 매핑&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n81&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외래 키 대신에 TEAM 객체를 넣고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TEAM_ID를 매핑한다. @JoinColumn으로 조인 컬럼을 명시한다. 안적어도 default로 들어간다. 적어주는게 더 명시적이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 연관관계를 설정한다 @ManyToOne.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n88&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n89&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하나의 Team이 여러개의 Member를 가지고 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그렇게 보면 TEAM 입장에서는 일대다,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member 입장에서는 다대일이다. @ManyToOne.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n94&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 설정하면 Team 이라는 필드가 DB에 있는 TEAM_ID라는 FK와 매핑이 된다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;관계를 선언하고 조인할 컬럼을 매핑 했다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이것을 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 매핑&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이라고 한다. ORM 매핑!!!!!!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n100&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GeneratedValue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;USERNAME&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;age&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//  @Column(name = &quot;TEAM_ID&quot;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//  private Long teamId;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ManyToOne&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@JoinColumn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TEAM_ID&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n101&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 참조와 테이블의 외래키를 매핑한 후의 모델링(ORM 매핑)&lt;/span&gt;&lt;/h3&gt;&lt;p cid=&quot;n102&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; text-align: center; clear: none; float: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/09_modeling.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/inflearn/img/09_modeling.png?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px);&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n103&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 저장 방법&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n104&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;member.setTeam(team)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team 객체를 그대로 넣어버린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n109&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//팀 저장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TeamA&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//회원 저장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Memeber&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member1&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;setTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;team&lt;/span&gt;); &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//단방향 연관관계 설정, 참조 저장&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n110&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 했을때 조회시 Member를 가져와서 getTeam()으로 팀을 바로 조회할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n113&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n114&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n115&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;참조로 연관관계 조회 가능. 객체 그래프 탐색!!&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n117&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;물론, 위의 em.find()시 select 쿼리는 날라가지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n118&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;persist()시 JPA 내부에서 1차캐시를 저장하기 때문에, select 쿼리가 안나가고 캐시에서 리턴한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래의 코드에서 1차 캐시를 클리어 하고, 멤버와 팀의 연관관계를 조회한 쿼리를 보면 애초에 JPA가 조인을 해서 한방쿼리로 가져오는 걸 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, 처음부터 조인해서 가져오지 않고 일단 멤버만 가져오고 싶다라고 하면&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@ManyToOne에 패치 옵션을 줄 수 있다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n127&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n128&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n129&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ManyToOne(fetch = FetchType.LAZY)&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n130&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n131&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n132&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;레이지 로딩, 지연로딩. 실제 연관관계를 가진 팀이 Touch 될 때, 그 때 Team을 조회하는 쿼리를 날려서 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;@ManyToOne(fetch = FetchType.EAGER)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n135&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n136&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n137&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;패치 옵션의 기본값은 EAGER이다. 연관관계를 가진 객체를 조인해서 먼저 다 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n139&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현업에서는 전부다 LAZY로 기본 설정 해 놓고,&lt;/span&gt;&lt;/strong&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n140&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n141&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;꼭 필요한 데서만, 쿼리를 실제 날리는 시점에 원하는 결과를 최적화해서 가져오는 방법을 사용하는 것을 권장한다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n142&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//캐시 클리어해서 find시 날라가는 쿼리 확인 가능&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;flush&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//조회&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findMember&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getId&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//참조를 사용해서 연관관계 조회&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findTeam&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;findMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box;&quot;&gt;getTeam&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n143&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 수정&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n144&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n146&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;setTeam()으로 새로운 팀을 할당하면, 연관관계가 바뀐다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n147&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n148&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Update 쿼리를 통해서 FK에 들어간 Value가 바뀐다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n149&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//새로운 팀B&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;teamB&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;TeamB&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;teamB&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//회원1에 새로운 팀B 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;teamB&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n557&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n558&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n559&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n560&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/ORM-JPA-Basic&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap; caret-color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap; caret-color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap; caret-color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap; caret-color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap; caret-color: rgb(51, 51, 51);&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>단방향 매핑</category>
      <category>단방향 연관관계</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/121</guid>
      <comments>https://ict-nroo.tistory.com/121#entry121comment</comments>
      <pubDate>Fri, 16 Aug 2019 18:07:05 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Framework] IoC Container, ApplicationContext와 Bean</title>
      <link>https://ict-nroo.tistory.com/120</link>
      <description>&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: 400px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99441D4C5D42D17B1C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99441D4C5D42D17B1C&quot; width=&quot;400&quot; height=&quot;279&quot; filename=&quot;스프링.png&quot; filemime=&quot;image/jpeg&quot; style=&quot;&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 cid=&quot;n34&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;1. 스프링 IoC 컨테이너와 빈&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n35&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Inversion of Control&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n38&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는게 아니라, 주입 받아 사용하는 방법을 말함.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n41&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n42&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;스프링 IoC 컨테이너&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n43&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;BeanFactory&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n46&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n47&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n48&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 프레임워크의 중요한 인터페이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 컴포넌트의 중앙 저장소&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈 설정 소스로부터 빈 정의를 읽어들이고, 빈을 구성하고 제공한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Bean - 빈&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n55&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n56&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n57&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 IoC 컨테이너가 관리 하는 객체&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;장점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n60&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의존성 관리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n63&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n64&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n65&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의존성 관리를 할 수 없다고 생각해보자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들어, 서비스 객체 내에서 Repository 의존성을 직접 만들어서 사용하는 경우, 서비스 단의 단위 테스트를 독립적으로 작성하기가 힘들다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의존성을 주입 받을 수 있기 때문에 객체(Repository)를 Mocking 해서 얼마든지 단위 테스트를 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스코프&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n72&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;싱글톤: 하나&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n75&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n76&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n77&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈의 기본 스코프 설정은 싱글톤&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n78&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n79&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메모리 관리 등 성능 최적화 이점&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로토타입: 매번 다른 객체 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;라이프 사이클 인터페이스&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n84&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@PostConstruct 등&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ApplicationContext&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n89&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ApplicationContext는 spring-context 모듈 안에 위치함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-beans 모듈의 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;BeanFactory&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(스프링 IoC 컨테이너)를 상속받고, 그외 다양한 기능을 가지는 인터페이스도 추가로 상속받은 인터페이스&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n94&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ListableBeanFactory&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;HierarchicalBeanFactory&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n99&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n100&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;EnvironmentCapable&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1961&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-core 모듈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n617&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n615&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로파일과 프로퍼티를 다루는 인터페이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;MessageSource&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n106&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-context 모듈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n109&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n110&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메세지 소스 처리 기능(i18n)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ApplicationEventPublisher&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n113&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n114&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n115&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-context 모듈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n117&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이벤트 발행 기능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n118&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n119&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ResourcePatternResolver&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n120&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-core 모듈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ResourceLoader&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리소스 로딩 기능 등&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n127&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2. ApplicationContext와 다양한 빈 설정 방법&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n128&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 IoC 컨테이너의 역할&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n131&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n132&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈 인스턴스 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n134&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n135&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;의존 관계 설정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n136&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n137&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n139&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ClassPathXmlApplicationContext&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 빈과 의존관계 등을 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;XML 파일로 일일히 설정하는 방법&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 있었고, 이 굉장한 번거로움을 피하고자 등장한 것이 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;component-scan&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n140&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 패키지 하위에 있는 빈이 될 클래스들을 모두 스캔해서 빈으로 등록하는 방법이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n143&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n144&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈 스캐닝시 기본적으로 @Component 어노테이션을 사용해서 빈으로 등록할 수 있고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n146&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Component를 확장한 @Controller, @Service, @Repository 모두 컴포넌트 스캔의 대상이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n147&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n148&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Java Config&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 직접 빈 설정도 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n149&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n150&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n151&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AnnotationConfigApplicationContext&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n152&quot; mdtype=&quot;fences&quot; style=&quot;padding: 8px 4px 6px; background-color: rgb(248, 248, 248); box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; border: 1px solid rgb(231, 234, 237); border-radius: 3px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;ApplicationConfig&lt;/span&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BookRepository&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bookRepository&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BookRepository&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BookService&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bookService&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BookService&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bookService&lt;/span&gt;()&amp;nbsp;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BookService&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bookService&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setBookRepository&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;boookRepository&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bookService&lt;/span&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실, Java Config로 일일히 하는 것도 번거롭다. 그래서 여기서도 @ComponentScan을 사용할 수 있다 :)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n155&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ComponentScan 대상 지정을 basePackages와 basePackageClasses 두가지 방법으로 할 수 있지만, 더 타입세이프 한 방법은 클래스 기준으로 가져가는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n158&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n159&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;이 방법이 Spring Boot를 기반으로 Spring을 사용하는 것과 가장 가까운 방법이다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n160&quot; mdtype=&quot;fences&quot; style=&quot;padding: 8px 4px 6px; background-color: rgb(248, 248, 248); box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; border: 1px solid rgb(231, 234, 237); border-radius: 3px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ComponentScan&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;basePackageClasses&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;DemoApplication&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;ApplicationConfig&lt;/span&gt;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n161&quot; mdtype=&quot;fences&quot; style=&quot;padding: 8px 4px 6px; background-color: rgb(248, 248, 248); box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; border: 1px solid rgb(231, 234, 237); border-radius: 3px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;DemoApplication&lt;/span&gt;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;main&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationContext&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AnnotationConfigApplicationContext&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationConfig&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n162&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n163&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;물론 스프링 부트에서는 ApplicationContext를 만드는 것 조차 @SpringBootApplication이 해준다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n164&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n165&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n166&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@SpringBootApplication을 타고 들어가보면, @SpringBootConfiguration이 @Configuration을 가지고 있고, @ComponentScan이 선언되어있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n167&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n168&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서 Java Config 설정때 만들었던 ApplicationConfig도 필요 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n169&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n170&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@SpringBootApplication이 다 해준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n171&quot; mdtype=&quot;fences&quot; style=&quot;padding: 8px 4px 6px; background-color: rgb(248, 248, 248); box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; border: 1px solid rgb(231, 234, 237); border-radius: 3px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@SpringBootApplication&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;DemoApplication&lt;/span&gt;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;main&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;[]&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n381&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;3. Bean Scope&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n486&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n487&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n488&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ApplicationContext에 생성된 빈들은 스코프를 가지고 있다. 아무 설정도 해주지 않았으면. default인 싱글톤 스코프를 가진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n491&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n489&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스코프&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n495&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n494&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n492&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;싱글톤&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n499&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n498&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n496&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 전반에 걸쳐서, 해당 빈의 인스턴스가 오직 한개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n502&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n500&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로토타입&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n506&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n505&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n503&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈을 주입 받아올 때마다 새로운 빈이 생성된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n509&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n507&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로토타입 빈이 싱글톤 빈을 참조하면?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n517&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n516&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n514&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아무 문제 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n520&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n518&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;싱글톤 빈이 프로토타입 빈을 참조하면?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n524&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n523&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n521&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로토타입 빈이 업데이트가 안되네...???&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n541&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n540&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n538&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;싱글톤 빈을 통해서 프로토타입 빈을 조회하면 동일한 빈이 참조 된단 이야기.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n527&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n525&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;업데이트 하려면, 여러가지 방법이 있지만 그중 하나. scoped-proxy를 쓰는 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n575&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n571&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n569&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;scoped-proxy&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n586&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n584&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n582&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈 선언부에 스코프 설정과 같이 함&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n593&quot; mdtype=&quot;fences&quot; style=&quot;padding: 8px 4px 6px; background-color: rgb(248, 248, 248); box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; border: 1px solid rgb(231, 234, 237); border-radius: 3px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Scope&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;value&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;prototype&quot;&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;proxyMode&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ScopedProxyMode&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;TARGET_CLASS&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;&amp;nbsp;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Proto&lt;/span&gt;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n548&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n549&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;proxyMode를 설정해야함. default는 프록시를 사용하지 않는다는 옵션.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n554&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n552&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈에 적용해야하므로 ScopedProxyMode.TARGET_CLASS를 프록시 모드로 설정한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n557&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n555&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 설정은, 클래스기반의 프록시로 감싸서 빈으로 등록하고, 다른 빈들이 사용할 때 프록시로 감싼 빈을 사용하게 하라는 설정이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n560&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n558&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 하지 않으면, 프로토타입 빈을 바꿔줄 여지가 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n563&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n561&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;싱글톤 빈에서 프로토타입 빈을 사용하려면 이와 같은 설정을 하고, 싱글톤 빈이 프록시로 감싸진 빈을 참조하게 해서 매번 다른 빈을 참조하게 해야한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n534&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n532&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Object-Provider&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n581&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n580&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n578&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;소스 코드에 침투함.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n537&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n535&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Provider(표준)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n566&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n564&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;싱글톤 객체 사용시 주의할 점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n603&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n602&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n600&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;필드가 공유된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n606&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n604&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멀티스레드 환경에서 빈의 필드를 변경하려고 하기때문에 스레드 세이프한 코딩이 필수적이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item md-focus-container&quot; cid=&quot;n609&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n607&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 싱글톤 빈들은 ApplicationContext 초기 구동시 인스턴스가 생성된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n838&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n173&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;padding-left: 30px; box-sizing: border-box; margin: 0.8em 0px 0px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n174&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://spring.io/projects/spring-framework&quot; style=&quot;color: rgb(65, 131, 196); box-sizing: border-box; cursor: pointer; -webkit-user-drag: none;&quot;&gt;https://spring.io/projects/spring-framework&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n176&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; box-sizing: border-box; line-height: inherit; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 프레임워크 핵심 기술 - 백기선&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&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: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left; clear: none; float: none;&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Spring</category>
      <category>ApplicationContext</category>
      <category>bean</category>
      <category>IoC 컨테이너</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/120</guid>
      <comments>https://ict-nroo.tistory.com/120#entry120comment</comments>
      <pubDate>Thu, 1 Aug 2019 20:50:34 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] Spring REST Client</title>
      <link>https://ict-nroo.tistory.com/119</link>
      <description>&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: 310px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/999563445D1DCBAD0C&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F999563445D1DCBAD0C&quot; width=&quot;310&quot; height=&quot;163&quot; filename=&quot;springboot.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;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 REST 클라이언트&lt;/span&gt;&lt;/h1&gt;&lt;p cid=&quot;n2&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: 1.8; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: justify;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;스프링 부트가 REST 클라이언트 관련해서 직접적으로 기능을 제공하는 것은 아니다. REST 클라이언트는 Spring Framework에서 제공하는 것이고, 부트는 그걸 쉽게 사용할 수 있도록 빈을 등록해준다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p md-focus&quot; style=&quot;box-sizing: border-box; line-height: 1.8; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px; text-align: justify;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;주의 할 것은 RestTemplate과 WebClient 두 타입의 빈을 등록해주는 것이 아니라, 빌더를 등록해준다. 그래서 우리는 빌더를 주입받아서 필요할 때마다 REST 클라이언트를 빌드해서 사용해야한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n4&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RestTemplate과 WebClient&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;REST 클라이언트를 사용하는데에 두가지 선택사항이 있다. 차이점은 아래와 같다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n6&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n7&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n8&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;RestTemplate&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n9&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Blocking I/O 기반의 Synchronous API&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n12&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n13&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n14&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Blocking I/O 기반의 Synchronous 개념을 이해하기 위한 예제 코드&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n15&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n16&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n17&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://github.com/namjunemy/spring-boot-concept-and-utilization/commit/d2297945ffd022c912118af8aabca2738c894d0f&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://github.com/namjunemy/spring-boot-concept-and-utilization/commit/d2297945ffd022c912118af8aabca2738c894d0f&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n18&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n19&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RestRunner에서 hi API를 호출한 뒤, Blocking 되므로 해당 메서드가 끝나기 전까지 다음 라인이 실행되지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n20&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n21&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서 두개의 API를 호출하고 시간을 찍어보면 약 8초가 나온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n22&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@RestController&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;RestClientController&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GetMapping&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hi&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hi&lt;/span&gt;() &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InterruptedException&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Thread&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sleep&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5000L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hi&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GetMapping&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/bye&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bye&lt;/span&gt;() &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InterruptedException&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Thread&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sleep&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3000L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;bye&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n23&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Slf4j&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Component&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;RestRunner&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationRunner&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Autowired&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateBuilder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateBuilder&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;run&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationArguments&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Exception&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplate&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplate&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateBuilder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;build&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;StopWatch&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;StopWatch&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;start&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiResult&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplate&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getForObject&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://localhost:8080/hi&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hi API Result : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiResult&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeResult&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplate&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getForObject&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://localhost:8080/bye&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/bye API Result : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeResult&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stop&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prettyPrint&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; cid=&quot;n24&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:17:52.271  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;37526&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; main] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : /hi API Result : hi&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:17:55.280  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;37526&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; main] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : /bye API Result : bye&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:17:55.281  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;37526&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; main] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : StopWatch &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;''&lt;/span&gt;: running time (millis) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;8425&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;ms &amp;nbsp; &amp;nbsp; % &amp;nbsp; &amp;nbsp; Task name&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;08425&lt;/span&gt; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;100&lt;/span&gt;% &amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n25&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n26&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RestTemplateAutoConfiguration.class 설정 클래스 내부&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n27&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로젝트에 spring-web 모듈이 있다면 RestTemplate&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Builder&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 빈으로 등록해준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n30&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@AutoConfigureAfter&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpMessageConvertersAutoConfiguration&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnClass&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplate&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;RestTemplateAutoConfiguration&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ObjectProvider&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpMessageConverters&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;messageConverters&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ObjectProvider&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateCustomizer&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateCustomizers&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateAutoConfiguration&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ObjectProvider&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpMessageConverters&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;messageConverters&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ObjectProvider&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateCustomizer&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateCustomizers&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;messageConverters&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;messageConverters&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateCustomizers&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateCustomizers&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnMissingBean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateBuilder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateBuilder&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateBuilder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateBuilder&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpMessageConverters&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;converters&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;messageConverters&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getIfUnique&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;converters&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;messageConverters&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;converters&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getConverters&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateCustomizer&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;customizers&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplateCustomizers&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;orderedStream&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;collect&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Collectors&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;toList&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;CollectionUtils&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isEmpty&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;customizers&lt;/span&gt;)) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;customizers&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;customizers&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n31&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n32&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest-client-access&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://docs.spring.io/spring/docs/current/spring-framework-reference/integration.html#rest-client-access&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n33&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;WebClient&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n35&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebClientAutoConfiguration&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로젝트에 spring-webflux 모듈이 있다면 WebClient.&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Builder&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 빈으로 등록해준다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n40&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n41&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n42&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 쉬운 방법은 spring-boot-starter-webflux를 의존성에 추가하는 방법이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Non-Blocking I/O 기반의 Asynchronous API&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n45&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개념을 이해하기 위한 예제 코드(컨트롤러는 위와 동일)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n48&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://github.com/namjunemy/spring-boot-concept-and-utilization/commit/08fcec6bfcaaa0cb812d3d45e6a36297e6a6a136&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://github.com/namjunemy/spring-boot-concept-and-utilization/commit/08fcec6bfcaaa0cb812d3d45e6a36297e6a6a136&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebClient로 부터 Mono를 만드는 라인은 Blocking되지 않는다. 실제로 subscribe가 일어날 때 요청해서 String객체를 파싱하는 동작을 한다. 이 동작도 Non-Blocking으로 동작한다. 단지, Asynchronous하게 응답이 오면 subscribe의 콜백함수가 동작을 하게 된다. 호출만 되고 밑라인을 수행한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그렇기 때문에, 늦게 호출한 /bye 에 대한 동작이 3초밖에 소요되지 않으므로 먼저 끝나서 로그로 찍히고, 뒤에 5초가 소요되는 /hi 의 로그가 찍힌다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;총 소요시간은 5초밖에 되지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n57&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Slf4j&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Component&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;RestRunner&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationRunner&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Autowired&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebClient&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Builder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;run&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationArguments&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Exception&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebClient&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClient&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;build&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;StopWatch&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;StopWatch&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;start&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 이 라인이 실행되도 아무런 동작을 하지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Mono&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiMono&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClient&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;uri&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://localhost:8080/hi&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;retrieve&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bodyToMono&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// subscribe를 해줘야 스트리밍이 일어난다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiMono&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;subscribe&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiResult&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;-&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hi API Result : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiResult&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Asynchronus 이므로 어느것이 먼저 끝날지 모른다. 스탑워치가 돌고있으면 멈추고,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isRunning&lt;/span&gt;()) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stop&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 로그를 찍고, 스탑워치를 다시 돌려줘야 한다. Asynchronus 이므로 순서보장이 안되기 때문에.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prettyPrint&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;start&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  });&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Mono&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeMono&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClient&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;uri&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://localhost:8080/bye&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;retrieve&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bodyToMono&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeMono&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;subscribe&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeResult&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;-&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/bye API Result : &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeResult&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isRunning&lt;/span&gt;()) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stop&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prettyPrint&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stopWatch&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;start&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  });&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; cid=&quot;n58&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:39:27.124  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;39877&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ctor-http-nio-2] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : /bye API Result : bye&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:39:27.125  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;39877&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ctor-http-nio-2] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : StopWatch &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;''&lt;/span&gt;: running time (millis) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3375&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;ms &amp;nbsp; &amp;nbsp; % &amp;nbsp; &amp;nbsp; Task name&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;03375&lt;/span&gt; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;100&lt;/span&gt;% &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:39:29.064  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;39877&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ctor-http-nio-4] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : /hi API Result : hi&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-30&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;17&lt;/span&gt;:39:29.065  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;39877&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [ctor-http-nio-4] i.n.s.restclient.RestRunner &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  : StopWatch &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;''&lt;/span&gt;: running time (millis) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5314&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;ms &amp;nbsp; &amp;nbsp; % &amp;nbsp; &amp;nbsp; Task name&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-----------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;03375&lt;/span&gt; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;064&lt;/span&gt;% &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;01939&lt;/span&gt; &amp;nbsp;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;036&lt;/span&gt;% &amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n59&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n60&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-client&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html#webflux-client&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n61&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;REST 클라이언트 커스터마이징&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n62&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;RestTemplate&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n65&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본으로 java.net.HttpURLConnection 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커스터마이징&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n70&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로컬 커스터마이징&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n73&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n74&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n75&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로컬에서 정의 후 안에서만 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n76&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n77&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;글로벌 커스터마이징&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n78&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RestTemplate이 기본적으로 사용하는 java.net.HttpURLConnection를 HttpClient로 사용해야 하는 상황이 있을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;먼저 HttpClient를 빈으로 만들기 위해서 의존성에 추가한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n83&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n84&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그리고 RestTemplateCustomizer를 빈으로 등록해서 전역 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커스터마이저 안에서 restTemplate.setRequestFactory()로 맞는 구현체를 등록한다.(이것 역시 Spring의 PSA(Portable Service Abstraction)가 잘 적용 되어있다.)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 되면 더이상 기본 커넥션이 아닌, apache에서 제공하는 org.apache.http.client.HttpClient를 RestTemplate이 사용하게 된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n89&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateCustomizer&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;restTemplateCustomizer&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplateCustomizer&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;customize&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RestTemplate&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplate&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;restTemplate&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setRequestFactory&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpComponentsClientHttpRequestFactory&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈 재정의&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;WebClient&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n94&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본으로 Reactor Netty의 HTTP 클라이언트 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커스터마이징&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n99&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로컬 커스터마이징&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n102&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebClient&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClient&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;baseUrl&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://localhost:8080&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;build&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Mono&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hiMono&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClient&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;uri&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hi&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;retrieve&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bodyToMono&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Mono&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;byeMono&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClient&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;uri&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/bye&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;retrieve&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;bodyToMono&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;글로벌 커스터마이징&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n105&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n106&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n107&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebClientCustomizer를 빈으로 등록해서 전역 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n108&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n109&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n110&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빈으로 등록해 놓고, 사용하는 쪽에서는 build()만 해서 사용&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n111&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebClientCustomizer&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;webClientCustomizer&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClientBuilder&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;webClientBuilder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;baseUrl&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://localhost:8080&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n112&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n113&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;또는 빈 재정의 해서 사용해도 됨.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n119&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n120&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot;md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;백기선 - 스프링 부트 개념과 활용&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Spring</category>
      <category>RestTemplate</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>WebClient</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/119</guid>
      <comments>https://ict-nroo.tistory.com/119#entry119comment</comments>
      <pubDate>Fri, 5 Jul 2019 10:21:24 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] Spring Security 자동 설정과 커스터마이징</title>
      <link>https://ict-nroo.tistory.com/118</link>
      <description>&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: 300px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99052E345D1DCA1512&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99052E345D1DCA1512&quot; width=&quot;300&quot; height=&quot;168&quot; filename=&quot;spring-security.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;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 시큐리티&lt;/span&gt;&lt;/h1&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n2&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n3&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹 시큐리티&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n5&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n6&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메소드 시큐리티&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n7&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n8&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다양한 인증 방법 지원&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n9&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;LDAP, 폼 인증, Basic 인증, OAuth, ...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n12&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1. 스프링 부트 시큐리티 자동 설정&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n13&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n14&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n15&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-boot-starter-security&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n16&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n17&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SecurityAutoConfiguration.class 설정파일 참조&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n18&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n19&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n20&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 시큐리티가 의존성으로 등록되어 있으면,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n21&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;DefaultAuthenticationEventPublisher&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가 @Bean으로 등록된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n23&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnClass&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;DefaultAuthenticationEventPublisher&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@EnableConfigurationProperties&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SecurityProperties&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Import&lt;/span&gt;({&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SpringBootWebSecurityConfiguration&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebSecurityEnablerConfiguration&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SecurityDataConfiguration&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;})&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;SecurityAutoConfiguration&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnMissingBean&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationEventPublisher&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;DefaultAuthenticationEventPublisher&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authenticationEventPublisher&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationEventPublisher&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;publisher&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;DefaultAuthenticationEventPublisher&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;publisher&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 이벤트 퍼블리셔는&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n26&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n27&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n28&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BadCredentialsException&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n29&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n30&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;UsernameNotFoundException&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n31&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n32&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AccountExpiredException&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n33&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;등의 &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이벤트를 매핑해서 발생시켜 준다. =&amp;gt; &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;인증 관련 각종 이벤트 발생&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n37&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DefaultAuthenticationEventPublisher.java&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n40&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러면 우리는 이벤트 에러 핸들러를 등록해서 유저의 상태를 변경하는 등의 특정 동작을 수행할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n42&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;DefaultAuthenticationEventPublisher&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ApplicationEventPublisher&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;applicationEventPublisher&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;applicationEventPublisher&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;applicationEventPublisher&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BadCredentialsException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureBadCredentialsEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UsernameNotFoundException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureBadCredentialsEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AccountExpiredException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureExpiredEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ProviderNotFoundException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureProviderNotFoundEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;DisabledException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureDisabledEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;LockedException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureLockedEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationServiceException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureServiceExceptionEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;CredentialsExpiredException&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureCredentialsExpiredEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addMapping&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;org.springframework.security.authentication.cas.ProxyUntrustedException&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationFailureProxyUntrustedEvent&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;스프링 부트의 시큐리티 설정파일&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인 SpringBootWebSecurityConfiguration.class를 보면,&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n45&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebSecurityConfigurerAdapter를 상속받아서 그대로 사용하고 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n48&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;/**&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* The default configuration for web security. It relies on Spring Security's&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* content-negotiation strategy to determine what sort of authentication to use. If the&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* user specifies their own {@link WebSecurityConfigurerAdapter}, this will back-off&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* completely and the users should specify all the bits that they want to configure as&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* part of the custom security configuration.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* @author Madhura Bhave&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;* @since 2.0.0&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnClass&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebSecurityConfigurerAdapter&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnMissingBean&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebSecurityConfigurerAdapter&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnWebApplication&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Type&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SERVLET&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;SpringBootWebSecurityConfiguration&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Order&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SecurityProperties&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BASIC_AUTH_ORDER&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;DefaultConfigurerAdapter&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebSecurityConfigurerAdapter&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 시큐리티가 제공하는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;기본설정을 그대로 쓴다&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;는 의미가 된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n51&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n53&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@ConditionalOnMissingBean(WebSecurityConfigurerAdapter.class)가 의미하는 것은&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n54&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n55&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;만약, WebSecurityConfigurerAdapter.class 를 상속받은 빈을 만들면&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n56&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n57&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;커스텀하게 우리의 시큐리티 설정을 가져갈 수 있다는 이야기가 된다.&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebSecurityConfigurerAdapter.class 안에서 특히 configure() 메서드를 보면, &lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n60&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로 사용자 인증이 된 요청에 대해서만 요청을 허용하고.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로그인 폼과, HttpBasic을 사용하도록 되어 있는것을 볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n65&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;formLogin - 사용자가 폼기반 로그인으로 인증 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;httpBasic - 사용자가 Http기반 인증으로 인증 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;우리가 부트에서 시큐리티 스타터를 등록만 했는데 모든 인증 없는 컨트롤러 테스트가 깨지고, 웹에선 로그인 페이지로 리다이렉트 되는 이유가 여기에 있다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n72&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;configure&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpSecurity&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;http&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Exception&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;logger&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;debug&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;http&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authorizeRequests&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;anyRequest&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authenticated&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;formLogin&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;httpBasic&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;부트에서 시큐리티 스타터 의존성을 추가하고, application을 run하면 아래와 같은 로그가 찍힌다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; cid=&quot;n75&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2019&lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;-06-28&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;14&lt;/span&gt;:45:37.001  INFO &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;18612&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;---&lt;/span&gt; [  main] .s.s.UserDetailsServiceAutoConfiguration : &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;Using generated security password: 960d55de-dd62-415c-b7ff-8f5083e78498&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n76&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;spring-boot-autoconfigure의 security쪽 자동 설정중 하나인 UserDetailsServiceAutoConfiguration의 역할이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드를 보면&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n81&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@ConditionalOnMissingBean({ AuthenticationManager.class, AuthenticationProvider.class,&lt;/span&gt;&lt;span md-inline=&quot;softbreak&quot; class=&quot;md-softbreak&quot; style=&quot;box-sizing: border-box;&quot;&gt;
&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;UserDetailsService.class }) 에 의해서 3개의 클래스가 없을때 아래의 설정 파일이 적용되고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;inMemoryUserDetailsManager() 에 의해서 인메모리로 UserDetailsManager를 만들어서, 랜덤하게 유저가 만들어지게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;만약, UserDetailsService.class를 상속받아서 재정의하거나 하면 랜덤 유저는 생성되지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n88&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnClass&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationManager&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnBean&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ObjectPostProcessor&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnMissingBean&lt;/span&gt;({&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationManager&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AuthenticationProvider&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UserDetailsService&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;})&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;UserDetailsServiceAutoConfiguration&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;NOOP_PASSWORD_PREFIX&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;{noop}&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Pattern&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PASSWORD_ALGORITHM_PATTERN&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Pattern&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;compile&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;^\\{.+}.*$&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Log&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;logger&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;LogFactory&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getLog&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UserDetailsServiceAutoConfiguration&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@ConditionalOnMissingBean&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;type&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;org.springframework.security.oauth2.client.registration.ClientRegistrationRepository&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Lazy&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InMemoryUserDetailsManager&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;inMemoryUserDetailsManager&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SecurityProperties&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;properties&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;ObjectProvider&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PasswordEncoder&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;passwordEncoder&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SecurityProperties&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;User&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;properties&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getUser&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;roles&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getRoles&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;InMemoryUserDetailsManager&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;User&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;withUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;())&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getOrDeducePassword&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;passwordEncoder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getIfAvailable&lt;/span&gt;()))&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;roles&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;StringUtils&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;toStringArray&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;roles&lt;/span&gt;)).&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;build&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getOrDeducePassword&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SecurityProperties&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;User&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PasswordEncoder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;encoder&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getPassword&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isPasswordGenerated&lt;/span&gt;()) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;logger&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;info&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;format&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;%n%nUsing generated security password: %s%n&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;user&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getPassword&lt;/span&gt;()));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;encoder&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PASSWORD_ALGORITHM_PATTERN&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;matcher&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt;).&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;matches&lt;/span&gt;()) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;NOOP_PASSWORD_PREFIX&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n89&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n90&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://github.com/namjunemy/spring-boot-concept-and-utilization/commit/83ab8f4ff7095a94390ec3684edafae93dabea5f&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;commit log&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n91&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2 시큐리티 설정 커스터마이징&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n92&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n93&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n94&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1 - 웹 시큐리티 설정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n95&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;6.1에서 설명했던것 처럼 SpringBootWebSecurityConfiguration는 WebSecurityConfigurerAdapter가 빈으로 등록되어 있지 않을 경우에 등록된다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, 아래와 같이 WebSecurityConfigurerAdapter를 상속받은 커스텀 설정을 빈으로 등록하면 스프링 부트의 기본 시큐리티 설정은 사용하지 않게 된다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n100&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n101&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n102&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;&quot;/&quot;, &quot;/hello&quot;는 모든 사용자에게 허용하고, &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그 외의 요청은 인증이 필요하도록 설정하는 코드이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n105&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;WebSecurityConfig&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebSecurityConfigurerAdapter&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;configure&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpSecurity&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;http&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Exception&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;http&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authorizeRequests&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;antMatchers&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hello&quot;&lt;/span&gt;).&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;permitAll&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;anyRequest&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authenticated&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;formLogin&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;httpBasic&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n106&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n107&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2 - UserDetailsService 구현&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n108&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n109&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n110&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-authentication-userdetailsservice&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#jc-authentication-userdetailsservice&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 시큐리티가 랜덤생성해주는 유저 말고, 우리가 원하는 유저로 인증&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n113&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n114&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;보통 Account를 관리하는 서비스 계층에서 UserDetailsService를 implements 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;UserDetailsService 타입의 빈이 등록이 되어있어야지 부트가 기본으로 생성해주는 유저가 더 이상 등록되지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;password 검증을 위해서 passwordEncoder가 꼭 필요하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n119&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n120&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n121&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 시큐리티에서 권장하는 인코더를 시큐리티 설정에 빈으로 등록해주면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n122&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n123&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encodin&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#core-services-password-encodin&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n124&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;WebSecurityConfig&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WebSecurityConfigurerAdapter&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;protected&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;configure&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;HttpSecurity&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;http&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Exception&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;http&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authorizeRequests&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;antMatchers&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hello&quot;&lt;/span&gt;).&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;permitAll&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;anyRequest&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authenticated&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;formLogin&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;httpBasic&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Bean&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PasswordEncoder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;passwordEncoder&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PasswordEncoderFactories&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createDelegatingPasswordEncoder&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AccountService.class&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n127&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Service&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@RequiredArgsConstructor&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;AccountService&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;implements&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UserDetailsService&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;AccountRepository&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;accountRepository&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;final&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PasswordEncoder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;passwordEncoder&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Account&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createAccount&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Account&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Account&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setPassword&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;passwordEncoder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;encode&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;password&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;accountRepository&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;save&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UserDetails&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;loadUserByUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;throws&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UsernameNotFoundException&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Account&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;accountRepository&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;orElseThrow&lt;/span&gt;(() &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;-&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;UsernameNotFoundException&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;User&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getUsername&lt;/span&gt;(), &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;account&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getPassword&lt;/span&gt;(), &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authorities&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Collection&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;?&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GrantedAuthority&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authorities&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Arrays&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;asList&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SimpleGrantedAuthority&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;ROLE_USER&quot;&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n128&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n129&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://github.com/namjunemy/spring-boot-concept-and-utilization/commit/1330e36e5d2ed20523e5f5c17b80844855b8c610&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;commit log&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n130&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n131&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://spring.io/projects/spring-security&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://spring.io/projects/spring-security&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n135&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot;md-link md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;백기선 - 스프링 부트 개념과 활용&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Spring</category>
      <category>autoconfiguration</category>
      <category>Spring</category>
      <category>Spring Security</category>
      <category>springboot</category>
      <category>스프링 시큐리티</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/118</guid>
      <comments>https://ict-nroo.tistory.com/118#entry118comment</comments>
      <pubDate>Fri, 5 Jul 2019 10:21:04 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] Spring Data JPA와 QueryDSL 이해, 실무 경험 공유</title>
      <link>https://ict-nroo.tistory.com/117</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/997D4D4E5CC715B41D&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F997D4D4E5CC715B41D&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;991768355CC2E0F534.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Data JPA와 QueryDSL&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n2&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 기반 프로젝트&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n4&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n5&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n6&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Data JPA&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n7&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n8&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n9&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Data JPA&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n10&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n11&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n12&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지루하게 반복되는 CRUD 문제를 세련된 방법으로 해결&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n13&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n14&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발자는 인터페이스만 작성한다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n15&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n16&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n17&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n18&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 데이터 JPA 적용 전&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n19&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberRepository&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;save&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;) {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findOne&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;) {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findAll&lt;/span&gt;() {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;) {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n20&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;ItemRepository&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;save&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;) {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;one&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;) {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findAll&lt;/span&gt;() {...}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n21&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 데이터 JPA 적용 후&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n23&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 데이터 JPA에서는 JpaRepository 인터페이스를 제공한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우리가 상상할 수 있는 모든 API를 모두 처리한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인터페이스가 인터페이스를 상속받을 때는 extends를 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n30&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberRepository&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n31&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;ItemRepository&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 비어있음&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n32&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 데이터 JPA 적용 후 클래스 다이어그램&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n33&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JpaRepository에서 엄청 많은 기능을 제공한다. 인터페이스 상속 받아서 사용하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로 CRUD를 구현하지 않아도 된다. 인터페이스 호출해서 쓸 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 로딩 시점에 MemberRepository와 ItemRepository의 구현체를 만든다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/15_jpa_repo_diagram.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 746px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/15_jpa_repo_diagram.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n41&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;공통 인터페이스 기능&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n42&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JpaRepository 인터페이스: 공통 CRUD 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n45&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n46&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;제네릭은 &amp;lt;엔티티, 식별자&amp;gt;로 설정한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n47&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n48&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링에 스프링 데이터 프로젝트와 스프링 데이터 JPA프로젝트가 따로 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 데이터 프로젝트에 공통적인 기능을 가지고 있고, JPA 특화된 기능을 스프링 데이터 JPA 프로젝트에서 가지고 있다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n51&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/16_jpa_common_interface.png?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 746px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/16_jpa_common_interface.png?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n52&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쿼리 메서드 기능&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n53&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n54&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n55&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위에서 스프링 데이터 JPA 적용 전의 코드를 보면 findByUsername() 메서드가 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n56&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n57&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JpaRepository만으로 이걸 어떻게 처리하나? &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이를 위해 쿼리 메서드라는 엄청난 기능이 존재한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메서드 이름으로 쿼리를 생성한다. @Query 어노테이션으로 쿼리를 직접 정의할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n62&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;메서드 이름으로 쿼리 생성&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n63&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n64&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n65&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;메서드 이름만으로 JPQL 쿼리를 생성&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;선언된 메서드에 대해서는 애플리케이션 로딩 시점에 쿼리를 다 만들어 버린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그래서 에러를 사전에 잡을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n70&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberRepository&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByName&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n71&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberRepository&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello&quot;&lt;/span&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n72&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;// 실행된 SQL&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; * &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt; = &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n73&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이름으로 검색 + 정렬&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n74&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자주 쓰는 기능 정렬을 위해 Sort를 넣어줄 수 있다. 스프링 데이터에서 만들어 놨다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n77&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberRepository&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByName&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Sort&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sort&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n78&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;// 실행된 SQL&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; * &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt; = &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello&quot;&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;BY&lt;/span&gt; AGE &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;DESC&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n79&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이름으로 검색 + 정렬 + 페이징&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n80&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;추가로 페이징을 위한 기능도 만들어 놨다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n83&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n84&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제로 사용할땐 꼭 DTO로 변환해서 뿌리자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Page객체의 content에 데이터가 나오고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Pageable, sort, first, empty등의 정보를 얻을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n89&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberRepository&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Page&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByName&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Pageable&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;pageable&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n90&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 예를 들어 이런식으로 사용할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@GetMapping&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/hello&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Page&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;member&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PageRequest&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PageRequest&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;of&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;repository&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello1&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;request&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용 예시&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n93&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Pageable&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;page&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;PageRequest&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;, &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Sort&lt;/span&gt;...);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Page&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberRepository&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;page&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//전체 수&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;total&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;result&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTotalElements&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//데이터&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;result&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getContent&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;전체&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;페이지&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;수&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;다음&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;페이지&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;및&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;페이징을&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;위한&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;API&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;다&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;구현되어&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;있음&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n94&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실행된 SQL 2가지&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n96&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 조회&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n99&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; *&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ( &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; ROW_.*, ROWNUM ROWNUM_&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  ( &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; M.*&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt; = &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'hello'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  OEDER &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;BY&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  ) ROW_&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; ROWNUM &amp;lt;= &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; ROWNUM_&amp;gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전체 수 조회&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n102&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;COUNT&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M WEHRE M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt; = &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'hello'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n103&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Query, JPQL 정의&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n104&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Query 어노테이션을 사용해서 직접 JPQL을 지정할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마찬가지로 Named 쿼리도 애플리케이션 로딩 시점에 파싱을 하므로, 이로 인해 런타임 에러를 내지 않을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n109&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;interface&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberRepository&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;extends&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JpaRepository&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Query&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;select m from Member m where m.username = ?1&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;findByUsername&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Pageable&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;pageable&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n110&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Web 페이징과 정렬 기능&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n111&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n112&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n113&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컨트롤러에서 페이징 처리 객체를 바로 인젝션 받을 수 있다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n114&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n115&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;page: 현재 페이지&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n117&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;size: 한 페이지에 노출할 데이터 건수&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n118&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n119&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;sort: 정렬 조건&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n120&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n121&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;/members?page=0&amp;amp;size=20&amp;amp;sort=name,desc&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n122&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@RequestMapping&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;/members&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;method&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;RequestMethod&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;GET&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;list&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Pageable&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;pageable&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Model&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mobel&lt;/span&gt;) {}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n123&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n124&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL, JPQL을 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;코드로&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 작성할 수 있도록 도와주는 빌더 API&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n127&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 크리테이라에 비해서 편리하고 실용적이다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;오픈소스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n131&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL, JPQL의 문제점&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n132&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL, JPQL은 문자열이다. Type-check가 불가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;잘 해봐야 애플리케이션 로딩 시점에 알 수 있다. 컴파일 시점에 알 수 있는 방법이 없다. 자바와 문자열의 한계이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 로직 실행 전까지 작동여부 확인을 할 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n139&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 쿼리 실행 시점에 오류를 발견한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n141&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; * &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBERRR &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; MEMBER_ID = &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'100'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n142&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL 장점&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n143&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문자가 아닌 코드로 작성하자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴파일 시점에 문법 오류를 발견하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n148&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n149&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드 자동완성(IDE 도움)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n150&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n151&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단순하고 쉽다.  코드 모양이 JPQL과 거의 비슷하다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n152&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n153&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;동적 쿼리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n154&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL - 동작원리 쿼리타입 생성&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n155&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위의 장점을 실현하기 위해서 오픈 소스를 만들었다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n158&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n159&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member.java @Entity를 가지고, QMember.java라는 QueryDSL 전용 객체를 만들어 버린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n160&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n161&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;세팅이 좀 힘들지만, 세팅을 하고나면 아래와 같이 사용할 수 있다.(gradle, maven 도움을 받아서)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n162&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n163&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저를 JPAQueryFactory에 넣고, &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n164&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n165&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QMember 객체를 가지고 아래와 같은 방식으로 쿼리를 코드로 짤 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 큰 장점은 IDE의 도움을 받을 수 있다는 것과, 컴파일 타임에 오류를 잡아서 뭐리 때문에 실수를 할 일이 없다는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n168&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//JPQL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;18&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JPAFactoryQuery&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JPAQueryFactory&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;selectFrom&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;gt&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;18&lt;/span&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;orderBy&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;desc&lt;/span&gt;())&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n169&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL - 조인&lt;/span&gt;&lt;/h3&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n170&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JPAQueryFactory&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JPAQueryFactory&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QTeam&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;t&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QTeam&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;selectFrom&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;join&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;t&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;t&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;eq&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamA&quot;&lt;/span&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n171&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL - 페이징 API&lt;/span&gt;&lt;/h3&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n172&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JPAFactoryQuery&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JPAQueryFactory&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;selectFrom&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;gt&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;18&lt;/span&gt;))&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;orderBy&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;desc&lt;/span&gt;())&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;limit&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 페이징을 위해 limit, offset도 그냥 넣어줄 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;offset&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n173&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL - 동적 쿼리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n174&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n175&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n176&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사실 QueryDSL을 쓰는 진짜 이유는 동적 쿼리 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL은 정적 쿼리이다. 문자열을 더하기 해야하는데, 헬이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n179&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n180&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL은 코드를 더하는 것이기 때문에, 그것 보다 수월하게 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n181&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n182&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BooleanBuilder에 조건을 쭉쭉 넣고 쿼리를 실행시키면 된다. 더 자세히 공부해보자.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n183&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n184&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n185&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조건이 있으면 넣고, 없으면 안넣고 불린빌더만 가지고 동적 쿼리가 생성이 된다!!!&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n186&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n187&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;원하는 필드만 뽑아서 DTO로 뽑아내는 기능도 QueryDSL이 다 지원한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n188&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;member&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;9&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;QMember&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BooleanBuilder&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BooleanBuilder&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;contains&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;gt&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;list&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;selectFrom&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;builder&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n189&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL - 이것은 자바다!&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n190&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n191&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n192&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체지향적인 관점에서 이 점이 가장 중요하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n193&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n194&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n195&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들어 쿠폰의 상태와 마케팅 뷰 카운트를 체크하는 공통으로 사용되는 서비스 필수 제약 조건이 있다고 가정하자.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n196&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;selectFrom&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;coupon&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;coupon&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;type&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;eq&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;typeParam&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;coupon&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;status&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;wq&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;LIVE&quot;&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;marketing&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;viewCount&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lt&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;markting&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;maxCount&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n197&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n198&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바다!!&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n199&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n200&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러므로 중복코드를 함수로 extract해서 재사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n201&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n202&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;제약조건을 조립할 수가 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n203&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n204&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n205&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;extract method를 통해서 가독성과 재사용성을 확보하면서&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n206&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n207&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쿼리를 코드로 리팩토링 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n208&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;selectFrom&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;coupon&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;where&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;coupon&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;type&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;eq&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;typeParam&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;isServiceable&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;BooleanExpression&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;isServiceable&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;coupon&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;status&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;wq&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;LIVE&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;and&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;marketing&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;viewCount&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lt&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;markting&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;maxCount&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n209&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무에서 JPA를 사용한다면, 스프링 데이터 JPA를 꼭 사용하자. QueryDSL도 꼭 사용하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n211&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실무 경험 공유&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;i&gt;&lt;u&gt;강의를 진행해주신 김영한님의 실무 경험 입니다.&lt;/u&gt;&lt;/i&gt;&lt;/div&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n212&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;수 조 단위의 정산을 하는데, JPA로 다 처리한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;크리티컬한 결제 같은 시스템도 JPA로 다 처리한다. SpringBoot + JPA + QueryDSL 기본으로 깔고 간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n217&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n218&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA로 실무를 하다 보면, 테이블 중심에서 객체 중심으로 개발 패러다임이 변화된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n219&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n220&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유연한 데이터베이스 변경의 장점과 테스트&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n221&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n222&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n223&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Junit 통합 테스트시에 H2 DB 메모리 모드로 돌려서 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n224&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n225&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로컬 PC에는 H2 DB 서버 모드로 실행한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n226&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n227&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발 운영은 MySQL, Oracle로 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n228&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n229&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 방언을 설정만 바꾸면 가능한 일이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n230&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n231&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 변경 경험(개발 도중 MySQL -&amp;gt; Oracle로 바뀐적도 있다.)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n232&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n233&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테스트, 통합 테스트시에 CRUD를 믿고 간다.(내가 짠 쿼리는 그것 마저 테스트를 거쳐 가야 한다.)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n234&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n235&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n236&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이런거 테스트 할 시간에 CRUD 믿고, 핵심 비즈니스 테스트 코드를 열심히 짜자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n237&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n238&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠르게 에러를 발견할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n239&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n240&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n241&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쿼리 때문에 문제가 발생한적이 한번도 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n242&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n243&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴파일 시점에 대부분 오류를 발견할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n244&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n245&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;늦어도 애플리케이션 로딩 시점에 발견한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n246&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n247&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최소한 뭐리 문법 실수나 오류는 거의 발생하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n248&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n249&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대부분이 비즈니스 로직의 오류이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n250&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;성능&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n251&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n252&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n253&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 자체로 인한 성능 저하 이슈는 거의 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n254&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n255&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;성능 이슈 대부분은 JPA를 잘 이해하지 못해서 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n256&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n257&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n258&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시로딩: 쿼리가 튄다. -&amp;gt; 지연 로딩을 변경한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n259&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n260&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n261&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어노테이션 수정으로 바로 적용 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n262&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n263&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;N + 1 문제 -&amp;gt; 대부분 페치 조인으로 문제를 해결한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n264&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n265&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n266&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 부분, 이부분 페치 조인으로 바꾸자. SQL 베이스로 프로젝트를 짰다면 갈아 엎어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n267&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n268&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하나의 쿼리에 집중해서 성능을 고민하는게 아니라, JPA를 사용해서 빠르게 개발한 다음에&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n269&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n270&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 성능 테스트를 진행하고, 병목이 발생하는 구간들을 찾아서 설정을 빠르게 변경하고 다시 반복해서 성능 테스트 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n271&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생산성&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n272&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n273&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n274&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단순 코딩 시간이 줄어든다. -&amp;gt; 개발 생산성이 향상 된다. -&amp;gt; 잉여 시간이 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n275&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n276&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;비즈니스 로직 작성시 흐름이 끊기지 않는다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n277&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n278&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n279&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL 중심으로 개발하다 보면, 비즈니스 로직 자바로 짜다가 머리의 컨텍스트가 SQL로 스위칭 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n280&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다시 자바로 온다, 다시 SQL로 간다. 병목 발생하고 커피마시러 간다. 야근한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n282&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n283&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;남는 시간에 더 많은 테스트를 작성하고&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n284&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n285&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n286&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;순수 자바 코드가 많아져서 테스트 코드 만들기에 용이하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n287&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n288&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;남는 시간에 기술 공부를 하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n289&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n290&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;남는 시간에 코드에 금칠을 하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n291&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n292&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀원 대부분은 다시는 과거로 돌아가고 싶어하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n293&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n294&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 얘기는 JPA를 잘 공부하고, 잘 알고 프로젝트를 진행 했을 경우 이야기이다. 대부분 잘 모르고 진행하면 JPA를 원망한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n295&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;많이 하는 질문&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n296&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n297&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n298&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORM 프레임워크를 사용하면 SQL과 데이터베이스는 잘 몰라도 되나요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n299&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n300&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n301&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;더 잘 알아야 한다. SQL과 DB를 모르고 ORM을 사용하는건 말이 안된다. 객체와 DB를 잘 알고 그것을 더 편하게 사용하려고 ORM을 사용하는 것이다. 결국 둘 다 잘해야 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n302&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n303&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;성능이 느리지 않나요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n304&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n305&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n306&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;잘 쓰면 최적화 할 수 있는 포인트가 더 많다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n307&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n308&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;통계 쿼리처럼 매우 복잡한 SQL은 어떻게 하나요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n309&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;거의 다 QueryDSL로 처리하고, DTO로 뽑아낸다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정말 안될 경우 네이티브 쿼리 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n314&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n315&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MyBatis와 어떤 차이가 있나요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n316&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n317&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n318&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA를 사용하면서 같이 써도 된다. 다만, flush 같은 이슈 처리들을 잘 고려 해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n319&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n320&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MyBatis는 쿼리를 직접 다 짜야 하지 않나.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n321&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n322&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트 프레임워크를 신뢰할 수 있나요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n323&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n324&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n325&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쿠팡, 배민 거래량이 조단위로 들어가는 회사들에서 기본으로 JPA 깔고 간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n326&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n327&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;제 주위에는 MyBatis(iBatis, myBatis)만 사용하는데요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n328&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n329&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n330&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주변에 JPA 할 줄 아는 사람이 있어야 같이 적용하지, 사실 쿼리중심으로 개발하는 지금의 SI에서는 힘들다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n331&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n332&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;학습 곡선이 높다고 하던데요?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n333&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n334&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n335&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일주일 공부하고 평생 시간 아끼자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n336&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n337&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어려운 포인트는 찾아서 딥하게 공부하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n338&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n339&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시간이 절약되는 만큼 비즈니스 로직을 고민할 수 있는 시간이 늘어난다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n340&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;팀 서버 기술 스택&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n341&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n342&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n343&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Java8&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Frmework(SpringBoot default)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n346&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n347&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA, Hibername&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n348&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n349&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring Data JPA&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n350&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n351&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n352&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n353&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Junit, Spock(Test)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n354&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n355&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n356&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n357&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n358&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n359&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저자 직강 - &lt;/span&gt;&lt;span md-inline=&quot;autolink&quot; class=&quot;md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>QueryDSL</category>
      <category>Spring Data JPA</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/117</guid>
      <comments>https://ict-nroo.tistory.com/117#entry117comment</comments>
      <pubDate>Tue, 30 Apr 2019 00:19:34 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 객체지향 쿼리, JPQL</title>
      <link>https://ict-nroo.tistory.com/116</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/991768355CC2E0F534&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F991768355CC2E0F534&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h1 cid=&quot;n1062&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 객체지향 쿼리&lt;/span&gt;&lt;/h1&gt;&lt;p cid=&quot;n1064&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 매핑과 영속성 컨텍스트 등 앞의 내용들로 기본기를 다졌고, 지금부터는 활용 단계이다.&lt;/span&gt;&lt;/p&gt;&lt;blockquote cid=&quot;n1065&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n1066&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 객체지향 쿼리&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n1067&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-top: 0.8em; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;QueryDSL&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n1068&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 다양한 쿼리 방법을 지원&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1069&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1070&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1071&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPQL&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1072&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1073&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA Criteria&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1074&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1075&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;QuertDSL&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1076&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1077&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;네이티브 SQL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1078&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1079&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n1080&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL 소개&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1081&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1082&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1083&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Java Persistence Query Language&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1084&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1085&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 단순한 조회 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1086&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1087&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1088&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EntityManager.find()&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1089&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1090&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 그래프 탐색&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1091&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1092&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1093&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(a.getB().getC())로 get get get 하면서 계속 찾아다닐 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1094&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1095&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;나이가 18살 이상인 회원을 모두 검색하고 싶다면?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n1096&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1097&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1098&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1099&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA를 사용하면 엔티티 객체를 중심으로 개발&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문제는 검색 쿼리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;검색을 할 때도 테이블이 아닌 엔티티 객체를 대상으로 검색을 해야한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1104&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB를 몰라야 한다. 자바 코드에서 멤버 테이블이 있구나 보다, 멤버 객체가 있구나라고 생각을 가지고 개발해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;근데, 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1109&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1110&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요하다.&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그래서 JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어를 제공한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1113&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1114&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL과 문법이 유사하고, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN등을 지원한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JPQL은 엔티티 객체를 대상으로 쿼리&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 질의하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;SQL은 데이터베이스 테이블을 대상으로 쿼리&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 질의한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ex)&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1121&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//검색&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpql&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;select m From Member m where m.name like '%hello%'&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createQuery&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpql&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;).&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getResultList&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1122&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1123&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위의 JPQL에 의해 변환되어(데이터베이스 방언을 참조해서 DB에 맞는 쿼리로) 실행된 SQL&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1124&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.id&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; id,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; age,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.USERNAME&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; USERNAME,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; TEAM_ID&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  Member m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt;&amp;gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;18&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리라고 이해하면 되며,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1127&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL을 한마디로 정의하면 객체 지향 SQL 이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n1131&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL 문법&lt;/span&gt;&lt;/h2&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1132&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;select_문 :: = &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  select_절&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  from_절&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  [where_절]&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  [groupby_절]&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  [having_절]&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  [orderby_절]&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1133&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;update_문 :: = update_절 [where_절]&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;delete_문 :: = delete_절 [where_절]&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1134&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;몇가지 유의 사항은 존재 한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1137&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1139&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;from절에 들어가는 것은 객체다!&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n1140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;select m from Member m where m.age &amp;gt; 8&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티와 속성은 대소문자를 구분&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1143&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들면, Member 엔티티와 username 필드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL 키워드는 대소문자 구분 안함&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1148&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1149&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SELECT, FROM, where&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 이름을 사용한다. 테이블 이름이 아니다&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1153&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1154&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1155&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티명 Member&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;별칭은 필수이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1158&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member의 별칭 m&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1161&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결과 조회 API&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1162&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1163&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1164&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;query.getResultList()&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1165&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결과가 하나 이상인 경우, 리스트를 반환한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;query.getSingleResult()&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1170&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1171&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1172&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결과가 정확히 하나, 단일 객체를 반환한다.(정확히 하나가 아니면 예외 발생)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1173&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;파라미터 바인딩 &lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1174&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1175&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1176&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웬만하면 이름으로 바인딩하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이름 기준&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1179&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; m &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; Member m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt; m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.username&lt;/span&gt;=:username&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1180&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setParameter&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;username&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;usernameParam&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1181&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1182&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위치 기준&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1183&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; Member m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;where&lt;/span&gt; m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.username&lt;/span&gt;=?1&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1184&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setParameter&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;usernameParam&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1185&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로젝션&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1186&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1187&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1188&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 프로젝션(멤버 조회)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1189&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1190&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1191&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;SELECT m FROM Member m ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 프로젝션(멤버 안에 있는 팀 조회)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1194&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1195&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1196&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;SELECT m.team FROM Member m ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1197&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1198&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단순 값 프로젝션&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1199&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1200&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1201&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hibernate에서 지원을 해서 username, age로 쓸 수 있지만&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1202&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1203&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;공식적으로는 m.username, m.age로 접근해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1204&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1205&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;SELECT m.username, m.age FROM Member m ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1206&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1207&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;new&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 명령어&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1208&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1209&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;단순 값을 DTO로 바로 조회&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1211&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1212&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;new 패키지명, DTO를 넣고 생성자처럼 사용해서 DTO로 바로 반환 받을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;SELECT new jpabook.jpql.UserDTO(m.username, m.age) FROM Member m ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DISTINCT는 중복을 제거 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1217&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페이징 API&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1218&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1219&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1220&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 페이징을 다음 두 API로 추상화 해준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1221&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1222&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회 시작위치(0부터 시작)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1223&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1224&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1225&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;setFirstResult(int startPosition)&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1226&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1227&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회할 데이터 수&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1228&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1229&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;setMaxResults(int maxResult)&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1231&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1232&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페이징 쿼리 예시)&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;ajva&quot; cid=&quot;n1233&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;String jpql = &quot;select m from Member m order by m.name desc&quot;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;List&amp;lt;Member&amp;gt; resultList = em.createQuery(jpql, Member.class)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .setFirstResult(10)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .setMaxResult(20)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  .getResultList();&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1234&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1235&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1236&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 데이터 베이스의 방언이 동작한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1237&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1238&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위 쿼리의 MySQL 방언&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;SQL&quot; cid=&quot;n1239&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.ID&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; ID,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.AGE&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; AGE,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; TEAM_ID,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; NAME&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;BY&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;DESC&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;LIMIT&lt;/span&gt; ?, &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1240&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1241&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위 쿼리의 Oracle 방언&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1242&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; * &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  ( &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; ROW_.*, ROWNUM ROWNUM_&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  ( &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.ID&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; ID,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.AGE&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; AGE,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; TEAM_ID,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;AS&lt;/span&gt; NAME&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;BY&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.NAME&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ) ROW_&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; ROWNUM &amp;lt;= &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;WHERE&lt;/span&gt; ROWNUM_ &amp;gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1243&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;집합과 정렬&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1244&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1245&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1246&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적인 집합 명령어 다 동작 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1247&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;COUNT&lt;/span&gt;(m), &amp;nbsp; //회원수&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  SUM(m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt;), //나이 합&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  AVG(m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt;), //평균 나이&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  MAX(m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt;), //최대 나이&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  MIN(m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt;)  //회소 나이&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; Member m&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1248&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1249&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1250&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;GROUP BY, HAVING&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1251&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1252&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORDER BY&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1253&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조인&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1254&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1255&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1256&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;내부 조인&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1257&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1258&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1259&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버 내부의 팀에 m.team으로 접근&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1260&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; Member m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;[INNER] &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team&lt;/span&gt; t&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1261&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1262&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;외부 조인&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1263&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER m&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;LEFT [OUTER] &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.team&lt;/span&gt; t&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1264&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1265&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;세타 조인&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1266&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1267&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1268&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일명 막(?) 조인이다. 연관관계 상관 없이 유저명과 팀의이름이 같은 경우 찾아라 라는 쿼리 날릴 수 있다. 이런 조인을 세타 조인이라고 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1269&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;COUNT&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;t&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;WHERE&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;m&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;t&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1270&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1271&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;참고:&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1272&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1273&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1274&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트 5.1부터 세타 조인도 외부 조인이 가능!&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1275&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페치 조인&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1276&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1277&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1278&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현업에서 굉장히 많이 쓰인다. fetchType을 LAZY로 다 세팅 해놓고, 쿼리 튜닝할때 한꺼 번에 조회가 필요한 경우 페치 조인을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1279&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1280&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 객체 그래프를 한번에 조회하는 방법이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1281&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;별칭을 사용할 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1283&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1284&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1285&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1286&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1287&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;멤버를 조회할 때, 팀까지 같이 조회한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;select m from Member m join fetch m.team&quot; cid=&quot;n1288&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;select m from Member m join fetch m.team&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1289&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1290&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1291&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; M.*, T.*&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER T&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;INNER &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; TEAM T &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ON&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; = T&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.ID&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1292&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1293&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최근에(jpa2.1)는 페치 조인 말고 엔티티 그래프라는 기능이 있다. 공부해보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1294&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1295&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페치 조인 예시)&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1296&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpql&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;select m from Member m join fetch m.team&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createQuery&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpql&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;).&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getResultList&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; : &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;members&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//페치 조인으로 회원과 팀을 함께 조회해서 지연 로딩이 발생하지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;System&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;out&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;println&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;username = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getUsername&lt;/span&gt;() &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;teamname = &quot;&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;());&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1297&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1298&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현업에서 많이 쓰이는 이유는, 리스트 쭉 뿌릴때. LAZY로 가게 되면 리스트에서 반복문으로 정보 받아올 때마다 DB에 쿼리가 나간다. 이게 JPA N+1 문제이다. 성능상 좋지 않다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1299&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1300&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1301&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리스트가 10명이다. 10명의 리스트를 가져오는 쿼리 한방 나가는데, 세부 조회를 할 때마다(10번) Lazy 로딩 되므로 쿼리가 총 11번 나가게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1302&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1303&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://jojoldu.tistory.com/165&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA N+1 문제와 해결방안&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1304&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기타&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1305&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1306&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1307&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서브 쿼리 지원&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1308&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1309&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EXISTS, IN&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1310&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1311&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BETWEEN, LIKE, IS NULL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1312&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPQL 기본 함수&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1313&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1314&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1315&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CONCAT&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1316&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1317&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SUBSTRING&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1318&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1319&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TRIM&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1320&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1321&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;LOWER, UPPER&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1322&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1323&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;LENGTH&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1324&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1325&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;LOCATE&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1326&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1327&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ABS, SQRT, MOD&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1328&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1329&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SIZE, INDEX(JPA 용도)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1330&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CASE 식&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1331&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1332&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1333&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본 CASE 식&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1334&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  case when m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &amp;lt;= &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt; then &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'학생요금'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; when m&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.age&lt;/span&gt; &amp;gt;= &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;60&lt;/span&gt; then &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'경로요금'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'일반요금'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  end&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; Member m&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1335&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1336&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단순 CASE 식&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n1337&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;select&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  case t&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.name&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;  when &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'팀A'&lt;/span&gt; then &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'인센티브110%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;  when &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'팀B'&lt;/span&gt; then &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'인센티브120%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;  else &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'인센티브105%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  end&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; Team t&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1338&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용자 정의 함수 호출&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1339&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1340&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1341&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트는 사용전 방언에 추가해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1342&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1343&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에 커스텀 펑션 만든 후 사용&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1345&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;function&lt;/span&gt; (&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'group_concat'&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;) &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Item&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n1348&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Named 쿼리 - 정적 쿼리&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1352&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;미리 정의&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해서 이름을 부여해두고 사용하는 JPQL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1358&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1356&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어노테이션, XML에 정의&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1361&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1359&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 로딩 시점에 초기화 후 재사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1364&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1362&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 로딩 시점에 쿼리를 검증&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1370&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1368&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어노테이션 예시)&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1372&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@NamedQuery&lt;/span&gt;(&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Member.findByUsername&quot;&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;select m from Member m where m.username = :username&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;vlass&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n1375&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;List&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;resultList&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createNamedQuery&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;Member.findByUsername&quot;&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setParameter&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;username&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;회원1&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getResultList&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1383&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1384&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;왜 굳이 엔티티에 네임드 쿼리 쓰나? 그냥 찾을 때 쓰는거랑 똑같지 않을까?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1388&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1387&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1385&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;em.createQuery()안에 넣어서 그냥 사용할 수 있다. 하지만 큰 위험이 따른다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1391&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1389&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문자열 자체이기 때문에 에러 포인트가 많다. 근데, 사용자 요청 오기 전까지 쿼리가 실행되지 않으니까 모른다. 그제서야 안다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1394&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1392&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;근데 Named쿼리는 애플리케이션 로딩 시점에 쿼리를 파싱한다. 그래서 배포하기 전에 문제를 잡을 수 있다. 아니, 개발하면서 띄워 보기만해도 잡을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1402&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1400&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring-Data-JPA를 사용할 때 @Query 어노테이션이 이 Named쿼리로 동작하게 된다. 그래서 스프링 애플리케이션 올라갈때 바로 에러를 잡을 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1405&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1403&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;런타임 에러는 정말 위험하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1398&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1399&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;XML에도 정의를 할 수 있다. 필요하면 알아보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1409&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1407&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Named 쿼리 환경에 따른 설정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1413&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1412&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1410&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;XML이 항상 우선권을 가진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1416&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1414&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 운영 환경에 따라 다른 XML을 배포할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n1419&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n1420&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1421&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1422&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n1423&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n1424&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저자 직강 - &lt;/span&gt;&lt;span md-inline=&quot;autolink&quot; class=&quot;md-link md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>JPQL</category>
      <category>ORM</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/116</guid>
      <comments>https://ict-nroo.tistory.com/116#entry116comment</comments>
      <pubDate>Fri, 26 Apr 2019 19:45:16 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 필드와 컬럼 매핑</title>
      <link>https://ict-nroo.tistory.com/113</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ED83485CBDA80C05&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ED83485CBDA80C05&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&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;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 필드와 컬럼 매핑&lt;/span&gt;&lt;/h1&gt;&lt;h2 cid=&quot;n2&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 스키마 자동 생성하기&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n3&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n4&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DDL을 애플리케이션 실행 시점에 자동 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n6&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n7&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블 중심 -&amp;gt; 객체 중심으로 이동한 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;이렇게 생성된 DDL은 개발 장비에서만 사용&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n12&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n13&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n14&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n15&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hibernate.hbm2ddl.auto&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n16&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n17&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n18&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;create&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n19&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n20&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n21&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존 테이블 삭제 후 다시 생성(DROP + CREATE)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n22&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n23&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;create-drop&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n24&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n25&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n26&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;create와 같으나 종료시점에 테이블 DROP(테스트에서 사용하면 도움됨)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n27&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n28&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;update&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n29&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n30&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n31&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;변경분만 반영(운영DB에는 사용하면 안됨)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n32&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n33&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;validate&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n34&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티와 테이블이 정상 매핑되었는지만 확인&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n37&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n38&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;none&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n39&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n40&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용하지 않음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n42&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 스키마 자동 생성하기 주의&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n44&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n45&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n46&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;운영 장비에는 절대 create, create-drop, update 사용하면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n47&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n48&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발 초기 단계는 create 또는 update&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테스트 서버는 update 또는 validate&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스테이징과 운영 서버는 validate 또는 none&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n53&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n54&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n55&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웬만하면 쓰면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n56&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;매핑 어노테이션&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n57&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스에 어떤식으로 매핑할지를 결정하는 철저히 매핑정보에 관련된 어노테이션들이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n58&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Entity&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Id&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Lond&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Column&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;USERNAME&quot;&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;age&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Temporal&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;TemporalType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;TIMESTAMP&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Date&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;regDate&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;@Enumerated&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EnumType&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;STRING&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;MemberType&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberType&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n59&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Column&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n62&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Column(name = &quot;USERNAME&quot;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n65&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n66&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;name&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n67&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;필드와 매핑할 테이블의 컬럼 이름&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;insertable, updatable&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n72&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TRUE/FALSE 설정. 읽기 전용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;nullable&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n77&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n78&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n79&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;null 허용여부 결정, DDL 생성시 사용(not null 추가)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;unique&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n82&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n83&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n84&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유니크 제약 조건, DDL 생성시 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n85&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n86&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;columnDefinition, length, precision, scale(DDL)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Temporal&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n89&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Temporal(TemporalType.TIMESTAMP)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시간과 관련된 매핑&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n94&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Date 뿐만아니라 자바8에서 지원하는 LocalDatetime도 지원한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Enumerates&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n98&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n99&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n100&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Enumerated(EnumType.STRING)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n101&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n102&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바의 Enum 타입 매핑을 지원한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현업에서는 EnumType을 무조건 STRING으로 지정 해야한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n105&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n106&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본 값인 ORDINAL로 설정하면 Enum 순서로 숫자가 매핑되는데, Enum 중간에 필드가 하나 추가 되면 다 꼬이게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Lob&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n109&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컨텐츠의 길이가 너무 길 경우 바이너리 파일로 DB에 바로 밀어 넣어야 하는데, 보통 이런 경우에 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n112&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n113&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;공통적으로 @Lob으로 사용하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n114&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n115&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CLOB, BLOB 매핑&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n117&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CLOB : String, char[], java.sql.CLOB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n118&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n119&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;BLOB : byte[], java.sql.BLOB&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n120&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n121&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Transient&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n122&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 필드는 매핑하지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션에서 DB에 저장하지 않는 필드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n127&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웬만하면 쓰지 않는 것이...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n129&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;식별자 매핑 어노테이션&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n130&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n131&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n132&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;식별자 매핑 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n133&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n134&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n135&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Id(직접 매핑)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n136&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n137&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@GeneratedValue(strategy = GenerationType.[&lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;타입&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;])&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n138&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n139&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;타입 설정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;IDENTITY&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n143&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스에 위임, MYSQL&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SEQUENCE&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n148&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n149&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 시퀀스 오브젝트 사용, ORACLE&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@SequenceGenerator 필요&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TABLE&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n155&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;키 생성용 테이블 사용, 모든 DB에서 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n158&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n159&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@TableGenerator 필요&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n160&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n161&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AUTO&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n162&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n163&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n164&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;방언에 따라 자동 지정, 기본값&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n165&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;권장하는 식별자 전략&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n166&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n167&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n168&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본 키 제약 조건&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n169&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n170&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n171&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;null 아님, 유일, 변하면 안된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n172&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n173&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;미래까지 이 조건을 만족하는 자연키는 찾기 어렵다. 대리키(대체키)를 사용하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n174&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n175&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들어 주민등록번호도 기본 키로 적절하지 않다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n176&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주민번호를 PK로 설정하고 다른 테이블과 FK 참조시 그대로 주민번호가 넘어간다. 갑자기 나라에서 개인정보 목적으로 &quot;DB에 주민번호 저장하지 마라&quot;라고 한다. 헬게이트 오픈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n179&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n180&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;권장&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n181&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n182&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n183&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Long + 대체키 + 키 생성전략 사용&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n184&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n185&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대체키는 전혀 비즈니스랑 관계없는 키.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n186&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n187&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AUTO_INCREMENT로 숫자로 PK를 사용하면, int쓰면 안된다. 생각보다 금방 끝난다..&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n188&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n189&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Long 타입으로.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n190&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n191&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n194&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n195&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저자 직강 - &lt;/span&gt;&lt;span md-inline=&quot;autolink&quot; class=&quot;md-link md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>ORM</category>
      <category>매핑</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/113</guid>
      <comments>https://ict-nroo.tistory.com/113#entry113comment</comments>
      <pubDate>Mon, 22 Apr 2019 20:40:14 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 기초와 매핑</title>
      <link>https://ict-nroo.tistory.com/112</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99ECA84B5CBDA79C32&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99ECA84B5CBDA79C32&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 기초와 매핑&lt;/span&gt;&lt;/h1&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n2&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n3&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hello JPA&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA에서는 크게 중요한게 두가지가 있다. 첫번째는 객체와 관계형 데이터베이스를 중간에서 매핑하는 과정, 즉 설계 과정이 있고, 두번째는 JPA가 어떤 방식으로 동작하는지(영속성 컨텍스트)이며 이 두가지에 대해 이해 하는 것이 중요하다.&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n6&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;H2&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n7&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;http://www.h2database.com&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;http://www.h2database.com&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최고의 실습용 DB, 가볍다(1.5MB)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n12&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n13&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹용 쿼리툴 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n14&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n15&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MySQL, Oracle 데이터베이스 시뮬레이션 기능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n16&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n17&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Sequence, AUTO INCREMENT 기능 지원&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n18&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 매핑하기&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n19&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n20&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n21&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Entity&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n22&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n23&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n24&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 관리할 객체, 엔티티라고 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n25&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n26&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Id&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n27&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB PK와 매핑할 필드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n30&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;persistence.xml&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n31&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n32&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n33&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;jpa 설정 파일&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;/META-INF/persistence.xml 위치&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;javax.persistence로 시작 : JPA 표준 속성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hibername로 시작 : 하이버 네이트 전용 속성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;xml&quot; cid=&quot;n40&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;&amp;lt;?xml&lt;/span&gt; &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;persistence&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;xmlns&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;http://xmlns.jcp.org/xml/ns/persistence&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;version&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;2.2&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;persistence-unit&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;properties&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;&amp;lt;!-- 필수 속성--&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;javax.persistence.jdbc.driver&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;org.h2.driver&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;javax.persistence.jdbc.user&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;sa&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;javax.persistence.jdbc.password&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;javax.persistence.jdbc.url&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;jdbc:h2:tcp://localhost/~/test&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hibernate.dialect&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;org.hibernate.dialect.H2Dialect&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;&amp;lt;!-- 옵션 --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hibernate.show_sql&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hibernate.format_sql&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hibernate.use_sql_comments&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;property&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;name&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hibernate.id.new_generator_mappings&quot;&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;value&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;properties&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;persistence-unit&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;persistence&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n41&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n42&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;dialect는 데이터베이스 방언이라는 뜻인데,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n44&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 방언&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n45&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 특정 데이터베이스에 종속적이지 않은 기술&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;각각의 데이터베이스가 제공하는 SQL 문법과 함수는 조금씩 다르다&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n50&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가변 문자 : MySQL은 VARCHAR, Oracle은 VARCHAR2&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문자열을 자르는 함수 : SQL 표준은 SUBSTRING(), Oracle은 SUBSTR()&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;페이징 : MySQL은 LIMIT, Oracle은 ROWNUM&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;방언 : SQL 표준을 지키지 않거나 특정 데이터베이스 만의 고유한 기능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n59&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n60&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Dialect를 사용하면 각 DB에 맞는 SQL을 생성해 준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hibernate.dialect 속성에 지정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n63&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n64&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n65&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;H2 : org.hibernate.dialect.H2Dialect&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Oracle 10g : org.hibernate.dialect.Oracle10gDialect&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n68&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n69&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MySQL : org.hibernate.dialect.MySQL5InnoDBDialect&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트는 45가지 방언을 지원&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/04_jpa_dialect.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 776px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/04_jpa_dialect.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n73&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 개발&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n74&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저 팩토리 설정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n77&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n78&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n79&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Persistence를 통해서 xml설정을 읽고, EntityManagerFactory를 만들어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션 단위로 기능을 만들때 항상 엔티티 매니저를 새로 만들어야 한다. EntityManagerFactory를 통해서 만든다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/05_jpa_entity_manager.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 776px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/05_jpa_entity_manager.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n83&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저 설정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n88&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n89&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비즈니스 로직(CRUD)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;주의할 점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n92&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n93&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n94&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저 팩토리는 하나만 생성해서 애플리케이션 전체에서 공유&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 매니저는 쓰레드간에 공유하면 안된다(사용하고 버려야 한다.)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA의 모든 데이터 변경은 트랜잭션 안에서 실행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n99&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;package&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;basic&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;basic&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;entity&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;javax&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persistence&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManager&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;javax&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persistence&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManagerFactory&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;javax&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persistence&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityTransaction&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;javax&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persistence&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Persistence&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Main&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;main&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt;[] &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManagerFactory&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;entityManagerFactory&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Persistence&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createEntityManagerFactory&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hello&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityManager&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;entityManagerFactory&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;createEntityManager&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;EntityTransaction&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTransaction&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;begin&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;try&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setId&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;100L&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setName&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;name&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;catch&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Exception&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;e&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tx&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;rollback&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;finally&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;close&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;entityManagerFactory&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;close&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h2 cid=&quot;n100&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n101&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저자 직강 - &lt;/span&gt;&lt;span md-inline=&quot;autolink&quot; class=&quot;md-link md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>mapping</category>
      <category>ORM</category>
      <category>매핑</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/112</guid>
      <comments>https://ict-nroo.tistory.com/112#entry112comment</comments>
      <pubDate>Mon, 22 Apr 2019 20:39:20 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] ORM과 JPA 소개, SQL 중심적인 개발의 문제점</title>
      <link>https://ict-nroo.tistory.com/111</link>
      <description>&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: 200px;  height: auto; max-width: 100%;&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/cfile/tistory/99F6FE425CBDA74309&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F99F6FE425CBDA74309&quot; width=&quot;200&quot; height=&quot;200&quot; filename=&quot;jpa.jpg&quot; filemime=&quot;image/jpeg&quot;/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA Intro&lt;/span&gt;&lt;/h1&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n2&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n3&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL  중심적인 개발의 문제점&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n5&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n6&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 소개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 cid=&quot;n7&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1. SQL 중심적인 개발의 문제점&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n8&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현재 데이터베이스 세계의 헤게모니를 관계형 DB가 가지고 있다(Oracle, MySQL, ...). 객체를 관계형 DB에 관리하고 있다는 이야기이다. 관계형 DB를 사용하려면 SQL을 짜야한다. 계속. SQL 중심적인 개발을 하게되면 아래와 같은 문제점이 있다.&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n9&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;무한 반복, 지루한 코드&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n10&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n11&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n12&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 CRUD(insert, update, select, delete)&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n13&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n14&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INTO&lt;/span&gt; MEMBER(MEMBER_ID, NAME) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;VALUES&lt;/span&gt; ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; MEMBER_ID, NAME &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;UPDATE&lt;/span&gt; MEMBER &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SET&lt;/span&gt; ...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n15&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n16&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기획자가 tel 정보를 추가하자고 한다. 그렇다면 전개는?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n17&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n18&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n19&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member 객체에 필드를 하나 추가하게되고, 모든 쿼리에 tel 정보를 추가해야 된다. &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;모든!&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 쿼리에..&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n20&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;tel&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n21&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INTO&lt;/span&gt; MEMBER(MEMBER_ID, NAME, TEL) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;VALUES&lt;/span&gt; ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; MEMBER_ID, NAME, TEL &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;UPDATE&lt;/span&gt; MEMBER &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SET&lt;/span&gt; ... TEL =&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;?&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n22&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;엔티티 신뢰 문제&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n23&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드를 객체 지향적으로 짰다고 가정하고, MemberDAO에서 member를 하나 꺼내왔다고 하자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 멤버의 팀과 주문정보, 그 주문정보의 배송지 정보를 getter로 가져오려고 하는 건 자연스러운 생각이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, 해당 member가 팀과 주문과 배송지 정보를 가지고 있다고 보장되지 않는 이상 이렇게 코드를 짤 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n30&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n31&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DAO의 코드를 까서 팀과 주문정보 주문에 대한 배송지 정보들을 쿼리로 정말 가져오는지 눈으로 확인해봐야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n32&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n33&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;계층형 아키텍처(controller, domain, service등의 계층형 구조)의 진정한 의미의 계층 분할이 어렵다는 이야기이다. 즉, 물리적으로는 분리되어 있지만 논리적으로는 전혀 분할되어 있지 않다는 이야기 이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결과적으로 어떤 쿼리를 짜느냐에 따라 비즈니스 로직에 영향을 주기 때문에 SQL 의존적인 개발을 피하기 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n36&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;memberService&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;process&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberDAO&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;();&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//???&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getOrder&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getDelevery&lt;/span&gt;();&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//???&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n37&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;패러다임의 불일치&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n38&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 vs 관계형 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n41&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n42&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;관계형 데이터베이스&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;는 철저히 '데이터를 어떤식으로 잘 저장할까'에 포커스가 맞춰져있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;는 데이터 저장이 아니라 '어떻게 더 추상화하고 관리를 잘 할까'가 더 중요하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;우리는 포커스가 다른 두 가지를 억지로 맵핑해서 일을 처리해야하기 때문에 그 사이에서 많은 시간을 보내고 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체를 영구 보관하는 다양한 저장소&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n50&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n51&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n52&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Object -&amp;gt; RDB, NoSQL, File 등 객체를 저장할 수 있는 방법이 많이 있지만,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n53&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현실적인 대안은 관계형 데이터베이스이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체를 관계형 DB에 저장하려면 객체를 SQL로 바꾼다. (개발자가, 한땀한땀)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n57&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발자가 SQL 매퍼의 일을 너무 많이 하고 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n60&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체와 관계형 데이터베이스의 차이&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n61&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n62&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n63&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;상속&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n64&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n65&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n66&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 상속 관계&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n67&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n68&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Table 슈퍼타입 서브타입 관계&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n69&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n70&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n71&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n72&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n73&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체는 참조를 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n74&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;member.getTeam()&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 연관관계에는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;방향성이 있다&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;. 멤버에서 팀을 조회할 수 있지만, 팀에서 멤버조회는 불가하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n79&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member의 필드는 id, Team, username&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Team의 필드는 id, name 이라고 가정.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블은 외래 키를 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n86&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n87&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n88&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JOIN ON M.TEAM_ID = T.TEAM_ID&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n89&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n90&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n91&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MEMBER 테이블&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n92&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n93&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n94&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MEMBER_ID(PK)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TEAM_ID(FK)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;USERNAME&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n99&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n100&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TEAM 테이블&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n101&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;TEAM_ID(PK)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NAME&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n106&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n107&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MAEMBER와 TEAM은 N:1 관계&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블의 외래키에는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;방향성이 없다&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;. 멤버랑 팀 조인가능, 팀과 멤버 조인가능.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 때, 위의 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;테이블 설계에 맞추어 객체를 모델링&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하게 되면 아래와 같이 FK를 그대로 필드로 포함하게 된다. 하지만, Member클래스에 Team 객체가 존재하는 것이 더 객체지향적이다 라고 할 수 있다. FK의 값을 넣는것 보단.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n112&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//MEMBER_ID 컬럼&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;teamId&lt;/span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//TEAM_ID FK 컬럼&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//USERNAME 컬럼&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n113&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n114&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 설계된 객체를 테이블에 저장 한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n117&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n118&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n119&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블 설계에 맞추어 객체를 모델링해서 INSERT 쿼리를 짠다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n120&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INTO&lt;/span&gt; MEMBER(MEMBER_ID, TEAM_ID, USERNAME) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;VALUES&lt;/span&gt; ...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나, &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체다운 모델링&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에서는 아래와 같이 Team이라는 객체 자체를 포함하고 있어서 Member객체에서 Team을 바로 접근할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n123&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Member&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//참조로 연관관계를 맺는다&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;username&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n124&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Team&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;Long&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;id&lt;/span&gt;; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// TEAM_ID PK 사용&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// NAME 컬럼 사용&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n125&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테이블에 저장할 때에는 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;member.getTeam().getId()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 Id를 조회해서 넣었다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n128&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INSERT&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;INTO&lt;/span&gt; MEMBER(MEMBER_ID, TEAM_ID, USERNAME) &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;VALUES&lt;/span&gt; ...&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n129&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n130&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러나, 조회를 하려고 하면…. 헬게이트 오픈이다. 먼저 멤버와 팀을 조인해 놓고 팀을 조회할 준비를 한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n131&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; M.*, T.*&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; TEAM T &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ON&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; = T&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n132&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n133&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에서 조회해서 객체에 넣으려면.. &lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n134&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Strubg&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// SQL 실행하고&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// DB에서 조회한 회원 관련 정보를 모두 입력하고&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// DB에서 조회한 팀 관련 정보를 모두 넣고,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 회원과 팀 관계 설정&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만…. 선배들은 member와 team의 정보를 모두 가지고 있는 member_team DTO를 가지고,  위와같이 복잡하게 연관관계 매핑을 하지않고 한방 쿼리를 날리면서 작업을 한다...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체 그래프 탐색&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n139&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n140&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n141&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체는 자유롭게 객체 그래프를 탐색할 수 있어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n142&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n143&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n144&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들면, member.getTeam(), member.getOrder(), member.getOrder().getOderItem() 할 수 있어야 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n146&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에서는 멤버와 팀 멤버와 오더 서로 조회를 할 수 있다. 하지만, 서비스 로직에서는 못한다. 왜? 처음에 쿼리에 넣어놓지 않아서 가져오지 않았기 때문에.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n147&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n148&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;핵심은 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;처음 실행하는 SQL에 따라 탐색 범위가 결정&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;된다는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n149&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; M.*, T.*&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; MEMBER M&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; TEAM T &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ON&lt;/span&gt; M&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt; = T&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.TEAM_ID&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n150&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//OK&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getOrder&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//NULL&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래와 같은 서비스 로직을 짤 때, 내가 DAO를 작성하지 않았다고 생각하면 헬게이트 오픈. memberDAO가 member를 어떻게 가져오느냐 눈으로 확인해야된다. NPE 여지가 다분하다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n153&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemeberService&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  ...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;process&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  &lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberDAO&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;(); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//???&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getOrder&lt;/span&gt;().&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getDelivery&lt;/span&gt;(); &amp;nbsp; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//???&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n154&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n155&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이런식의 해결법도 있긴 하다. &lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n156&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n157&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n158&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;경우의 수를 다 파악해서 DAO에 메소드를 다 만들어 놓는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member만 조회, Member와 Team 조회, Order까지 조회 등&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n161&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이게 맞을까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n163&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n164&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비교하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n165&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에서 조회해오면 JDBC 접근로직 타고 new로 생성하니까 당연히 다르다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n168&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;100&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberDAO&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getMember&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberDAO&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getMember&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//다르다&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n169&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;MemberDAO&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getMember&lt;/span&gt;(&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sql&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;SELECT * FROM MEMBER WHERE MEMBER_ID = ?&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  &lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// JDBC API, SQL 실행&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;(...);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n170&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n171&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비교하기 - 자바 컬렉션에서 조회&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n172&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n173&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n174&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그런데, 자바 컬렉션에서 조회한다고 가정해보면 두 멤버는 같은 멤버이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n175&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;100&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;list&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;list&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//같다.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위의 비교를 통해 둘간의 패러다임 차이를 느낄 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;결론적으로 객체답게 모델링 할수록 매핑 작업만 늘어나게 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n182&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n183&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이에 대한 고민에 의해 자바진영에는 JPA라는 것이 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n184&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2.  JPA?&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n185&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n186&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n187&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Java Persistence API&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n188&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n189&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 진영의 ORM 기술 표준&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n190&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORM&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n191&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Object-relational mapping(객체 관계 매핑)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n194&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n195&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n196&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체와 RDB를 어떻게 매핑할까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n197&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n198&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체는 객체대로 설계&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n199&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n200&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;관계형 데이터베이스는 관계형 데이터베이스대로 설계&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n201&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n202&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORM 프레임워크가 중간에서 매핑&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n203&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n204&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대중적인 언어에는 대부분 ORM 기술이 존재&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n205&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA의 동작 지점&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n206&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n207&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n208&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 애플리케이션과 JDBC 사이에서 동작한다. JDBC API 와 DB 사이에 있기 때문에 가운데서 대신 무언가를 해준다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n209&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/01_extends.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 746px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/01_extends.PNG?raw=true&quot; alt=&quot;&quot; title=&quot;&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n210&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n211&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;저장&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n212&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위의 상속관계에서 Album 객체를 저장한다고 생각해보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;INSERT 쿼리가 두번 만들어져서 날라간다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n217&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n218&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n219&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;INSERT INTO ITEM ...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n220&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n221&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;INSERT INTO ALBUM ...&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n222&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n223&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA persistant 객체에 Album 객체 저장하면. 알아서 INSERT 쿼리 두개 만들어서 넣는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n224&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n225&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단순하게 INSERT 쿼리 두벌 만들어서 DB에 넣는게 아니라 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;패러다임의 불일치 자체를 해결&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n226&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n227&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;알아서 두개 클래스에 다 넣어준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n228&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n229&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예)&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/02_jpa_save.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 716px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/02_jpa_save.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n231&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n232&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;조회&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n233&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n234&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n235&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA를 통해서 Album 객체를 조회하게 되면, Item과 Album객체를 이쁘게 조인 쿼리를 날려서 가져오고, Album 객체를 반환한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n236&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n237&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예)&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n238&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/03_jpa_find.PNG?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 716px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Jpa/tacademy/img/03_jpa_find.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n239&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 소개&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n240&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n241&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n242&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예전에 상용 WAS를 사용하던 시절 WAS 1대당 수천만원을 호가했고, 두대정도 깔고 클러스터링 하면 5-6천만원씩 주고 서버를 구성했다. 거기에 EJB라는 기능이 들어있었는데, EJB의 엔티티 빈(자바 표준)이라는 JPA의 초창기 버전이 있었다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n243&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n244&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 엔티티 빈의 문제가 너무 많았다. 너무 코드가 지저분하고, API도 너무 복잡하고, 성능도 나빴다. EJB가 너무 문제가 많아서 개빈 킹이 오픈소스 ORM 프레임워크 하이버네이트를 출시했고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n245&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n246&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EJB 엔티티 빈의 사용자들이 다 넘어가면서 하이버네이트가 득세를 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n247&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n248&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그 후에 자바진영에서 자바 표준 JPA를 만들었는데, 개빈 킹을 데려와서 만들었다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n249&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n250&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 사실상 인터페이스만 있다. 구현은 각 기업이 하는거고, 그 중에서 오픈소스인 하이버네이트 같은 구현체들이 존재하는 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n251&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n252&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 표준화를 거치면서 수 많은 커뮤니티의 용어 등 애매한 것들을 정리하면서 표준을 만들었다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n253&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n254&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 표준 명세이며&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n255&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n256&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n257&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인터페이스의 모음이다&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n258&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n259&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA 2.1 표준 명세를 구현한 3가지 구현체&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n260&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n261&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n262&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하이버네이트, EclipseLink, DataNubleus&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n263&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n264&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 시기에 EJB에 대한 회의감을 느낀 사람이 한명 더 있었는데, Spring 프레임워크를 만든 로드 존슨이다. Spring과 하이버네이트가 득세를 하면서 해외에서는 거의 두가지가 기술 표준이 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n265&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n266&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;국내에서는 아쉽게도 Spring을 쓰면서 iBatis/myBatis가 득세를 하게 된다.  5-6년전에 국내에만 90% 사용률을 보였고, 해외해서는 JPA 사용률이 90%였다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n267&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA를 왜 사용해야 하는가?&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n268&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n269&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n270&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SQL 중심적인 개발에서 객체 중심으로 개발&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n271&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n272&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생산성&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n273&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n274&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n275&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 CRUD&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n276&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n277&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n278&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저장 &lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n279&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n280&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n281&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;jpa.persist(member)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n282&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n283&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n284&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n285&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n286&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Member member = jpa.find(memberId)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n287&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n288&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;수정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n289&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n290&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n291&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;member.setName(&quot;변경할 이름&quot;)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n292&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n293&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션이 끝나는 시점에 변경된 내용 찾아서 DB에 넣어준다. 뒤에서 보자.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n294&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n295&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;삭제&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n296&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n297&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n298&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;jpa.remove(member)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n299&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n300&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유지보수&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n301&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n302&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n303&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존에는 필드 변경시 모든 SQL을 수정한다. insert, select, update에 모두&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n304&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n305&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, JPA는 필드만 추가하면 된다. SQL은 JPA가 처리한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n306&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n307&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;패러다임의 불일치 해결&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n308&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n309&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n310&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 상속&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n311&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저장&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n314&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n315&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n316&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발자가 할 일&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n317&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n318&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n319&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;jpa.persist(album);&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n320&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n321&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;나머진 JPA가 처리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n322&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n323&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n324&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;INSERT INTO ITEM ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n325&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n326&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;INSERT INTO ALBUM ...&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n327&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n328&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;조회&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n329&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n330&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n331&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발자가 할 일&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n332&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n333&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n334&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); vertical-align: initial; border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 2px; font-size: 0.9em;&quot;&gt;Album album = jpa.find(Album.class, albumId);&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n335&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n336&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;나머진 JPA가 처리&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;sql&quot; cid=&quot;n337&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;SELECT&lt;/span&gt; I.*, A.*&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;FROM&lt;/span&gt; ITEM I&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;JOIN&lt;/span&gt; ALBUM A &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;ON&lt;/span&gt; I&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.ITEM_ID&lt;/span&gt; = A&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;.ITEM_ID&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n338&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n339&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 연관관계&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n340&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n341&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n342&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연관관계 저장&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n343&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setTeam&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpa&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 객체 그래프 탐색&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n346&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpa&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt;.&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;class&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n347&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n348&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n349&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뭔가 이상하지 않은가?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n350&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n351&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;member만 가져왔는데 어떻게 team이 조회가 되지? NPE 날 것 같은데?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n352&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n353&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇게 예측할 수 있다. JPA가 멤버랑 팀이랑 한방쿼리로 조인해서 가져오나보다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;근데 테이블 50개 연관되어있다. 50개 다 조인해서 가져올까?&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n356&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n357&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;그렇지 않다. 아주 우아한 방법으로 동작을 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n358&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n359&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;먼저 답을 말하면 getTeam()은 가능하다. 가져올 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n360&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n361&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;방법은 이렇다. member.getTeam()할 때, 정확히 말하면 가져온 team을 사용하는 시점에 team이 가져와져 있지 않으면 그때 가져온다. 팀만 조회하는 쿼리를 날려서. 이것을  &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;LazyLoding&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 이라고 표현한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n362&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n363&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;쿼리 두번 나가잖아요! 라고 할 수 있는데, 이게 싫다면 설정을 통해서 한번에 가져오는 쿼리를 날릴 수도 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n364&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n365&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이렇기 때문에 신뢰할 수 있는 엔티티 계층이 생기게 된다. member.getTeam(), member.getOrder().getDelevery()를 이용해 자유롭게 객체 그래프를 탐색할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n366&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n367&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 비교하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n368&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n369&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n370&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA는 동일 트랜잭션에서 조회한 엔티티는 같음을 보장한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n371&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;100&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpa&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;jpa&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member2&lt;/span&gt;; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//같다.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n372&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n373&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA를 사용하는 코드를 보면 자바 컬렉션을 사용하는 느낌을 받을 수 있는데, 그게 JPA의 컨셉이다. 나머지는 JPA가 해주겠다는 의미이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n374&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n375&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA의 성능 최적화 기능&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n376&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n377&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n378&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA가 JDBC API와 DB사이에 존재하므로 가운데에 계층이 추가되서 느리지 않을까? 라고 생각할 수 있지만, 반대로 중간에 있으면 할 수 있는게 많다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n379&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n380&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n381&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1차 캐시와 동일성(identity) 보장&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n382&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n383&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n384&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA와 비교하기의 코드에서 jpa.find()가 두번 일어나는데, JPA는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;같은 트랜잭션에서&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 두번째 find는 1차 캐시에서 가져온다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n385&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n386&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션을 지원하는 쓰기 지연(transactional write-behind)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n387&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n388&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n389&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트랜잭션을 커밋할 때까지 INSERT SQL을 모음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n390&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n391&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;JDBC BATCH SQL&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 기능을 사용해서 한번에 SQL 전송&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n392&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n393&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n394&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모으지 않으면 네트워크 3번 타고, 쿼리를 3번 날린다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n395&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transcation&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;begin&lt;/span&gt;(); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//트랜잭션 시작&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;em&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;persist&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberA&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//여기까지 insert SQL을 DB에 보내지 않는다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//커밋하는 순간 DB에 SQL 모아서 보낸다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;transction&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n396&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n397&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지연 로딩(Lazy Loading)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n398&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n399&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n400&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지연로딩 : &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체가 실제 사용될 때&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 로딩&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n401&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberDAO&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// SELECT * FROM MEMBER&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;teamName&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;(); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//SELECT * FROM TEAM&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n402&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n403&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉시로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; cid=&quot;n404&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 4px 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Member&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberDAO&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;find&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;memberId&lt;/span&gt;); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// SELECT ... FROM MEMBER JOIN TEAM ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Team&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;member&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getTeam&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85);&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;teamName&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;team&lt;/span&gt;.&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getName&lt;/span&gt;();&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n405&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n406&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ORM은 객체와 RDM 두 기둥위에 있는 기술이다&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n407&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n408&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n409&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체도 잘 다뤄야 하고, RDB도 정말 잘 다뤄야 한다. 실제 현업에서 90% 이상 장애는 DB에서 난다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n410&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n411&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;JPA로 개발하더라도 쿼리가 눈에 다 보여야 한다. 실제로 JPA는 정말 복잡한 쿼리가 아닌 심플한 쿼리들이 나간다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n412&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n413&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n414&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n415&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바 ORM 표준 JPA 프로그래밍&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n416&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n417&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-p&quot; style=&quot;box-sizing: border-box; line-height: inherit; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;저자 직강 - &lt;/span&gt;&lt;span md-inline=&quot;autolink&quot; class=&quot;md-link md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.youtube.com/watch?v=WfrSN9Z7MiA&amp;amp;list=PL9mhQYIlKEhfpMVndI23RwWTL9-VL-B7U&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/JPA</category>
      <category>JPA</category>
      <category>ORM</category>
      <category>SQL</category>
      <category>패러다임 불일치</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/111</guid>
      <comments>https://ict-nroo.tistory.com/111#entry111comment</comments>
      <pubDate>Mon, 22 Apr 2019 20:35:09 +0900</pubDate>
    </item>
    <item>
      <title>AWS SUMMIT SEOUL 2019 2일차(04/18) 참관기</title>
      <link>https://ict-nroo.tistory.com/110</link>
      <description>&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;국내에서 매년 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;열리는 AWS 행사중 가장 규모가 큰 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;AWS SUMMIT 2019&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;두번째 날 행사에 &lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;다녀왔습니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;매년 참석자가 폭증하는 느낌 인데요. 세션 이동중 찍은 사진인데 정말정말 사람이 많았습니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;엑스포 규모와 이벤트&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;도 거대했구요. 이정도 스케일의 행사를 &lt;/span&gt;&lt;span style=&quot;font-size:12pt;&quot;&gt;진행하는 AWS측의&lt;/span&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;&amp;nbsp;능력도 인정해줘야 할 것 같습니다.&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: 14.6667px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-size: 12pt;&quot;&gt;제가 들은 세션중 일부 내용을 공유합니다.&lt;/span&gt;&lt;/i&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/996994445CB9457306&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F996994445CB9457306&quot; width=&quot;820&quot; height=&quot;615&quot; filename=&quot;photo_2019-04-19_10-16-10.jpg&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;blockquote cid=&quot;n2&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; white-space: pre-wrap; position: relative;&quot;&gt;Contents&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n4&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n5&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n6&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS Lambda 내부 동작 방식 및 활용 방법 살펴보기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n7&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n8&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컨테이너와 서버리스 기반 CI/CD 파이프라인 구성하기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n9&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n10&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;워크로드에 맞는 클라우드 데이터베이스 찾기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n11&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n12&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;진화하는 CloudFront의 이해와 글로벌 서비스 활용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;h1 cid=&quot;n13&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;1. AWS Lambda 내부 동작 방식 및 활용 방법 살펴보기&lt;/h1&gt;&lt;blockquote cid=&quot;n14&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n15&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 김일호 솔루션즈 아키텍트 매니저&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n16&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 주요 장점&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n17&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n18&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n19&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용자 지정 로직으로 다른 aws 서비스 확장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n20&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n21&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용자 지정 백엔드 서비스 구축&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n22&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n23&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존 보유 코드 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n24&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n25&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;완전히 자동화된 관리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n26&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n27&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;내장된 내결함성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자동 규모 조정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n30&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n31&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라우드 프론트 요청에 대한 응답으로 코드 실행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n32&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n33&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 함수 오케스트레이션&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;통합된 보안 모델&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용량에 따라 지불&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n38&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n39&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유연한 리소스 모델&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n40&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;고민거리&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n41&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n42&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로드 밸런싱&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;오토 스케일링&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Failures 핸들링&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Isolations&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n50&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 AWS 아키텍쳐&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n51&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n53&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Data Plane&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/lambda_01_turn.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 654px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/lambda_01_turn.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n55&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 구축시 고려할 사항&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n56&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Front End Invoke&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n59&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프론트 엔드의 호출을 모두 관장한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n62&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n63&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Counting Service&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n64&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n65&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n66&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용자가 얼마나 많은 API 요청을 하는지 모니터링하고 제한기능 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n67&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n68&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Worker Manager&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n69&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 컨테이너의 상태를 관리하고 API요청을 가용 가능한 컨테이너로 중계한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n72&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n73&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Worker&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n74&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;고객 함수(코드)가 안전하게 실행되는 실제 Container 환경&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;완전하게 독립된 안전한 환경&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Placement Service&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n81&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Worker에 샌드박스 구성을 자원 활용률이 높고, 고객 서비스 영향이 없도록 관리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n84&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 Failures 핸들링&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n85&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리전 내부의 다수의 Availability Zone 구성을 통해서 람다 함수 실행에 있어 고가용성을 보장한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n88&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 Isolations 환경&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n89&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/lambda_02.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 654px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/lambda_02.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n90&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 실행에 있어서 단일 계정과 단일 펑션을 유지하므로 완전하게 독립된 안전한 환경에서 실행된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n93&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n94&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Guest OS 위의 샌드박스를 별도의 독립된 공간으로 구성하는데 cgroups, namespaces, seccomp, iptables &amp;amp; chroot 등의 기술이 사용된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n95&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 Utilizations&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n96&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n97&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n98&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정확히 사용한 시간 만큼만 과금&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n99&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n100&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;내부적으로 시스템을 최대한 바쁘게 돌리기 위한 최적화가 되어 있다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n101&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;7개의 워커에서 각 60% 씩 활용률을 가지고 있는 것 보다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;4개의 워커에서 각 99% 씩 활용률을 가지고, 3개는 sub로 가지는 컨셉으로 디자인 되어 있음.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n106&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다와 RDS/RDBMS 접근&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n107&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다에서 DB 접근시 유의할 점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n110&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 가용 영역 내 Subnet에 ENI(Elastic Network Interface) 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n113&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n114&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n115&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용 영역 내 레벨의 이벤트 또는 IP 소모 문제를 피할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n116&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n117&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다는 VPC 내 ENI(Elastic Network Interface)로 접근&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n118&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서 가용 IP에 따른 확장성의 제약을 고려 해야함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ENI 신규 구성은 시간이 소모됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n123&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n124&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Public host name DNS 쿼리를 피할 수록 좋다&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n125&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비용가 시간이 소모됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n128&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n129&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로 VPC의 Lambda는 인터넷 접근이 불가능함&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n130&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n131&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n132&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;NAT Gateway(or NAT instance)를 추가하고 Routing Table 구성으로 사용이 가능함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;커넥션 관리&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n135&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n136&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n137&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 시간에 따른 사용/확장 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n138&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n139&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;확장된 다수의 람다가 DB를 접근한다. 간단하게 생각할 문제가 아니다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n141&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n142&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커넥션 풀링과 람다 고려사항&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n143&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n144&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n145&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 실행 후 컨테이너가 사라지는지 인지할 수 없음&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n146&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n147&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n148&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커넥션을 명시적으로 닫을 수 없음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n149&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n150&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커넥션 삭제는 Database TTL에 의지&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 컨테이너의 생성/삭제를 조정할 수 없음&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n153&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n154&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n155&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Idle 커넥션이 많이 생성될 수 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 람다 함수의 실행은 여러 다른 컨테이너에서 실행될 수 있음&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n158&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커넥션의 재사용을 보장할 수 없음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n161&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n162&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커넥션 풀링과 람다 설정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n163&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n164&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n165&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컨테이너당 하나의 커넥션만 사용&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n166&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커넥션 풀 사이즈 = 1로 설정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;핸들러 밖에 글로벌하게 DB 커넥션 객체를 생생해서 재활용 하는 것이 좋은 아이디어&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n170&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n171&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;방법 1&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n172&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n173&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n174&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Concurrency를 제한한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n175&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n176&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n177&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;함수에서 스로틀링 설정을 통해서 한개의 DB에 여러개의 람다 펑션의 호출을 제한할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n178&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n179&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 Concurrency는 계정과 Function 레벨 모두 제한이 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;방법 2&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n182&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n183&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n184&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;동적 커넥션 관리 아키텍처&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n185&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n186&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n187&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB에 접근하는 람다의 실행 정보를 저장하는 헬퍼 람다를 만들어서 커넥션에 관한 컨트롤을 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n188&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다의 트레이싱&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n189&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n190&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n191&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로 AWS 서비스들은 클라우드 와치를 통해 모니터링이 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n192&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n193&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로그와 매트릭정보로 모니터링이 부족한 경우&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n194&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n195&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;X-ray를 통해 더 자세히 람다를 모니터링 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n196&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Tip - 람다의 커스텀 런타임 사용&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n197&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n198&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n199&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발자들은 많이 사용되는 코드는 라이브러리로 분리 시킨다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n200&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n201&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;항상 똑같은 코드를 사용하는데 반복해서 구현할 필요가 없기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n202&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n203&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다도 같은 방식으로 접근할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n204&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n205&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러개의 람다함수에서 항상 실행되는 코드는 공유 라이브러리와 같이 커스텀 람다 Layer를 사용해서 해결할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n206&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n207&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;커스텀 런타임 만드는 순서&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n208&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n209&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n210&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 Function 만들고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n211&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n212&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Layer(공유 람다 함수) 만들고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n213&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n214&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Function 등록하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n215&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n216&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;런타임 등록하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n217&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n218&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Layer 공유하고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n219&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n220&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Function을 실행시킨다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n221&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n222&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다수의 람다 함수에서 공통으로 사용하는 DB 커넥션 접근 레이어, 정보 암호화 레이어 등과 같은 동작을 Layer로 만들어서 유용하게 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;h1 cid=&quot;n223&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2. 컨테이너와 서버리스 기반 CI/CD 파이프라인 구성하기&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n224&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n225&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 김필중 솔루션즈 아키텍트&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n226&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-top: 0.8em; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 강승욱 솔루션즈 아키텍트&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n227&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현대의 애플리케이션 개발의 접근&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n228&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n229&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n230&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;환경 관리 간소화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n231&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n232&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n233&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버리스 서비스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n234&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n235&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드 변경의 영향 최소화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n236&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n237&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n238&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마이크로 서비스 아키텍처&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n239&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n240&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;운영 자동화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n241&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n242&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;새로운 서비스 배포 가속화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n243&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n244&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n245&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CI/CD&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n246&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n247&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리소스와 애플리케이션에서 통찰력 얻기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n248&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n249&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;고객과 비즈니스 보호&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n250&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포를 위한 릴리즈 프로세스&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n251&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_01.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 654px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_01.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n252&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n253&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n254&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로세스에서 CI 와 CD의 범위&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n255&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_02.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 624px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_02.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n256&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CI/CD가 중요한 이유&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n257&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n258&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n259&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이른 버그 찾기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n260&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n261&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠른 버그 수정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n262&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n263&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;더 빠르게 전달&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n264&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n265&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;더 자주 전달&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n266&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n267&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;개발 방해 요소 제거&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n268&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n269&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠른 기술 향상&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n270&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현대 애플리케이션 배포에서 중요한 요소&lt;/span&gt;&lt;/h2&gt;&lt;h3 cid=&quot;n271&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지속적 통합&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n272&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n273&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n274&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;새 코드가 체크인되면 자동으로 새 릴리즈 시작&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n275&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n276&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일관 되고, 반복 가능한 환경에서 코드 빌드 및 테스트&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n277&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n278&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 준비가 완료된 아티팩트를 항시 보유&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n279&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n280&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빌드 실패시의 피드백 루프를 최적화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n281&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n282&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AWS CodePipeLine&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n283&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n284&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n285&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠르고 신뢰할 수 있는 애플리케이션 업데이트를 위한 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;지속적 전달 서비스&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n286&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n287&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;소프트웨어 릴리즈 프로세스 모델링 및 시각화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n288&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n289&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드 변경시 마다 빌드, 테스트 배포&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n290&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n291&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;타사 도구 및 AWS와 통합 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n292&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n293&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지원하는 소스&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n294&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n295&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n296&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최신 소스코드를 가져와 자동으로 릴리즈 수행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n297&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n298&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;브랜치 기준&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n299&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n300&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n301&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS CodeCommit&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n302&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n303&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Github&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n304&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n305&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;오브젝트 또는 폴더 기준&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n306&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n307&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n308&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS S3 버켓에서 변경사항 발생되면 파이프라인 시작&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n309&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n310&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;신규 - ECR&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n311&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n312&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n313&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;도커 태그 기준으로 파이프라인 시작&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n314&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n315&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지원 트리거&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n316&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n317&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n318&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 클라우드 워치 이벤트&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n319&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n320&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n321&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스케쥴링, AWS Health 리벤트&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n322&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n323&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebHooks&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n324&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n325&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n326&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;도커 허브&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n327&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n328&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Quay&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n329&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n330&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Artifactory&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n331&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n332&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AWS Codebuild&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n333&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n334&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n335&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;소스 코드를 컴파일 테스트 패키징 하는 환정 관리되는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;빌드 서비스&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n336&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n337&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지속적으로 확장 및 여러 빌드 동시 처리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n338&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n339&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서버리스 형태로 관리할 빌드 서버 없음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n340&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n341&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용하는 리소스에서만 분 단위 과금&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n342&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n343&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라우드 워치 이벤트를 통해 빌드 모니터링&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;각 빌드는 새로운 도커 컨테이너에서 실행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n346&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n347&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 공식 Codebuild 이미지는 도커와 AWS CLI를 포함한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n348&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n349&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;도커 이미지를 사용하여 사용자 요구에 적합한 사용자 지정 빌드 환경 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n350&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;지속적 배포&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n351&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n352&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n353&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;테스트를 위해 스테이징 환경에 새로운 변경 사항을 자동으로 배포&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n354&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n355&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;고객의 사용성에 영향없이 안전하게 프로덕션으로 배포&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n356&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n357&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;고객에게 신속하게 제공 : 배포 빈도를 높이고 리드타임과 실패율을 줄임&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n358&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n359&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AWS CodeDeploy&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n360&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n361&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n362&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 인스턴스와 람다로 코드 배포를 자동화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n363&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n364&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 업데이트의 복잡성을 처리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n365&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n366&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 배포중 다운타임 최소화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n367&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n368&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;오류 감지 시 자동 롤백&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n369&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n370&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;EC2, 람다, 온프레미스 서버에 배포 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n371&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n372&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Lambda 배포&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n373&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n374&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n375&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;람다 함수 가중치 별칭을 사용하여 트래픽을 이동&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n376&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n377&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Canary&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(10분 동안 트래픽의 10%만 이동, 그 후 나머지를 이동) 또는 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Linear&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;(매 10분 마다 10% 트래픽씩 이동) 중 선택&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n378&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n379&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유효성 검사 후크로 각 배포의 각 단계에서 테스트가 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n380&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n381&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;후크 실패 또는 클라우드 워치 발생시 수 초 내의 빠른 롤백 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n382&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n383&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 상태 및 기록을 콘솔, API, SNS 알림, 클라우드 워치 이벤트로 모니터링&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n384&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n385&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ECS Blud/Green 배포&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n386&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n387&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n388&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Green 작업을 프로비전하고, 로드벨런서에서 트래픽을 전환&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n389&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n390&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유효성 검사 후크로 배포 각 단계에서 테스트를 수행 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n391&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n392&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;후크 실패 또는 클라우드 워치 이벤트 발생시 Blue 작업으로 수초 내의 빠른 롤백 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n393&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n394&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 상태 및 기록을 콘솔, API, SNS 알림, 클라우드 워치 이벤트로 모니터링&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n395&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n396&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CodePipeline에서 CodeDeploy-ECS 배포 작업을 사용하거나 젠킨스에서도 사용 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n397&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n398&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;배포 과정&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n399&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n400&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n401&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;100% Prod 트래픽 존재, 로드 밸런서는 Test 트래픽 리스너를 열고 대상그룹 2 생성&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n402&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_03.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 534px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_03.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n403&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n404&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;V2에 해당하는 Green 작업 프로비저닝&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n405&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_04.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 534px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_04.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n406&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n407&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Green 작업이 Prod 트래픽을 받기 전 테스트 엔드포인트에 후크 실행&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n408&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_07.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 534px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_07.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n409&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n410&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Green 작업으로 트래픽 전환, 알람 발생시 즉시 롤백&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n411&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_06.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 534px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_06.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n412&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n413&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마지막으로 Blue 드레이닝&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n414&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_05.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 534px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cicd_05.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n415&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n416&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포를 위한 컨테이너 이미지 태깅 주의점&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n417&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n418&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n419&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포 중이 아닌 각 컨테이너가 시작될 때 도커 태그가 해석됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n420&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n421&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Latest 또는 prod 배포는 스케일 아웃 이벤트 후 프로덕션에 테스트 퇴지 않은 코드가 배포될 수 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n422&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n423&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포시 고유한 '변경 불가능한' 태그 사용 권장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n424&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드형 인프라&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n425&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n426&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n427&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인프라 변경 사항을 반복적이고 예측 가능하게 함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n428&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n429&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;코드 변경과 동일한 도구를 사용하여 인프라 변경 사항 릴리즈&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n430&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n431&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스테이징 환경에서 프로덕션 환경을 복제하여 지속적인 테스트를 가능하게 함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n432&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n433&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아티팩트 검증(빌드 단계)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n434&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n435&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n436&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;유닛 테스트&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n437&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n438&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;정적 분석&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n439&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n440&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;목업 의존성 및 환경&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n441&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n442&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;취약점 이미지 스캔&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n443&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n444&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;환경 검증(테스트 단계)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n445&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n446&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n447&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실제 의존성 및 실제 환경에 대한 통합 테스트&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n448&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n449&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;부하 테스트&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n450&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n451&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;침투 테스트&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n452&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n453&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;환경에 미치는 영향을 테스트하기 위한 모니터링&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n454&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n455&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;IaC(Infrastructure as Code)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n456&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n457&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n458&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AWS Serverless Application Model(SAM)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n459&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n460&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n461&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS에서 서버리스 애플리케이션 구축을 위한 오픈 소스 프레임워크&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n462&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n463&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;함수, API, DB, 이벤트 소스 매핑을 표현하는 약식 문법&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n464&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n465&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포시 SAM 구문을 CloudFormation으로 전환&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n466&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n467&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;간단한 SAM 구문으로 다양한 AWS 리소스 생성 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n468&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n469&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;AWS Cloud Deployment Kit(CDK)&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n470&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n471&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n472&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;현재 개발자 미리보기로 서비스 중&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n473&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n474&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;타입스크립트로 클라우드 인프라를 정의하는 오픈 소스 프레임워크&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n475&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n476&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 베스트 프랙티스를 기본으로 하는 고수준 리소스 타입(&quot;construct&quot;)의 라이브러리를 제공(npm)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n477&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n478&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;리소스는 CloudFormation으로 준비됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n479&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n480&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n481&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;예를 들면, 22줄의 CDK 소스 코드로 400줄의 CloudFormation 코드가 생성됨.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;Open Sans, Clear Sans, Helvetica Neue, Helvetica, Arial, sans-serif&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;h1 cid=&quot;n482&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;3. 워크로드에 맞는 클라우드 데이터베이스 찾기&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n483&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n484&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 박주연 솔루션즈 아키텍트&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n485&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터베이스 역사&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n486&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n487&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n488&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최근 들어 목적에 맞는 다양한 DB들이 많이 생겼다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n489&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_01.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 624px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_01.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n490&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;공통적인 데이터 범주 및 사례&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n491&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n492&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n493&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Relational&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n494&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n495&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n496&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 무결성 및 트랜잭션 보장, 스키마 보장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n497&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n498&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존 워크로드 마이그레이션 ERP 및 CRM, 금융 서비스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n499&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n500&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon RDS&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n501&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n502&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Key-Value&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n503&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n504&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n505&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;높은 처리량, 최소 지연 보장, 유연한 확장&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n506&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n507&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;실시간 입찰, 온라인 쇼핑, 장바구니, SNS, 제품 카달로그, 고객 환경 정보&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n508&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n509&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon DynamoDB&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n510&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n511&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Document&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n512&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n513&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n514&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;문서 저장 및 해당 문서의 모든 속성에 대한 빠른 조회&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n515&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n516&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컨텐츠 관리, 모바일, 개인화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n517&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n518&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon DocumentDB&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n519&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n520&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;In-memory&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n521&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n522&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n523&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;키를 기반으로 마이크로 초 이내의 응답 요구&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n524&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n525&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;게임 유저 랭킹, 실시간 분석, 캐싱&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n526&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n527&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon ElastiCache&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n528&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n529&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Graph&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n530&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n531&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n532&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 간 신속하고 간편한 관계 구축 및 탐색&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n533&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n534&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사기 탐지, 소셜 네트워킹, 추천 엔진&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n535&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n536&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon Neptune&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n537&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n538&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Time-series&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n539&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n540&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n541&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시간에 따른 데이터의 용이한 수집, 저장, 처리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n542&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n543&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;IoT 애플리케이션, 이벤트 기반 추적&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n544&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n545&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon Timestream&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n546&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n547&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Ledger&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n548&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n549&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n550&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 내 모든 데이터에 대해 완전하고 변조 불가능한 기록 관리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n551&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n552&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;공급망 관리, 헬스케어, 등록 관리, 재정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n553&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n554&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Amazon QLDB&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n555&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 데이터베이스&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n556&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n557&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n558&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB를 운영하는 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n559&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n560&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n561&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Self Managed(On-Premise)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n562&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n563&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;RDBMS on AWS EC2&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n564&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n565&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Fully Managed(AWS DBs)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n566&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n567&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 베이스 운영 방안에 따른 관리 영역&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n568&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n569&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n570&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Fully Managed DB는 사용자가 컨트롤해야 하는 영역이 줄어들어, 워크로드에 집중할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n571&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n572&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;DB를 운영하는 데 있어서, 제약 사항이 없다면(개인정보, 사내 정책 등) Fully Managed DB 전환을 고려해볼 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n573&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_02.jpeg?raw=true&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 624px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_02.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n574&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n575&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon RDS에서의 데이터베이스 관리자 역할 변화&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n576&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n577&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n578&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;관리적인 요소를 AWS가 가져 가기 때문에, 담당자가 본인의 업무(쿼리 튜닝 등)에 집중 할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n579&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_03.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 594px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_03.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n580&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n581&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon Relational Database Service(RDS)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n582&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n583&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n584&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 많이 선호하는 데이터베이스 엔진을 갖춘 관계형 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n585&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n586&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS Aurora&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n587&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n588&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n589&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라우드를 위해 구축된 MySQL 및 PostgreSQL 호환 관계형 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n590&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n591&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon DynamoDB&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n592&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n593&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n594&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어떤 규모에서든 빠르고 유연한 Key-Value NoSQL 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n595&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n596&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon DocumentDB&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n597&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n598&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n599&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠르고 확장 가능하며 가용성이 뛰어난 MongoDB 호환 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n600&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n601&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon ElastiCache&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n602&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n603&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n604&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Redis 및 Memcached와 호환되는 인 메모리 데이터 스토어 및 캐시&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n605&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n606&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용 예시&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n607&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n608&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n609&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon ElastiCache는 대규모의 실시간 지리 공간 데이터를 빠르게 관리할 수 있도록 인 메모리 데이터 구조 및 연산자를 제공하므로 주행 시간, 주행 거리, 관심 지역 정보와 같은 위치 기반 기능을 가진 애플리케이션에 적용 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n610&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n611&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon Neptune&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n612&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n613&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n614&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠르고 안정적인 완전 관리형 그래프 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n615&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n616&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터간 관계성 증가에 따른 고려&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n617&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n618&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon Timestream - preview 상태&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n619&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n620&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n621&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;빠르고 확장 가능한 완전관리형 시계열 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n622&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n623&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시계열 데이터 예시&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n624&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n625&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사용 예시&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n626&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n627&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n628&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본 탑재된 분석 기능을 사용하여 IoT 애플리케이션이나 산업용 장비들이 생성하는 시계열 데이터를 빠르게 분석, 데이터가 증가해도 가능한 한 최소 비용으로 지속적이며 예층 가능한 성능을 유지&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n629&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n630&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Amazon Quantum Ledger Database(QLDB) - preview 상태&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n631&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n632&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n633&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;완정 관리형 원장 데이터베이스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n634&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n635&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션에서 모든 데이터 변경 기록 추적 및 확인&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n636&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 데이터베이스로 전환하려면..&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n637&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n638&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n639&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터를 전환하는 방안&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n640&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n641&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n642&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라우드 전환&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n643&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n644&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n645&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS SCT(Schema Conversion Tool)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n646&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n647&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n648&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;온프레미스 DB를 클라우드로&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n649&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n650&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;온프레미스 DW를 클라우드로&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n651&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n652&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마이그레이션&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n653&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n654&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n655&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS DMS(Database Migration Service)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n656&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n657&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n658&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;애플리케이션 무중단 데이터 마이그레이션&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n659&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n660&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n661&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;복제 인스턴스 생성&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n662&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n663&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;원본 및 대상 데이터베이스 연결&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n664&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n665&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;복제 대상 스키마/테이블 혹은 데이터베이스 선택&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n666&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n667&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS DMS를 통해 테이블 생성, 동기화 진행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n668&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n669&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;전환 결정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n670&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n671&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 복제&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n672&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n673&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n674&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS DMS(Database Migration Service)&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n675&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n676&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n677&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;교차 리전간 읽기 전용 복제본 구축&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n678&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n679&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라우드 환경에서의 분석 작업 실행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n680&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n681&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 레이크로 데이터 채우기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n682&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 데이터베이스의 다음은..&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n683&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n684&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n685&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS의 데이터 서비스 포트폴리오&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n686&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n687&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n688&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터를 활용하여 할수 있는 분석, 예측, 머신러닝 등 Data Lake 영역의 여러가지 서비스를 고려중이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n689&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_04.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 624px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/db_04.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;monospace&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;font color=&quot;#333333&quot; face=&quot;monospace&quot;&gt;&lt;span style=&quot;font-size: 14px; white-space: pre-wrap;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;orphans: 4;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;h1 cid=&quot;n690&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;4. 진화하는 CloudFront의 이해와 글로벌 서비스 활용&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n691&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n692&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;GS 네오텍&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n693&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CDN(Contents Delivery Network)&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n694&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n695&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n696&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;왜 필요할까&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n697&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n698&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n699&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;트래픽은 거리가 멀수록 / 데이터의 양이 많을 수록 전송이 지연됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n700&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n701&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;대부분의 속도 저하는 Middle Mile 구간에서 발생&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n702&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_01.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 594px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_01.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n703&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;진화하는 CloudFront&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n704&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n705&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n706&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS 고가용성 글로벌 CDN 서비스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n707&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n708&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Static Contents 캐싱&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n709&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n710&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Dynamic Contents 전송 성능 개선&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n711&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n712&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Contents 보호 : 무료 SSL 및 Custom SSL 지원&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n713&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n714&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Contents 보안/제어 : Signed URL, Signed Cookie&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n715&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n716&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin 장애 조치 지원 : Origin Group&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n717&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n718&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;S3 업로드 가속 기능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n719&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;클라우드 프론트의 전세계 배치&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n720&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_02.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 654px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_02.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n721&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS Global Backbone&lt;/span&gt;&lt;/h2&gt;&lt;p cid=&quot;n722&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_03.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 654px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_03.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n723&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서울 &amp;lt;-&amp;gt; 유럽 데이터 전송 성능 비교&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n724&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n725&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n726&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin이 서울 리전의 Amazon S3 이고 Client가 Ireland에 있다고 가정한 테스트 결과&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n727&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n728&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;10MB 파일이 첫번째 요청에 다운로드 되는 성능을 비교함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n729&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n730&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;AWS Backbone을 거치는 CloudFront 이용시 평균 5초, S3에 다이렉트로 접근시 평균 12.8초 소요&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n731&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_04.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 624px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_04.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n732&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Features&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n733&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n734&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n735&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Static Contents Delevery&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n736&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n737&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n738&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;캐시를 이용해 빠르고 안전한 Static Contents 전송&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n739&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n740&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Dynamic Contents Delivery는?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n741&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n742&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n743&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;전체 응답 시간&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; = DNS Lookup + TCP Connection + Time To First Byte + Contents Download&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n744&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n745&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;진화된 CloudFront의 Dynamic Contents Delivery 전송 성능 향상 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n746&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n747&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n748&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;요청자  - Edge간 연결시 최적화 Edge 연결&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n749&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n750&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin과 지속적인 연결 유지&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n751&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n752&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n753&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Keep Alive connection을 통한 연결 설정 시간 단축&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n754&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_05.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 534px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_05.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n755&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n756&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Edge - Region간 모니터링으로 최적화된 네트워크&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n757&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n758&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Gzip 압축 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n759&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n760&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n761&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Compress Objects Automatically 설정 YES&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n762&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n763&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최대 80%속도, 비용 개선&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n764&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n765&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;1KB ~ 10MB 크기의 파일 압축&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n766&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n767&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;웹 페이지 로딩 속도 개선&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n768&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n769&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;콘텐츠 다운로드 시간 단축&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n770&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n771&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 전속 비용 절감&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n772&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n773&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;압축 테스트시 반드시 지원 되는 파일 타입으로&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n774&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n775&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Cross-Origin Resource Charing&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n776&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n777&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n778&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;원본 리소스 쉐어링을 통해 같은 도메인에서 서비스가 가능하게 해줌&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n779&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n780&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin Group&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n781&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n782&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n783&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin 장애 조치 지원&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n784&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n785&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n786&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin Group 내에 2개의 Origin 설정&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n787&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n788&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SSL 지원&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n789&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n790&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Signed URL, Signed Cookie 사용&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n791&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n792&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n793&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;배포되는 Contents에 대한 보호 및 세부 제어&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n794&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n795&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n796&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Signed URL - 일반 Contents, RTMP 서비스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n797&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n798&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Signed Cookie - HSL 서비스&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n799&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CloudFront 활용&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n800&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n801&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n802&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CloudFront + s3&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n803&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n804&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n805&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;가장 손쉬운 구성으로 Static Contents를 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n806&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n807&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Contents File을 S3 버킷에 무제한 업로드&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n808&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n809&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CloudFront + EC2&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n810&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n811&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n812&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Dynamic Contents를 제공&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n813&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n814&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CloudFront + Route53&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n815&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n816&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n817&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;GEO Location을 활용한 Multi CDN 활용 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n818&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n819&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;사진에서 보면 멀티 CDN 구성을 통해서 일반적으로는 Global CDN을 중국에서는 China Local CDN을 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n820&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_06.jpeg?raw=true&quot; class=&quot;md-image&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; display: inline-block; width: 594px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/SeminarAndConference/img/aws_summit_2019/cf_06.jpeg?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-top-style: initial; border-right-style: solid; border-bottom-style: initial; border-left-style: solid; border-top-color: initial; border-right-color: transparent; border-bottom-color: initial; border-left-color: transparent; border-image: initial; vertical-align: middle; max-width: 100%; cursor: default; display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n821&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n822&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CloudFront + Lambda@edge&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n823&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n824&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n825&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CF와 람다엣지 사용 시나리오&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n826&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n827&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;CF에서 img를 요청하고 128X128 이미지가 없을 경우&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n828&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n829&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;S3에 해당 이미지를 128X128로 리사이징해서 저장하는 람다 함수를 invoke 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n830&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n831&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;그러면 CF에서는 200 OK와 이미지를 내려준다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Experience/2019</category>
      <category>AWS</category>
      <category>AWS SUMMIT 2019</category>
      <category>CloudFront</category>
      <category>Lambda</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/110</guid>
      <comments>https://ict-nroo.tistory.com/110#entry110comment</comments>
      <pubDate>Fri, 19 Apr 2019 12:55:58 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Vuex Helper, Vuex 프로젝트 모듈화</title>
      <link>https://ict-nroo.tistory.com/108</link>
      <description>&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex Helper&lt;/span&gt;&lt;/h1&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n2&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n3&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex의 각 속성들을 더 쉽게 사용하는 방법 - &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Helper&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n5&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n6&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Store에 있는 아래 4가지 속성들을 간편하게 코딩하는 방법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n7&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;state -&amp;gt; mapState&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getters -&amp;gt; mapGetters&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n12&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n13&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mutations -&amp;gt; mapMutations&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n14&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n15&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;actions -&amp;gt; mapActions&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n16&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;Helper의 사용법&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n17&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n18&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n19&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;helper를 사용하고자 하는 vue 파일에서 아래와 같이 해당 helper를 로딩&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n20&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n21&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;만약 헬퍼를 사용하지 않았다면, State에 정의 된 num에 접근하려면 this.$store.state.num 와 같이 접근해야 한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n22&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n23&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;생소하게 보이는 mapState앞에 있는 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;...&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;은 ES6의 Object Spread Operator이다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n24&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n25&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n26&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot;md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/es6_for_vuejs.md&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vue.js를 위한 ES6 정리 내용 링크&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n27&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapState&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapGetters&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapMutations&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapActions&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapState&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'num'&lt;/span&gt;]),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapGetters&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'countedNum'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;methods&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapMutations&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'clickBtn'&lt;/span&gt;]),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapActions&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'asyncClickBtn'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;h2 cid=&quot;n28&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapState, mapGetters&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n29&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n30&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n31&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapState&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n32&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n33&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex에 선언한 state 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex에서 mapState 함수를 가져와서 ... 연산자로 연결하고, 배열리터럴로 확장해서 사용한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n37&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n38&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex store에 선언된 state에 this.$store.state로 접근하지 않아도 됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;또, vue 템플릿에서 state안에있는 num 접근할 때도 this.num으로 바로 접근 가능하다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n41&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapState&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapState&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'num'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// num() { return this.$store.state.num; } 를 대체함&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n42&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;&amp;lt;!-- &amp;lt;p&amp;gt;{{ this.$store.state.num }}&amp;lt;/p&amp;gt; --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;{{ this.num }}&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapGetters&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n45&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex에 선언한 getters 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;vuex store에 선언된 getters에 this.$store.getters로 접근하지 않아도 됨&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n50&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n51&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getters는 vuex를 적용하기 전 사용하던 computed 속성이라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n52&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapGetters&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapGetters&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'reverseMessage'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reverseMessage&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;msg&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;split&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;''&lt;/span&gt;).&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;reverse&lt;/span&gt;().&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;join&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;''&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n53&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;&amp;lt;!-- &amp;lt;p&amp;gt;{{ this.$store.getters.reverseMessage }}&amp;lt;/p&amp;gt; --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;{{ this.reverseMessage }}&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n54&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 Spread 연산자를 쓰는 이유&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n55&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n56&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n57&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;싱글파일 컴포넌트 구조의 각 컴포넌트에서 정의된 computed 속성이 있을 것이고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;거기에 Vuex store에 정의된 getters를 사용해야하는 상황이 있을 것이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이때, &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;...&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 연산자를 통해 mapGetters를 연결해줘야 컴포넌트에서 computed 속성과 Vuex의 store에 등록된 getters를 함께 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n62&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapMutations, mapActions&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n63&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n64&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n65&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapMutations&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n66&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n67&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n68&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex에 선언한 mutations 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n69&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트에서 버튼 클릭시 컴포넌트의 methods에 clickBtn이 정의 되어있는 것 처럼 동작한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n72&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n73&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만 실제로는 ...mapMutations를 통해서 Vuex Store에 등록된 함수를 쓴다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n74&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n75&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, Vuex에 정의된 state.msg가 alert로 뜨게 될 것이다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n76&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapMutations&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;methods&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapMutations&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'clickBtn'&lt;/span&gt;]),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;authLogin&lt;/span&gt;() {},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;displayTable&lt;/span&gt;() {}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clickBtn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;alert&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;msg&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n77&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;button&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;@click&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;clickBtn&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;popup message&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n78&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n79&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapActions&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n80&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n81&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n82&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex에 선언한 actions 속성을 뷰 컴포넌트에 더 쉽게 연결해주는 헬퍼&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n83&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;마찬가지로 컴포넌트에서 버튼 클릭으로 methods에 등록된 delayClickBtn을 호출한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;methods에는 Spread Operator로 store의 actions에 정의된 delayClickBtn을 등록한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n88&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapActions&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;methods&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapActions&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'delayClickBtn'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actions&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;delayclickBtn&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setTimeout&lt;/span&gt;(() &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'clickBtn'&lt;/span&gt;), &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2000&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n89&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;button&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;@click&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;delayClickBtn&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;delay popup message&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;button&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n90&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Helper의 유연한 문법&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n91&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex의 선언한 속성을 그대로 컴포넌트에 연결하는 문법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n94&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n95&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n96&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;addNumber(인자)의 경우 배열리터럴로 넘기는 string에 선언을 안해도 알아서 넘겨준다!&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n97&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 배열 리터럴&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapMutations&lt;/span&gt;([&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'clickBtn'&lt;/span&gt;, &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//'clickBtn': clickBtn&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'addNumber'&lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//addNumber(인자)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;])&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex에 선언한 속성을 컴포넌트의 특정 메서드에다가 연결하는 문법&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n100&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n101&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n102&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트에서 사용하는 메서드와 Store의 Mutation 명이 다를 경우 객체 리터럴을 사용해서 등록할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n103&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 객체 리터럴&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapMutations&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;popupMsg&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'clickBtn'&lt;/span&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 컴포넌트 메서드 명 : Store의 Mutation 명&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;})&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n105&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Helper 함수가 주는  간편함&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n106&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n107&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n108&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;demoStore.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n109&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vue&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vue'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vuex&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;use&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;store&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;100&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;originalPrice&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;doublePrice&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;triplePrice&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;})&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n110&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n111&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;헬퍼를 사용하지 않고 Vuex를 적용한 컴포넌트 - Demo.vue&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n112&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n113&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n114&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;template영역에 this.&lt;/span&gt;&lt;span class=&quot;md-inline-math&quot; md-inline=&quot;inline_math&quot; pattern=&quot;$&quot; style=&quot;box-sizing: border-box; display: inline-block;&quot;&gt;&lt;span class=&quot;inline-math-svg math-jax-postprocess&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span class=&quot;MathJax_SVG&quot; tabindex=&quot;-1&quot; style=&quot;box-sizing: border-box; display: inline-block; line-height: normal; zoom: 0.9; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px;&quot;&gt;&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;95.989ex&quot; height=&quot;2.928ex&quot; viewBox=&quot;0 -856.4 41328.3 1260.5&quot; role=&quot;img&quot; focusable=&quot;false&quot; style=&quot;vertical-align: -0.938ex;&quot;&gt;&lt;defs&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-73&quot; d=&quot;M131 289Q131 321 147 354T203 415T300 442Q362 442 390 415T419 355Q419 323 402 308T364 292Q351 292 340 300T328 326Q328 342 337 354T354 372T367 378Q368 378 368 379Q368 382 361 388T336 399T297 405Q249 405 227 379T204 326Q204 301 223 291T278 274T330 259Q396 230 396 163Q396 135 385 107T352 51T289 7T195 -10Q118 -10 86 19T53 87Q53 126 74 143T118 160Q133 160 146 151T160 120Q160 94 142 76T111 58Q109 57 108 57T107 55Q108 52 115 47T146 34T201 27Q237 27 263 38T301 66T318 97T323 122Q323 150 302 164T254 181T195 196T148 231Q131 256 131 289Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-74&quot; d=&quot;M26 385Q19 392 19 395Q19 399 22 411T27 425Q29 430 36 430T87 431H140L159 511Q162 522 166 540T173 566T179 586T187 603T197 615T211 624T229 626Q247 625 254 615T261 596Q261 589 252 549T232 470L222 433Q222 431 272 431H323Q330 424 330 420Q330 398 317 385H210L174 240Q135 80 135 68Q135 26 162 26Q197 26 230 60T283 144Q285 150 288 151T303 153H307Q322 153 322 145Q322 142 319 133Q314 117 301 95T267 48T216 6T155 -11Q125 -11 98 4T59 56Q57 64 57 83V101L92 241Q127 382 128 383Q128 385 77 385H26Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-6F&quot; d=&quot;M201 -11Q126 -11 80 38T34 156Q34 221 64 279T146 380Q222 441 301 441Q333 441 341 440Q354 437 367 433T402 417T438 387T464 338T476 268Q476 161 390 75T201 -11ZM121 120Q121 70 147 48T206 26Q250 26 289 58T351 142Q360 163 374 216T388 308Q388 352 370 375Q346 405 306 405Q243 405 195 347Q158 303 140 230T121 120Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-72&quot; d=&quot;M21 287Q22 290 23 295T28 317T38 348T53 381T73 411T99 433T132 442Q161 442 183 430T214 408T225 388Q227 382 228 382T236 389Q284 441 347 441H350Q398 441 422 400Q430 381 430 363Q430 333 417 315T391 292T366 288Q346 288 334 299T322 328Q322 376 378 392Q356 405 342 405Q286 405 239 331Q229 315 224 298T190 165Q156 25 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 114 189T154 366Q154 405 128 405Q107 405 92 377T68 316T57 280Q55 278 41 278H27Q21 284 21 287Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-65&quot; d=&quot;M39 168Q39 225 58 272T107 350T174 402T244 433T307 442H310Q355 442 388 420T421 355Q421 265 310 237Q261 224 176 223Q139 223 138 221Q138 219 132 186T125 128Q125 81 146 54T209 26T302 45T394 111Q403 121 406 121Q410 121 419 112T429 98T420 82T390 55T344 24T281 -1T205 -11Q126 -11 83 42T39 168ZM373 353Q367 405 305 405Q272 405 244 391T199 357T170 316T154 280T149 261Q149 260 169 260Q282 260 327 284T373 353Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMAIN-2C&quot; d=&quot;M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-56&quot; d=&quot;M52 648Q52 670 65 683H76Q118 680 181 680Q299 680 320 683H330Q336 677 336 674T334 656Q329 641 325 637H304Q282 635 274 635Q245 630 242 620Q242 618 271 369T301 118L374 235Q447 352 520 471T595 594Q599 601 599 609Q599 633 555 637Q537 637 537 648Q537 649 539 661Q542 675 545 679T558 683Q560 683 570 683T604 682T668 681Q737 681 755 683H762Q769 676 769 672Q769 655 760 640Q757 637 743 637Q730 636 719 635T698 630T682 623T670 615T660 608T652 599T645 592L452 282Q272 -9 266 -16Q263 -18 259 -21L241 -22H234Q216 -22 216 -15Q213 -9 177 305Q139 623 138 626Q133 637 76 637H59Q52 642 52 648Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-75&quot; d=&quot;M21 287Q21 295 30 318T55 370T99 420T158 442Q204 442 227 417T250 358Q250 340 216 246T182 105Q182 62 196 45T238 27T291 44T328 78L339 95Q341 99 377 247Q407 367 413 387T427 416Q444 431 463 431Q480 431 488 421T496 402L420 84Q419 79 419 68Q419 43 426 35T447 26Q469 29 482 57T512 145Q514 153 532 153Q551 153 551 144Q550 139 549 130T540 98T523 55T498 17T462 -8Q454 -10 438 -10Q372 -10 347 46Q345 45 336 36T318 21T296 6T267 -6T233 -11Q189 -11 155 7Q103 38 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-6D&quot; d=&quot;M21 287Q22 293 24 303T36 341T56 388T88 425T132 442T175 435T205 417T221 395T229 376L231 369Q231 367 232 367L243 378Q303 442 384 442Q401 442 415 440T441 433T460 423T475 411T485 398T493 385T497 373T500 364T502 357L510 367Q573 442 659 442Q713 442 746 415T780 336Q780 285 742 178T704 50Q705 36 709 31T724 26Q752 26 776 56T815 138Q818 149 821 151T837 153Q857 153 857 145Q857 144 853 130Q845 101 831 73T785 17T716 -10Q669 -10 648 17T627 73Q627 92 663 193T700 345Q700 404 656 404H651Q565 404 506 303L499 291L466 157Q433 26 428 16Q415 -11 385 -11Q372 -11 364 -4T353 8T350 18Q350 29 384 161L420 307Q423 322 423 345Q423 404 379 404H374Q288 404 229 303L222 291L189 157Q156 26 151 16Q138 -11 108 -11Q95 -11 87 -5T76 7T74 17Q74 30 112 181Q151 335 151 342Q154 357 154 369Q154 405 129 405Q107 405 92 377T69 316T57 280Q55 278 41 278H27Q21 284 21 287Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-70&quot; d=&quot;M23 287Q24 290 25 295T30 317T40 348T55 381T75 411T101 433T134 442Q209 442 230 378L240 387Q302 442 358 442Q423 442 460 395T497 281Q497 173 421 82T249 -10Q227 -10 210 -4Q199 1 187 11T168 28L161 36Q160 35 139 -51T118 -138Q118 -144 126 -145T163 -148H188Q194 -155 194 -157T191 -175Q188 -187 185 -190T172 -194Q170 -194 161 -194T127 -193T65 -192Q-5 -192 -24 -194H-32Q-39 -187 -39 -183Q-37 -156 -26 -148H-6Q28 -147 33 -136Q36 -130 94 103T155 350Q156 355 156 364Q156 405 131 405Q109 405 94 377T71 316T59 280Q57 278 43 278H29Q23 284 23 287ZM178 102Q200 26 252 26Q282 26 310 49T356 107Q374 141 392 215T411 325V331Q411 405 350 405Q339 405 328 402T306 393T286 380T269 365T254 350T243 336T235 326L232 322Q232 321 229 308T218 264T204 212Q178 106 178 102Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-6C&quot; d=&quot;M117 59Q117 26 142 26Q179 26 205 131Q211 151 215 152Q217 153 225 153H229Q238 153 241 153T246 151T248 144Q247 138 245 128T234 90T214 43T183 6T137 -11Q101 -11 70 11T38 85Q38 97 39 102L104 360Q167 615 167 623Q167 626 166 628T162 632T157 634T149 635T141 636T132 637T122 637Q112 637 109 637T101 638T95 641T94 647Q94 649 96 661Q101 680 107 682T179 688Q194 689 213 690T243 693T254 694Q266 694 266 686Q266 675 193 386T118 83Q118 81 118 75T117 65V59Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-61&quot; d=&quot;M33 157Q33 258 109 349T280 441Q331 441 370 392Q386 422 416 422Q429 422 439 414T449 394Q449 381 412 234T374 68Q374 43 381 35T402 26Q411 27 422 35Q443 55 463 131Q469 151 473 152Q475 153 483 153H487Q506 153 506 144Q506 138 501 117T481 63T449 13Q436 0 417 -8Q409 -10 393 -10Q359 -10 336 5T306 36L300 51Q299 52 296 50Q294 48 292 46Q233 -10 172 -10Q117 -10 75 30T33 157ZM351 328Q351 334 346 350T323 385T277 405Q242 405 210 374T160 293Q131 214 119 129Q119 126 119 118T118 106Q118 61 136 44T179 26Q217 26 254 59T298 110Q300 114 325 217T351 328Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMAIN-2E&quot; d=&quot;M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-68&quot; d=&quot;M137 683Q138 683 209 688T282 694Q294 694 294 685Q294 674 258 534Q220 386 220 383Q220 381 227 388Q288 442 357 442Q411 442 444 415T478 336Q478 285 440 178T402 50Q403 36 407 31T422 26Q450 26 474 56T513 138Q516 149 519 151T535 153Q555 153 555 145Q555 144 551 130Q535 71 500 33Q466 -10 419 -10H414Q367 -10 346 17T325 74Q325 90 361 192T398 345Q398 404 354 404H349Q266 404 205 306L198 293L164 158Q132 28 127 16Q114 -11 83 -11Q69 -11 59 -2T48 16Q48 30 121 320L195 616Q195 629 188 632T149 637H128Q122 643 122 645T124 664Q129 683 137 683Z&quot;&gt;&lt;/path&gt;&lt;path stroke-width=&quot;0&quot; id=&quot;E2-MJMATHI-69&quot; d=&quot;M184 600Q184 624 203 642T247 661Q265 661 277 649T290 619Q290 596 270 577T226 557Q211 557 198 567T184 600ZM21 287Q21 295 30 318T54 369T98 420T158 442Q197 442 223 419T250 357Q250 340 236 301T196 196T154 83Q149 61 149 51Q149 26 166 26Q175 26 185 29T208 43T235 78T260 137Q263 149 265 151T282 153Q302 153 302 143Q302 135 293 112T268 61T223 11T161 -11Q129 -11 102 10T74 74Q74 91 79 106T122 220Q160 321 166 341T173 380Q173 404 156 404H154Q124 404 99 371T61 287Q60 286 59 284T58 281T56 279T53 278T49 278T41 278H27Q21 284 21 287Z&quot;&gt;&lt;/path&gt;&lt;/defs&gt;&lt;g stroke=&quot;currentColor&quot; fill=&quot;currentColor&quot; stroke-width=&quot;0&quot; transform=&quot;matrix(1 0 0 -1 0 0)&quot;&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-73&quot; x=&quot;0&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-74&quot; x=&quot;469&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-6F&quot; x=&quot;830&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-72&quot; x=&quot;1315&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-65&quot; x=&quot;1766&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;g transform=&quot;translate(2232,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;로&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(2958,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;스&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(3684,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;토&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(4411,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;어&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(5137,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;에&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(5864,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;바&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(6590,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;로&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(7316,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;접&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(8043,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;근&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(8769,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;해&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(9496,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;도&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(10222,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;되&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(10948,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;지&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(11675,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;만&lt;/text&gt;&lt;/g&gt;&lt;use xlink:href=&quot;#E2-MJMAIN-2C&quot; x=&quot;12401&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-56&quot; x=&quot;12846&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-75&quot; x=&quot;13615&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-65&quot; x=&quot;14187&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;g transform=&quot;translate(14653,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;는&lt;/text&gt;&lt;/g&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-74&quot; x=&quot;15379&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-65&quot; x=&quot;15740&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-6D&quot; x=&quot;16206&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-70&quot; x=&quot;17084&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-6C&quot; x=&quot;17587&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-61&quot; x=&quot;17885&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-74&quot; x=&quot;18414&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-65&quot; x=&quot;18775&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;g transform=&quot;translate(19241,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;영&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(19968,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;역&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(20694,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;에&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(21420,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;표&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(22147,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;현&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(22873,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;식&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(23600,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;을&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(24326,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;줄&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(25052,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;이&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(25779,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;는&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(26505,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;것&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(27232,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;을&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(27958,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;권&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(28684,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;고&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(29411,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;한&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(30137,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;다&lt;/text&gt;&lt;/g&gt;&lt;use xlink:href=&quot;#E2-MJMAIN-2E&quot; x=&quot;30864&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;g transform=&quot;translate(31308,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;따&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(32035,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;라&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(32761,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;서&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(33488,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;스&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(34214,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;크&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(34940,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;립&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(35667,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;트&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(36393,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;영&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(37120,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;역&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(37846,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;에&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(38572,0)&quot;&gt;&lt;text font-family=&quot;STIXGeneral,'Arial Unicode MS',serif&quot; stroke=&quot;none&quot; transform=&quot;scale(50.259) matrix(1 0 0 -1 0 0)&quot;&gt;서&lt;/text&gt;&lt;/g&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-74&quot; x=&quot;39299&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-68&quot; x=&quot;39660&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-69&quot; x=&quot;40236&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMATHI-73&quot; x=&quot;40581&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;use xlink:href=&quot;#E2-MJMAIN-2E&quot; x=&quot;41050&quot; y=&quot;0&quot;&gt;&lt;/use&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;md-math-after-sym&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store로 값을 받아온다. &lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n115&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;root&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cm-meta cm-mustache&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;{{ originalPrice }}&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;  //100&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cm-meta cm-mustache&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;{{ doublePrice }}&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt; &amp;nbsp;  //200&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cm-meta cm-mustache&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;{{ triplePrice }}&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt; &amp;nbsp;  //300&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;originalPrice&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;originalPrice&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;doublePrice&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;doublePrice&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;triplePrice&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;triplePrice&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n116&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 의 헬퍼함수를 사용하면 반복 코드를 줄이고 편하게 Vuex store에 접근할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n119&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;div&lt;/span&gt; &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;id&lt;/span&gt;=&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;root&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cm-meta cm-mustache&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;{{ originalPrice }}&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cm-meta cm-mustache&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;{{ doublePrice }}&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;cm-meta cm-mustache&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;{{ triplePrice }}&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;template&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; {&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapGetters&lt;/span&gt;} &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapGetters&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'originalPrice'&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'doublePrice'&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'triplePrice'&lt;/span&gt;]),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n120&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 프로젝트 구조화 및 모듈화&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n121&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n122&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n123&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;프로젝트 구조화와 모듈화 방법 1&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n124&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n125&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n126&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;속성별 파일로 구조화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n127&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store 디렉토리 구조&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n129&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n130&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n131&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n132&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getters.js&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n135&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n136&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mutations.js&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n137&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n138&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store.js&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n139&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n140&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getters.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n141&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;storedTodoItems&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n142&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n143&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mutations.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n144&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;addOneItem&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;todoItem&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;completed&lt;/span&gt;: &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;, &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;: &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;todoItem&lt;/span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;todoItem&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JSON&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stringify&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;obj&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;obj&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;removeOneItem&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;payload&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;removeItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;splice&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;index&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;toggleOneItem&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;payload&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;[&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;index&lt;/span&gt;].&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;completed&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;[&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;index&lt;/span&gt;].&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;completed&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;removeItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&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;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JSON&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stringify&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;clearAll&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; { &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addOneItem&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;removeOneItem&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;toggleOneItem&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clearAll&lt;/span&gt; }&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n145&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n146&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n147&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vue&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vue'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vuex&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;getters&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'./getters'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;as&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mutations&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'./mutations'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;use&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Store&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;: &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;storage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;})&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n148&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n149&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;방법 2 - 앱이 비대해져서 1개의 store로는 관리가 힘들 때 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;modules&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 속성 사용&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n150&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모듈별로 필요한 store 속성들을 모아서 관리한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n155&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vue&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vue'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vuex&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;todoApp&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'./modules/todoApp'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;use&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Store&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;modules&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoApp&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;store/modules/todoApp.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n158&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;storage&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;arr&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;length&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;length&lt;/span&gt;; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;++&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;if&lt;/span&gt; (&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;key&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;i&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!==&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'loglevel:webpack-dev-server'&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;arr&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JSON&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;parse&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getItem&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;key&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;i&lt;/span&gt;))));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;arr&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;: &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;storage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetch&lt;/span&gt;(),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;getters&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;storedTodoItems&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mutations&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addOneItem&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;todoItem&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;completed&lt;/span&gt;: &lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;false&lt;/span&gt;, &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;: &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;todoItem&lt;/span&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;todoItem&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JSON&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stringify&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;obj&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;obj&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;removeOneItem&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;payload&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;removeItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;splice&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;index&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;toggleOneItem&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;payload&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;[&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;index&lt;/span&gt;].&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;completed&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt;[&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;index&lt;/span&gt;].&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;completed&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;removeItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setItem&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;item&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&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; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;JSON&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;stringify&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItem&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clearAll&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;todoItems&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sessionStorage&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;clear&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; { &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;gettets&lt;/span&gt;, &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt; }&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n162&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n163&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n164&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n165&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://vuejs.org/v2/guide/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://vuejs.org/v2/guide/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n172&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n170&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://kr.vuejs.org/v2/guide/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://kr.vuejs.org/v2/guide/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n169&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n167&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link md-expand&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/vue-pwa-vue-js-%EC%A4%91%EA%B8%89/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.inflearn.com/course/vue-pwa-vue-js-%EC%A4%91%EA%B8%89/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Vue.js</category>
      <category>mapActions</category>
      <category>mapGetters</category>
      <category>mapMutations</category>
      <category>mapState</category>
      <category>Vue.js</category>
      <category>vuex</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/108</guid>
      <comments>https://ict-nroo.tistory.com/108#entry108comment</comments>
      <pubDate>Fri, 1 Mar 2019 17:27:25 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Vuex의 주요 기술 요소</title>
      <link>https://ict-nroo.tistory.com/107</link>
      <description>&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 주요 기술 요소&lt;/span&gt;&lt;/h1&gt;&lt;h2 cid=&quot;n2&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Install&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n3&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n4&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n5&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex는 싱글 파일 컴포넌트 체계에서 NPM 방식으로 라이브러리를 설치하는게 좋다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;shell&quot; contenteditable=&quot;false&quot; cid=&quot;n6&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-builtin&quot; style=&quot;box-sizing: border-box; color: rgb(51, 0, 170);&quot;&gt;npm&lt;/span&gt; install vuex &lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204);&quot;&gt;--save&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n7&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6와 함께 사용해야 더 많은 기능과 이점을 제공받을 수 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vue.js에서 전역으로 Vuex 플러그인 사용하기&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n12&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n13&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n14&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;/src/store/store.js&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n15&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vue&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vue'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vuex&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;use&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;store&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Store&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n16&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n17&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;/src/main.js&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n18&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n19&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n20&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;export한 store를 import 시키고&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n21&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6의 Enhanced Object Literals 특성을 통해 축약해서 등록할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n23&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;Vue&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vue'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;App&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'./App.vue'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;store&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'./store/store'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;el&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'#app'&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;store&lt;/span&gt;,&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store: store,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;render&lt;/span&gt;: &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;h&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;h&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;App&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n25&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 기술 요소&lt;/span&gt;&lt;/h2&gt;&lt;h3 cid=&quot;n26&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;state&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n27&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 컴포넌트에 공유되는 데이터 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;data&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n30&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;data&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;message&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Hello Vue.js'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Vuex&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;message&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Hello Vue.js'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n31&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;&amp;lt;!-- Vue --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;{{ message }}&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;&amp;lt;!-- Vuex --&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;{{ this.$store.state.message }}&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n32&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;getters&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n33&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n34&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n35&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연산된 state 값을 접근하는 속성 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;computed&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n36&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n37&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뒤에서 헬퍼함수를 통해 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;this.$store.state.message&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 state를 접근하는 법을 간소화함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n38&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getters&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getNumber&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;doubleNumber&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt;; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;vue&quot; contenteditable=&quot;false&quot; cid=&quot;n39&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;{{ this.$store.getters.getNumber }}&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;{{ this.$store.getters.doubleNumber }}&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0);&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h3 cid=&quot;n40&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mutations&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n41&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n42&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n43&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;state 값을 변경하는 이벤트 로직, 메서드 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;methods&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n44&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n45&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뮤테이션은 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;commit()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;으로 동작시킨다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뮤테이션은 항상 첫번째 인자로 state를 가져온다. vue의 규약이라고 보면 된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n48&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: { &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt; },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;printNumbers&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sumNumbers&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;anotherNum&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;anotherNum&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'pringNumbers'&lt;/span&gt;); &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'sumNumbers'&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//30&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mutations의 commit() 형식&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n51&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n53&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;state를 변경하기 위해 mutations를 동작시킬 때 인자(payload)를 전달할 수 있음&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n54&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;storeNum&lt;/span&gt;:&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;modifyState&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;payload&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;str&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;storeNum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;payload&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'modifyState'&lt;/span&gt;, {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;str&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'passed from payload'&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n55&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n56&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;왜 mutations로 상태를 변경해야 하는가?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n57&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n58&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n59&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러개의 컴포넌트에서 아래와 같이 state 값을 변경하는 경우 어느 컴포넌트에서 해당 state를 변경했는지 추적하기 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n60&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;methods&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;increaseCounter&lt;/span&gt;() { &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;++&lt;/span&gt;; }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n61&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n62&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;특정 시점에 어떤 컴포넌트가 state를 접근하여 변경한 건지 확인하기 어렵기 때문이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, 뷰의 반응성(화면의 변화를 스크립트에서 인지하는것 등)을 거스르지 않게 명시적으로 상태변화를 수행한다. 반응성, 디버깅, 테스팅 혜택&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n65&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;actions&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n66&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n67&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n68&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;비동기 처리 로직을 선언하는 메서드 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;async methods&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;. 즉, 비동기 로직을 담당하는 mutations이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n69&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n70&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 요청, Promise, ES6 async과 같은 비동기 처리는 모두 actions에 선언한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트에서 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;#store.dispatch()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 actions 호출, 비동기 로직 수행 후 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;context.commit()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;으로 vuex store의 mutations 호출.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n73&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;doubleNumber&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actions&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;delayDoubleNumber&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;) { &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//context로 store의 메서드와 속성 접근&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'doubleNumber'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;dispatch&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'delayDoubleNumber'&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n74&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n75&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;actions 비동기 코드 예제 1&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n76&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Component의 methods에서 vuex actions 비동기 메서드 호출 -&amp;gt; 2초 후 vuex mutations 동기 메서드 수행&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n79&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;addCounter&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;++&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actions&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;delayedAddCounter&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;) { &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//context로 store의 메서드와 속성 접근&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setTimeout&lt;/span&gt;(() &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'addCounter'&lt;/span&gt;), &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2000&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;methods&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;incrementCounter&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;dispatch&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'delayedAddCounter'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;actions 비동기 코드 예제 2&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n82&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mutations&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;setData&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetchedData&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;product&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetchedData&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;actions&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;fetchedProductData&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;axios&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;get&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'http://domain.com/products/1'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;then&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;response&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;context&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;commit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'setData'&lt;/span&gt;, &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;response&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// App.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;methods&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;getProduct&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;dispatch&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'fetchedProductData'&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n83&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n84&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;왜 비동기 처리 로직은 actions에 선언해야 할까?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n85&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;언제 어느 컴포넌트에서 해당 state를 호출하고, 변경했는지 확인하기가 어려움&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n88&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n89&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러개의 컴포넌트에서 mutations로 시간차를 두고 state를 변경하는 경우&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n90&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n91&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n92&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;state값의 변화를 추적하기 어렵기 때문에 mutations 속성에는 처리 시점을 예측할 수 있는 동기 처리 로직만 넣어야 한다.&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/11.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 628px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/11.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n100&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n101&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n102&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n103&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://vuejs.org/v2/guide/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://vuejs.org/v2/guide/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://kr.vuejs.org/v2/guide/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://kr.vuejs.org/v2/guide/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n106&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n107&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link md-expand&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/vue-pwa-vue-js-%EC%A4%91%EA%B8%89/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.inflearn.com/course/vue-pwa-vue-js-%EC%A4%91%EA%B8%89/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Vue.js</category>
      <category>Actions</category>
      <category>getters</category>
      <category>mutations</category>
      <category>State</category>
      <category>Vues.js</category>
      <category>vuex</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/107</guid>
      <comments>https://ict-nroo.tistory.com/107#entry107comment</comments>
      <pubDate>Fri, 1 Mar 2019 17:21:33 +0900</pubDate>
    </item>
    <item>
      <title>[Vue.js] Vuex란? Vuex의 컨셉과 구조</title>
      <link>https://ict-nroo.tistory.com/106</link>
      <description>&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex Intro&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n2&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;상태 관리 라이브러리&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n4&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Intro&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n5&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n6&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n7&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;복잡한 애플리케이션의 컴포넌트들을 효율적으로 관리하는 Vuex 라이브러리 소개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n8&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n9&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 라이브러리의 등장 배경인 Flux 패턴(React) 소개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n10&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n11&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 라이브러리의 주요 속성인 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;state, getters, mutations, actions&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 학습&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n12&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n13&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n14&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex를 알기 전의 개념으로는 각각 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;data, computed, method, 비동기 method&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n15&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n16&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex를 더 쉽게 코딩할 수 있는 방법인 Helper 기능 소개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n17&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n18&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex로 프로젝트를 구조화하는 방법과 모듈 구조화 방법 소개&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n19&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex란?&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n20&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n21&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;무수히 많은 컴포넌트의 데이터를 관리하기 위한 상태 관리 패턴이자 라이브러리&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n23&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n24&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;React의 Flux 패턴에서 기인함&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n25&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n26&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vue.js 중고급 개발자로 성장하기 위한 필수 관문&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n27&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Flux란?&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n28&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n29&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n30&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MVC 패턴의 복잡한 데이터 흐름 문제를 해결하는 개발 패턴 - Undirectional data flow&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n31&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n32&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n33&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래의 순서로 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;단일 방향&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;으로만 흐름이 흘러간다.&lt;/span&gt;&lt;/p&gt;&lt;ol class=&quot;ol-list&quot; start=&quot;&quot; cid=&quot;n34&quot; mdtype=&quot;list&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;actions : 화면에서 발생하는 이벤트 또는 사용자의 입력&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n37&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n38&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;dispatcher : 데이터를 변경하는 방법, 메서드(model을 바꾸기 위한 역할)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n39&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n40&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;model : 화면에 표시할 데이터&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n41&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n42&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;view : 사용자에게 비춰지는 화면, 화면에서 다시 action을 호출하게 된다. 그러면 다시 1-&amp;gt;2-&amp;gt;3-&amp;gt;4 한 방향 흐름.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n43&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MVC 패턴의 문제점&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n44&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n45&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n46&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뷰와 모델이 양방향 통신이 가능하므로 하나의 뷰가 모듈을 변경했을 때, 다시 그 모듈이 연관된 뷰들을 갱신하고, 업데이트 된 뷰들이 연관된 모델을 다시 갱신하고, 엮이고 엮이는 관계를 추적하기가 힘들다&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n47&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n48&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n49&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ex) 페이스북 채팅화면 - 어느 사용자는 읽었고, 어느사용자는 안읽었고 이런 부분들을 처리하기 굉장히 난해했다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n50&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n51&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기능 추가 및 변경에 따라 생기는 문제점을 예측할 수가 없음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n53&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;앱이 복잡해질수록 생기는 업데이트 루프도 복잡해짐&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n54&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/06.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 718px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/06.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 cid=&quot;n55&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Flux 패턴의 단방향 데이터 흐름&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n56&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터의 흐름이 여러갈래로 나뉘지 않고 단방향으로만 처리&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n59&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;데이터 흐름이 단방향이기 때문에 예측이 가능하다. Vue.js에서 생각하면 '상위에서 하위 뷰로 props가 내려가고, 하위에서 상위로 event가 올라가겠네?'&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n62&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n63&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;패턴 자체에서 데이터의 흐름을 정형화 시켜서 향후 발생할 수 있는 문제점들을 방지한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/07.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 718px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/07.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n65&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex가 필요한 이유&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n66&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n67&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n68&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;복잡한 애플리케이션에서 컴포넌트의 개수가 많아지면 컴포넌트 간에 데이터 전달이 어려워진다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n69&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n70&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n71&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vue.js의 기본 개념을 공부했다면 알겠지만, 로그인 폼에서 id를 하위 컴포넌트로 계속해서 전달해서 내려야 할 때, 중간에 거치는 컴포넌트들이 많아 질수록 계속해서 props를 선언해야 하므로 데이터 전달이 불편해진다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/08.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 688px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/08.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n73&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n74&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n75&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;이벤트 버스로 해결?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n76&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n77&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n78&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;어디서 이벤트를 보냈는지 혹은 어디서 이벤트를 받았는지 알기 어렵다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n79&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Login.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;eventBus&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$emit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'fetch'&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;loginInfo&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// List.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;eventBus&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$on&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'display'&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;this&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;displayOnScreen&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;data&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Chard.vue&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;eventBus&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;$emit&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'refreshData'&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;chartData&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n80&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n81&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;즉, 컴포넌트간 데이터 전달이 명시적이지 않다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n82&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex로 해결할 수 있는 문제&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n83&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n84&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n85&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;MVC 패턴에서 발생하는 구조적 오류&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트 간 데이터 전달 명시&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n88&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n89&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;여러 개의 컴포넌트에서 같은 데이터를 업데이트 할 때 동기화 문제(mutation, actions)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n90&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 컨셉&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n91&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;State&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; : 컴포넌트 간에 공유하는 데이터 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;data()&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n94&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n95&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;View&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; : 데이터를 표시하는 화면 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;template&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n96&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n97&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;Action&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; : 사용자의 입력에 따라 데이터를 변경하는 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;methods&lt;/code&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;단방향 데이터 흐름&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 처리를 단순하게 도식화한 그림&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n100&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n101&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n102&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;View(Template)에서 버튼을 클릭했을때, 클릭이라는 Action(Method)이 발생한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n103&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n104&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;해당 Action이 동작을 통해서 State(data)를 변경한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.5rem 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/09.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 688px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/09.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n106&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vuex 구조&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n107&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뷰 컴포넌트 -&amp;gt; 비동기 로직 -&amp;gt; 동기 로직 -&amp;gt; 상태&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n110&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;시작점은 Vue Components이다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n113&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n114&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;컴포넌트에서 비동기 로직(Method를 선언해서 API 콜 하는 부분 등)인 Actions를 콜하고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Actions는 비동기 로직만 처리할 뿐 State(Data)를 직접 변경하진 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Actions가 동기 로직인 Mutations를 호출해서 State(Data)를 변경한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n119&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n120&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Mutations에서만 State(Data)를 변경할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;참고자료&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n123&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n124&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n125&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://joshua1988.github.io/web-development/javascript/javascript-asynchronous-operation/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바스크립트 비동기 처리와 콜백 함수&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot; md-link&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://joshua1988.github.io/web-development/javascript/promise-for-beginners/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바스크립트 Promise 쉽게 이해하기&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p cid=&quot;n128&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;image&quot; data-src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/10.PNG?raw=true&quot; contenteditable=&quot;false&quot; class=&quot;md-image md-img-loaded&quot; style=&quot;box-sizing: border-box; min-width: 10px; min-height: 10px; position: relative; word-break: break-all; font-family: monospace; vertical-align: top; display: inline-block; width: 718px;&quot;&gt;&lt;img referrerpolicy=&quot;no-referrer&quot; src=&quot;https://github.com/namjunemy/TIL/blob/master/Vue/img/10.PNG?raw=true&quot; style=&quot;box-sizing: border-box; border-width: 0px 4px 0px 2px; border-right-style: solid; border-left-style: solid; border-right-color: transparent; border-left-color: transparent; vertical-align: middle; max-width: 100%; cursor: default; transform: translateZ(0px); display: block; margin: auto;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 cid=&quot;n523&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n524&quot; mdtype=&quot;list&quot; data-mark=&quot;-&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n525&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n526&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://vuejs.org/v2/guide/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://vuejs.org/v2/guide/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n527&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n528&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://kr.vuejs.org/v2/guide/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://kr.vuejs.org/v2/guide/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n529&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n530&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link md-expand&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/course/vue-pwa-vue-js-%EC%A4%91%EA%B8%89/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://www.inflearn.com/course/vue-pwa-vue-js-%EC%A4%91%EA%B8%89/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Vue.js</category>
      <category>Actions</category>
      <category>getters</category>
      <category>mutations</category>
      <category>State</category>
      <category>Vue.js</category>
      <category>vuex</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/106</guid>
      <comments>https://ict-nroo.tistory.com/106#entry106comment</comments>
      <pubDate>Fri, 1 Mar 2019 17:06:26 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js를 위한 ES6 특징</title>
      <link>https://ict-nroo.tistory.com/105</link>
      <description>&lt;h1 cid=&quot;n0&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading md-focus&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 2.25em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.2; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 for Vue.js&lt;/span&gt;&lt;/h1&gt;&lt;blockquote cid=&quot;n2&quot; mdtype=&quot;blockquote&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.8em; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Intro&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n4&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n5&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n6&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6의 여러가지 문법 중 Vue.js 코딩을 간편하게 해주는 문법 학습&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n7&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n8&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;const &amp;amp; let, Arrow Function, Enhanced Object Literals, Modules 학습&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n9&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 란?&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n10&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n11&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n12&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ECMAScript 2015와 동일한 용어&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n13&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n14&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;2015년은 ES5(2009년)이래로 진행한 첫 메이저 업데이트가 승인된 해&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n15&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n16&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;최신 Front-End Framework인 React, Angular, Vue에서 권고하는 언어 형식&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n17&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n18&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES5에 비해 문법이 간결해져서 익숙해지면 코딩을 훨씬 편하게 할 수 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n19&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Babel&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n20&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n21&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n22&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;구 버전 브라우저 중에는 ES6의 기능을 지원하지 않는 브라우저가 있으므로 transpiling이 필요&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n23&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n24&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6의 문법을 각 브라우저의 호환 가능한 ES5로 변환하는 컴파일러&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n25&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;module&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;loaders&lt;/span&gt;: [{&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;test&lt;/span&gt;: &lt;span class=&quot;cm-string-2&quot; style=&quot;box-sizing: border-box; color: rgb(255, 85, 0);&quot;&gt;/\.js$./&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;loader&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'babel-loader'&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;query&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;presets&lt;/span&gt;: [&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'es2015'&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;  &lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;}]&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;},&lt;/span&gt;&lt;/pre&gt;&lt;h2 cid=&quot;n26&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;const &amp;amp; let&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n27&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n28&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n29&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;새로운 변수 선언 방식&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n30&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n31&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n32&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;블록단위 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;{ }&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 변수의 범위가 제한되었음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n33&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n34&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;const&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; : 한번 선언한 값에 대해서 변경할 수 없음(상수 개념)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n35&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n36&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;let&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; : 한번 선언한 값에 대해서 다시 선언할 수 없음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n37&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n38&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;위 특징들에 대해 자세히 알아보기 전에 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ES5 특징 2가지를 리뷰&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n39&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n40&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n41&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ES5 특징 - 변수의 Scope&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n42&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n43&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n44&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존의 자바스크립트(ES5)는 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;{ }&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에 상관없이 스코프가 설정됨&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n45&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n46&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n47&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;for문 안의 i를 밖에서 참조할 수 있다.(!!!!!!)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n48&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5&lt;/span&gt;; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;++&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 15&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;); &amp;nbsp; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 6&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n49&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n50&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ES5 특징 - Hoisting&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n51&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n52&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n53&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Hoisting이란 선언한 함수와 변수를 해석기가 가장 상단에 있는 것처럼 인식한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n54&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n55&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;js 해석기는 코드의 라인 순서와 관계 없이 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;함수 선언식&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;과 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;변수&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 위한 메모리 공간을 먼저 확보한다.&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n56&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n57&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n58&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;함수 선언식&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n59&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n60&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n61&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;함수 표현식&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n62&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n63&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n64&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;따라서, &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;function a()&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 와 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;var&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;는 코드의 최상단으로 끌어 올려진 것(hoisted)처럼 보인다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n65&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;willBeOverriden&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;willBeOverriden&lt;/span&gt;();&lt;span class=&quot;cm-tab&quot; role=&quot;presentation&quot; cm-text=&quot;	&quot; style=&quot;box-sizing: border-box; font-family: var(--monospace); position: relative; display: inline-block;&quot;&gt;  &lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 5&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;willBeOverriden&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n66&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n67&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;아래와 같은 코드를 실행할 때 자바스크립트 해석기가 어떻게 코드 순서를 재조정할까?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n68&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n69&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n70&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;호이스팅&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에 의해서 변수와 함수선언문이 위로 끌어올려지고,&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n71&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n72&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;두번째로 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;연산&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 일어난다. sum + i&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n73&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n74&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;세번째로 &lt;/span&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;할당&lt;/strong&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;이 일어난다. sum = sum + i&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n75&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n76&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;신기하겠지만(js로 시작을 하지 않아서...) 재조정 결과를 보자&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n77&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sumAllNumbers&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n78&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// #1 - 함수 선언식과 변수 선언을 hoisting&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sumAllNumbers&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;//...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;i&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// #2 - 변수 대입 및 할당&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n79&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n80&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 - &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;{ }&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 단위로 변수의 범위가 제한됨&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n81&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;for&lt;/span&gt; (&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;5&lt;/span&gt;; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;++&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 10&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;i&lt;/span&gt;); &amp;nbsp; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Uncaught ReferenceError: i is not defined&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n82&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n83&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 - &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;const&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 지정한 값 변경 불가능&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n84&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Uncaughr TypeError: Assignment to constant variable&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n85&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n86&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n87&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, 객체나 배열의 내부는 변경할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n88&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;num&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// {num: 10}&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;push&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;a&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// [20]&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n89&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n90&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6 - &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;let&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 선언한 값에 대해 다시 선언 불가능&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n91&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Uncaught SyntaxError: Identifier 'a' has already been declared&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n92&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n93&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;ES6 - const, let&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n94&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;f&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 새로운 블록안에 새로운 x의 스코프가 생김&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;sneaky&quot;&lt;/span&gt;;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;foo&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 이전 블록 범위로 돌아왔기 때문에 `let x`에 해당하는 메모리에 값을 대입&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;bar&quot;&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;inner&quot;&lt;/span&gt;; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Uncaught SyntaxError: Identifier 'x' has already been declared&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n96&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Arrow Function&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n97&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n98&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n99&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;함수를 정의할 때 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;function&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 이라는 키워드를 사용하지 않고 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;=&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;로 대체&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n100&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n101&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;흔히 사용하는 콜백 함수의 문법을 간결화&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n102&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ES5 함수 정의 방식&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;b&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;b&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ES6 함수 정의 방식&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; (&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;a&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;b&lt;/span&gt;) &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;a&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;b&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;20&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n103&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n104&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n105&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;화살표 함수 사용 예시&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n106&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ES5&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;arr&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;a&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;b&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;c&quot;&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;arr&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;forEach&lt;/span&gt;(&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;value&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;value&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// a, b, c&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ES6&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;arr&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;a&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;b&quot;&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;c&quot;&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;arr&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;forEach&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;value&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;value&lt;/span&gt;)); &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// a, b, c&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n107&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n108&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n109&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Babel 온라인 에디터로 실습하기 ES6 -&amp;gt; ES5로 변경되는 코드&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n110&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n111&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n112&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://babeljs.io/repl/&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://babeljs.io/repl/&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n113&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Enhanced Object Literals &lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n114&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n115&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n116&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;향상된 객체 리터럴&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n117&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n118&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 속성을 메서드로 사용할 때 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;function&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 예약어를 생략하고 생성 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n119&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;dictionary&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;words&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;100&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ES5&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lookup&lt;/span&gt;: &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;find words&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// ES6&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;lookup&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;find words&quot;&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n120&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n121&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n122&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;객체의 속성명과 값 명이 동일할 때 아라와 같이 축약 가능&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n123&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;figures&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;10&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;dictionary&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// figures: figures,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;figures&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;/pre&gt;&lt;h2 cid=&quot;n124&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Modules - 자바스크립트 모듈화 방법&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n125&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n126&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n127&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;자바스크립트 모듈 로더 라이브러리(AMD, Commons JS) 기능을 js 언어 자체에서 지원&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n128&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n129&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;호출되기 전까지는 코드 실행과 동작을 하지 않는 특징이 있음&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n130&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// libs/math.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;y&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;y&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;pi&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3.141592&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n131&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); text-size-adjust: auto; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// main.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; {&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt;} &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'libs/math.js'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n132&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n133&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n134&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Vue.js 에서 마주칠 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;default&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; export&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n135&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n136&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n137&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;default 키워드가 붙으면 한개의 파일에서 하나 밖에 export 되지 않는다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n138&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n139&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;다른 것들이 import 되지 않게 모듈화 한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n140&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// util.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;default&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;x&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n141&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// main.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;util&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'util.js'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;util&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// function(x) { return console.log(x); }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;util&lt;/span&gt;(&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;&quot;hi&quot;&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n142&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// app.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;log&lt;/span&gt; &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'util.js'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;hi&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n144&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Object Spread Operator&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n145&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n146&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n147&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spread 구문(&lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;...&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;)을 사용하면 배열이나 문자열과 같이 반복 가능한 문자를 0개 이상의 인수(함수 호출할 경우) 또는 요소(배열 리터럴의 경우)로 확장하여, 0개 이상의 key-value 쌍의 객체로 확장시킬 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n148&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n149&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;함수 호출에서의 Spread&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n150&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n151&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n152&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;일반적으로 배열의 엘리먼트를 함수의 인수로 사용하고자 할 때 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;Function.prototype.apply&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;를 사용했다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n153&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n154&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;하지만, Spread 문법을 사용해서 대체할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n155&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;sum&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;y&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;z&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;y&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170);&quot;&gt;z&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;numbers&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;2&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;3&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt;(&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;numbers&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// expected output: 6&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;sum&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;apply&lt;/span&gt;(&lt;span class=&quot;cm-atom&quot; style=&quot;box-sizing: border-box; color: rgb(34, 17, 153);&quot;&gt;null&lt;/span&gt;, &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;numbers&lt;/span&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// expected output: 6&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n156&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n157&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;인수 목록의 모든 인수는 Spread 문법을 사용할 수 있으며, 여러번 사용될 수도 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n158&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;myFunction&lt;/span&gt;(&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;v&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;w&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;x&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;y&lt;/span&gt;, &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;z&lt;/span&gt;) { }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;args&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; [&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;1&lt;/span&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;myFunction&lt;/span&gt;(&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;0&lt;/span&gt;, &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;, &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;args&lt;/span&gt;); &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// 2&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n159&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n160&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;strong&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;strong style=&quot;box-sizing: border-box;&quot;&gt;객체 리터럴에서의 Spread&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n161&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n162&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n163&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Object 리터럴에 Spread를 추가하면, 객체가 소유한 열거형 프로퍼티를 새로운 객체로 복사한다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n164&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;obj1&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; { &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;foo&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'bar'&lt;/span&gt;, &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;x&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;42&lt;/span&gt; };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;obj2&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; { &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;foo&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'baz'&lt;/span&gt;, &lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;y&lt;/span&gt;: &lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68);&quot;&gt;13&lt;/span&gt; };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;clonedObj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; { &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;obj1&lt;/span&gt; };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Object { foo: &quot;bar&quot;, x: 42 }&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mergedObj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; { &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;obj1&lt;/span&gt;, &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;obj2&lt;/span&gt; };&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Object { foo: &quot;baz&quot;, x: 42, y: 13 }&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n165&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n166&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES5에서 객체의 특정 값들을 다른 객체로 복사할 때&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n167&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;myObj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'Hello'&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop2&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'World'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;newObj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'George'&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;: &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;myObj&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop2&lt;/span&gt;: &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;myObj&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;newObj&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Hello&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n168&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n169&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ES6의 Spread 연산자를 적용한 후&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n170&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;newObj&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;name&lt;/span&gt;: &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'George'&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;myObj&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;};&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;console&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;log&lt;/span&gt;(&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;newObj&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;); &lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// Hello&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3 cid=&quot;n171&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.5em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.43; cursor: text; white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뷰엑스에서 Object Spread Operator 적용예시&lt;/span&gt;&lt;/h3&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n172&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n173&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n174&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기존 자바스크립트 방식에서 state 속성 선언하는 부분&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n175&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// store.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vuex&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Store&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;: &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop2&lt;/span&gt;: &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop3&lt;/span&gt;: &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n176&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// app.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop1&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop2&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;store&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;state&lt;/span&gt;.&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;prop2&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n177&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n178&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;뷰엑스에서 제공하는 mapState함수를 이용하면 위 코드처럼 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;state&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에 일일이 접근하지 않아도 된다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n179&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapState&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;state&lt;/span&gt; &lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26);&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapState&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'prop1'&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'prop2'&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'prop3'&lt;/span&gt;]);&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n180&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n181&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;mapState에 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;...&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;연산자를 붙여 computed 속성에서 쉽게 뷰엑스의 &lt;/span&gt;&lt;span md-inline=&quot;code&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;code style=&quot;box-sizing: border-box; font-family: var(--monospace); border: 1px solid rgb(231, 234, 237); background-color: rgb(243, 244, 244); border-radius: 3px; padding: 0px 4px 2px; font-size: 0.9em;&quot;&gt;state&lt;/code&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;에 접근할 수 있다.&lt;/span&gt;&lt;/p&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;javascript&quot; contenteditable=&quot;false&quot; cid=&quot;n182&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-size: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0);&quot;&gt;// app.js&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;import&lt;/span&gt; { &lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255);&quot;&gt;mapState&lt;/span&gt; } &lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'vuex'&lt;/span&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136);&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;Vue&lt;/span&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;computed&lt;/span&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;someLocalComputedProp&lt;/span&gt;() { &lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt; },&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85);&quot;&gt;...&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0);&quot;&gt;mapState&lt;/span&gt;([&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'prop1'&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'prop2'&lt;/span&gt;, &lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17);&quot;&gt;'prop3'&lt;/span&gt;])&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;});&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 cid=&quot;n183&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; text-size-adjust: auto;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Reference&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n184&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px 0px; padding-left: 30px; position: relative; caret-color: rgb(51, 51, 51); color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 16px; text-size-adjust: auto;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n185&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n186&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://joshua1988.github.io/web-development/translation/essential-es6-features-for-vuejs/#%EA%B5%AC%EC%A1%B0-%EB%B6%84%ED%95%B4%EC%99%80-%ED%99%95%EC%9E%A5-%EB%AC%B8%EB%B2%95&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://joshua1988.github.io/web-development/translation/essential-es6-features-for-vuejs/#%EA%B5%AC%EC%A1%B0-%EB%B6%84%ED%95%B4%EC%99%80-%ED%99%95%EC%9E%A5-%EB%AC%B8%EB%B2%95&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n187&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n188&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link md-expand&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Spread_syntax&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Vue.js</category>
      <category>arrow function</category>
      <category>babel</category>
      <category>const</category>
      <category>ES6</category>
      <category>Hoisting</category>
      <category>Let</category>
      <category>modules</category>
      <category>object spread operator</category>
      <category>Vue.js</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/105</guid>
      <comments>https://ict-nroo.tistory.com/105#entry105comment</comments>
      <pubDate>Wed, 27 Feb 2019 01:45:36 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Boot] Spring MVC CORS 활용, ajax로 검증</title>
      <link>https://ict-nroo.tistory.com/104</link>
      <description>&lt;blockquote cid=&quot;n2&quot; mdtype=&quot;blockquote&quot; style=&quot;margin: 0.8em 0px; border-left-width: 4px; border-left-color: rgb(223, 226, 229); padding-top: 0px; padding-bottom: 0px; box-sizing: border-box; color: rgb(119, 119, 119); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;p cid=&quot;n3&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;margin-right: 0px; margin-left: 0px; box-sizing: border-box; orphans: 4; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;link&quot; class=&quot;md-link md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;color: rgb(65, 131, 196); box-sizing: border-box; cursor: pointer; -webkit-user-drag: none; font-size: 10pt;&quot;&gt;&lt;a spellcheck=&quot;false&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/&quot; style=&quot;color: rgb(65, 131, 196); box-sizing: border-box; cursor: pointer; -webkit-user-drag: none;&quot;&gt;백기선 - 스프링 부트 개념과 활용&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;h2 cid=&quot;n1966&quot; mdtype=&quot;heading&quot; class=&quot;md-end-block md-heading&quot; style=&quot;box-sizing: border-box; break-after: avoid-page; break-inside: avoid; font-size: 1.75em; margin-top: 1rem; margin-bottom: 1rem; position: relative; line-height: 1.225; cursor: text; padding-bottom: 0.3em; border-bottom: 1px solid rgb(238, 238, 238); white-space: pre-wrap; width: inherit; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;CORS&lt;/span&gt;&lt;/h2&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n321&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0.8em 0px; padding-left: 30px; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n322&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n323&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SOP와 CORS&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n324&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n325&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n326&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Single-Origin Policy&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n327&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n328&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n329&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;단일 Origin에만 요청을 보낼 수 있다는 것을 의미하는 정책&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n330&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n331&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;기본적으로 SOP가 적용되어 있어서, Origin이 다르면 호출할 수 없다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n332&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n333&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;REST API가 &lt;/span&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;http://localhost:8080&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;http://localhost:8080&lt;/a&gt;&lt;/span&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt; 을 통해서 서비스 되고있고, 18080 포트를 사용하는 애플리케이션에서 그 REST API를 호출하려고 한다. 기본적으로 SOP에 위반 되기 때문에 호출하지 못한다.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n334&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n335&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Cross-Origin Resource Sharing&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n336&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n337&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n338&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;SOP를 우회하기 위한 표준&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n339&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n340&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;서로 다른 Origin이 리소스를 공유할 수 있는 기술&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n341&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n342&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;Origin?&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n343&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n344&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n345&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;URI  스키마 (http, https)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n346&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n347&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;hostname (io.namjune, localhost)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n348&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n349&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;포트(8080, 18080)&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n350&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n351&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;&quot; style=&quot;box-sizing: border-box;&quot;&gt;Spring MVC @CrossOrigin &lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n352&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n353&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n354&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;스프링 부트에서 @CrossOrigin에 관한 빈 설정들을 자동으로 해주기 때문에 그냥 사용하면 된다. &lt;/span&gt;또는 WebMvcConfigurer 사용해서 글로벌로 설정할 수 있다.&lt;/p&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n357&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n358&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;@Controller나 @RequestMapping에 추가하거나&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n2616&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n2615&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n2613&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;url&quot; class=&quot;md-link&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; word-break: break-all;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring/docs/5.0.7.RELEASE/spring-framework-reference/web.html#mvc-cors&quot; style=&quot;box-sizing: border-box; cursor: pointer; color: rgb(65, 131, 196); -webkit-user-drag: none;&quot;&gt;https://docs.spring.io/spring/docs/5.0.7.RELEASE/spring-framework-reference/web.html#mvc-cors&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre mdtype=&quot;fences&quot; cid=&quot;n2619&quot; contenteditable=&quot;false&quot; lang=&quot;java&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@RestController&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/account&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255); font-size: 11pt;&quot;&gt;AccountController&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@CrossOrigin&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@GetMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/{id}&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;Account&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;retrieve&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@PathVariable&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;Long&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0); font-size: 11pt;&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@DeleteMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/{id}&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@PathVariable&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;Long&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0); font-size: 11pt;&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; contenteditable=&quot;false&quot; cid=&quot;n2620&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@CrossOrigin&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;origins&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26); font-size: 11pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;http://domain2.com&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;maxAge&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-operator&quot; style=&quot;box-sizing: border-box; color: rgb(152, 26, 26); font-size: 11pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-number&quot; style=&quot;box-sizing: border-box; color: rgb(17, 102, 68); font-size: 11pt;&quot;&gt;3600&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@RestController&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@RequestMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/account&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255); font-size: 11pt;&quot;&gt;AccountController&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@GetMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/{id}&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;Account&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;retrieve&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@PathVariable&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;Long&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0); font-size: 11pt;&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span cm-text=&quot;&quot; style=&quot;box-sizing: border-box; font-size: 11pt;&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@DeleteMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/{id}&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;remove&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@PathVariable&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;Long&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-comment&quot; style=&quot;box-sizing: border-box; color: rgb(170, 85, 0); font-size: 11pt;&quot;&gt;// ...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n359&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n360&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;WebMvcConfigurer 사용해서 글로벌 설정&lt;/span&gt;&lt;/p&gt;&lt;ul class=&quot;ul-list&quot; cid=&quot;n361&quot; mdtype=&quot;list&quot; data-mark=&quot;*&quot; style=&quot;box-sizing: border-box; margin: 0px; padding-left: 30px; position: relative;&quot;&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n362&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n363&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;모든 api를 localhost:9090에 CORS 허용하도록 등록&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;pre spellcheck=&quot;false&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; lang=&quot;java&quot; contenteditable=&quot;false&quot; cid=&quot;n364&quot; mdtype=&quot;fences&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@Configuration&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255); font-size: 11pt;&quot;&gt;WebConfig&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;implements&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;WebMvcConfigurer&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;public&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable-3&quot; style=&quot;box-sizing: border-box; color: rgb(0, 136, 85); font-size: 11pt;&quot;&gt;void&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;addCorsMappings&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;CorsRegistry&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;registry&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;registry&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;addMapping&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/**&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;allowedOrigins&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;http://localhost:9090&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp;  }&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li class=&quot;md-list-item&quot; cid=&quot;n365&quot; mdtype=&quot;list_item&quot; style=&quot;box-sizing: border-box; margin: 0px; position: relative;&quot;&gt;&lt;p cid=&quot;n366&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block&quot; style=&quot;box-sizing: border-box; orphans: 4; margin-right: 0px; margin-bottom: 0.5rem; margin-left: 0px; white-space: pre-wrap; position: relative;&quot;&gt;&lt;span md-inline=&quot;plain&quot; style=&quot;box-sizing: border-box;&quot;&gt;ajax로 CORS 동작 확인하기&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;pre mdtype=&quot;fences&quot; cid=&quot;n2626&quot; contenteditable=&quot;false&quot; lang=&quot;html&quot; class=&quot;md-fences md-end-block ty-contain-cm modeLoaded&quot; spellcheck=&quot;false&quot; style=&quot;box-sizing: border-box; overflow: visible; font-family: var(--monospace); font-size: 0.9em; break-inside: avoid; white-space: normal; background-image: inherit; background-position: inherit; background-size: inherit; background-repeat: inherit; background-attachment: inherit; background-origin: inherit; background-clip: inherit; background-color: rgb(248, 248, 248); border: 1px solid rgb(231, 234, 237); border-radius: 3px; padding: 8px 1em 6px; margin-bottom: 15px; margin-top: 15px; width: inherit; color: rgb(51, 51, 51); position: relative !important;&quot;&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-meta&quot; style=&quot;box-sizing: border-box; color: rgb(85, 85, 85); font-size: 11pt;&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;html&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204); font-size: 11pt;&quot;&gt;lang&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;en&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;meta&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204); font-size: 11pt;&quot;&gt;charset&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;Title&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;head&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;h1&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;CORS Test&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;h1&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;script&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;cm-attribute&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 204); font-size: 11pt;&quot;&gt;src&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;/webjars/jquery/dist/jquery.min.js&quot;&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;ajax&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;http://localhost:8080/hello&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;/span&gt;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;done&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-def&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 255); font-size: 11pt;&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;) {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-variable-2&quot; style=&quot;box-sizing: border-box; color: rgb(0, 85, 170); font-size: 11pt;&quot;&gt;msg&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  })&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  .&lt;/span&gt;&lt;span class=&quot;cm-property&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;fail&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-keyword&quot; style=&quot;box-sizing: border-box; color: rgb(119, 0, 136); font-size: 11pt;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;() {&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class=&quot;cm-variable&quot; style=&quot;box-sizing: border-box; color: rgb(0, 0, 0); font-size: 11pt;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;cm-string&quot; style=&quot;box-sizing: border-box; color: rgb(170, 17, 17); font-size: 11pt;&quot;&gt;&quot;fail&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 11pt;&quot;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;  });&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px; font-size: 11pt;&quot;&gt;  });&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;script&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span role=&quot;presentation&quot; style=&quot;box-sizing: border-box; padding-right: 0.1px;&quot;&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;cm-tag&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;html&lt;/span&gt;&lt;span class=&quot;cm-tag cm-bracket&quot; style=&quot;box-sizing: border-box; color: rgb(17, 119, 0); font-size: 11pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p cid=&quot;n2627&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt; &lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n2627&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n2627&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n2627&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n2627&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p cid=&quot;n2627&quot; mdtype=&quot;paragraph&quot; class=&quot;md-end-block md-focus&quot; style=&quot;box-sizing: border-box; orphans: 4; margin: 0.8em 0px; white-space: pre-wrap; width: inherit; position: relative; color: rgb(51, 51, 51); font-family: &amp;quot;Open Sans&amp;quot;, &amp;quot;Clear Sans&amp;quot;, &amp;quot;Helvetica Neue&amp;quot;, Helvetica, Arial, sans-serif; font-size: 14px;&quot;&gt;&lt;span md-inline=&quot;plain&quot; class=&quot;md-expand&quot; style=&quot;box-sizing: border-box;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>ICT Eng/Spring</category>
      <category>@CrossOrigin</category>
      <category>Ajax</category>
      <category>cors</category>
      <category>Spring</category>
      <category>Spring Boot</category>
      <author>nroo</author>
      <guid isPermaLink="true">https://ict-nroo.tistory.com/104</guid>
      <comments>https://ict-nroo.tistory.com/104#entry104comment</comments>
      <pubDate>Fri, 25 Jan 2019 11:17:17 +0900</pubDate>
    </item>
  </channel>
</rss>