<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>MOVEMENT.DEV</title>
    <link>https://mvmthyun.tistory.com/</link>
    <description>함께 하는 것을 아는 미래 개발자</description>
    <language>ko</language>
    <pubDate>Sun, 28 Jun 2026 02:11:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>MVMT</managingEditor>
    <image>
      <title>MOVEMENT.DEV</title>
      <url>https://tistory1.daumcdn.net/tistory/5895240/attach/9a2425d9e76740abb2de99062fa4535a</url>
      <link>https://mvmthyun.tistory.com</link>
    </image>
    <item>
      <title>Eclipse | Problems During Content Assist</title>
      <link>https://mvmthyun.tistory.com/207</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;에러 내용&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;The 'org.eclipse.recommenders.completion.rcp.javaCompletionProposalComputer.intelligent' proposal computer from the 'org.eclipse.recommenders.completion.rcp' plug-in did not complete normally. The extension took too long to return from the 'computeCompletionProposal()' operation. To avoid the message, disable the 'org.eclipse.recommenders.completion.rcp' plug-in or disable the 'Java Proposals (Code Recommenders) category on the content assist preference page.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파파고 번역&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;'org.eclipse.recommenders.completion.rcp.javaCompletionProposalCompletionProposalComputer'.'dll.dll.dlls.dlls.dlls.rcp' 플러그인의 intelligent' 제안 컴퓨터가 정상적으로 완료되지 않았습니다. 확장이 'computeCompletionProposal()' 작업에서 돌아오는 데 너무 오래 걸렸습니다. 메시지가 표시되지 않도록 하려면 'org.eclipse.recommenders.completion.rcp' 플러그인을 사용하지 않도록 설정하거나 콘텐츠 지원 기본 설정 페이지에서 'Java Proposals(코드 추천자)' 범주를 사용하지 않도록 설정합니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tMvs7/btslbQcFzwZ/TuHnl4Bk37KpfQKAdgXTLk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tMvs7/btslbQcFzwZ/TuHnl4Bk37KpfQKAdgXTLk/img.jpg&quot; data-alt=&quot;어려운건 모르겠고.. 해결방법 좀 알려줘..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tMvs7/btslbQcFzwZ/TuHnl4Bk37KpfQKAdgXTLk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtMvs7%2FbtslbQcFzwZ%2FTuHnl4Bk37KpfQKAdgXTLk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;480&quot; height=&quot;361&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;어려운건 모르겠고.. 해결방법 좀 알려줘..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해결 과정&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://ryang555.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;량량&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687742717099&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[이클립스에러]Problems During Content Assist&quot; data-og-description=&quot;|오류 문구 The 'org.eclipse.recommenders.completion.rcp.javaCompletionProposalComputer.intelligent' proposal computer from the 'org.eclipse.recommenders.completion.rcp' plug-in did not complete normally. The extension took too long to return from the '&quot; data-og-host=&quot;ryang555.tistory.com&quot; data-og-source-url=&quot;https://ryang555.tistory.com/39&quot; data-og-url=&quot;https://ryang555.tistory.com/39&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RoZd2/hyS8xa8Kh7/pYosP3XWMuXqUyLYXaFejk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gym7o/hyS6I6rTPs/KoIlhqub5oUbwVwOsRf4gK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://ryang555.tistory.com/39&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ryang555.tistory.com/39&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RoZd2/hyS8xa8Kh7/pYosP3XWMuXqUyLYXaFejk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gym7o/hyS6I6rTPs/KoIlhqub5oUbwVwOsRf4gK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[이클립스에러]Problems During Content Assist&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;|오류 문구 The 'org.eclipse.recommenders.completion.rcp.javaCompletionProposalComputer.intelligent' proposal computer from the 'org.eclipse.recommenders.completion.rcp' plug-in did not complete normally. The extension took too long to return from the '&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ryang555.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://countryxide.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://countryxide.tistory.com/7&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1687742802488&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[STS] Problems During Content Assist 오류&quot; data-og-description=&quot;STS 3.8.3 버전을 설치하고 Annotation의 자동완성 기능을 사용하려고Ctrl + Space 키를 눌렀는데, 한참 멈추다가 다음과 같은 에러가 발생 했다! 왠만해서는 이런 일이 발생하지 않았는데, 왠걸.구글링&quot; data-og-host=&quot;countryxide.tistory.com&quot; data-og-source-url=&quot;https://countryxide.tistory.com/7&quot; data-og-url=&quot;https://countryxide.tistory.com/7&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bYynTu/hyS6B0yFGC/XRIXluXaKDyl19pvE9P8I1/img.png?width=500&amp;amp;height=482&amp;amp;face=0_0_500_482,https://scrap.kakaocdn.net/dn/wiV5p/hyS6HGr1gR/ruHScKyAwKSoLSquY8LNF0/img.png?width=500&amp;amp;height=482&amp;amp;face=0_0_500_482,https://scrap.kakaocdn.net/dn/bS8BjK/hyS6vMOa56/U0OcUZ6pxnf6krs41w44sK/img.png?width=500&amp;amp;height=710&amp;amp;face=0_0_500_710&quot;&gt;&lt;a href=&quot;https://countryxide.tistory.com/7&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://countryxide.tistory.com/7&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bYynTu/hyS6B0yFGC/XRIXluXaKDyl19pvE9P8I1/img.png?width=500&amp;amp;height=482&amp;amp;face=0_0_500_482,https://scrap.kakaocdn.net/dn/wiV5p/hyS6HGr1gR/ruHScKyAwKSoLSquY8LNF0/img.png?width=500&amp;amp;height=482&amp;amp;face=0_0_500_482,https://scrap.kakaocdn.net/dn/bS8BjK/hyS6vMOa56/U0OcUZ6pxnf6krs41w44sK/img.png?width=500&amp;amp;height=710&amp;amp;face=0_0_500_710');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[STS] Problems During Content Assist 오류&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;STS 3.8.3 버전을 설치하고 Annotation의 자동완성 기능을 사용하려고Ctrl + Space 키를 눌렀는데, 한참 멈추다가 다음과 같은 에러가 발생 했다! 왠만해서는 이런 일이 발생하지 않았는데, 왠걸.구글링&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;countryxide.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다른 블로그를 참고해 적용해봤지만, 이 블로그의 방법이 제대로 작동했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해결 방안&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Window -&amp;gt; Preferences -&amp;gt; Java -&amp;gt; Editor -&amp;gt; Content Assist -&amp;gt; Advanced&lt;br /&gt;&lt;br /&gt;|기존&lt;br /&gt;Java Proposals 체크 해제&lt;br /&gt;Java&amp;nbsp;Proposals(&amp;nbsp;Code&amp;nbsp;Recommenders&amp;nbsp;)&amp;nbsp;체크 &lt;br /&gt;&lt;br /&gt;|변경후 &lt;br /&gt;Java Proposals 체크 &lt;br /&gt;Java Proposals( Code Recommenders ) 체크 해제&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehUoXm/btslhdx8jDy/KUhBqCg1yqJwP0XgbGcpm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehUoXm/btslhdx8jDy/KUhBqCg1yqJwP0XgbGcpm0/img.jpg&quot; data-alt=&quot;편 ㅡ 안&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehUoXm/btslhdx8jDy/KUhBqCg1yqJwP0XgbGcpm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehUoXm%2Fbtslhdx8jDy%2FKUhBqCg1yqJwP0XgbGcpm0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;498&quot; height=&quot;375&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;편 ㅡ 안&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;느낀점&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;편하자고 셋팅한 환경설정들이 조금씩 틀어지는 기분이랄까..&lt;/span&gt;&lt;span style=&quot;&quot;&gt;조금만 버텨줘 IDE..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category> ️ IDE/Eclipse</category>
      <category>eclipse</category>
      <category>Problems During Content Assist</category>
      <category>자동완성</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/207</guid>
      <comments>https://mvmthyun.tistory.com/207#entry207comment</comments>
      <pubDate>Mon, 26 Jun 2023 10:29:38 +0900</pubDate>
    </item>
    <item>
      <title>Spring/Mybatis | Mybatis SqlSession</title>
      <link>https://mvmthyun.tistory.com/206</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 내용은 공부의 목적으로 기록되었으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 내용은 모두 구글 검색으로 공부 블로그를 참고하여 작성했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열심히 배우는 중입니다. 감사합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qMHZ2/btsj3mppE7O/n0kI5Z0CZyfpkiYkXqqPi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qMHZ2/btsj3mppE7O/n0kI5Z0CZyfpkiYkXqqPi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qMHZ2/btsj3mppE7O/n0kI5Z0CZyfpkiYkXqqPi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqMHZ2%2Fbtsj3mppE7O%2Fn0kI5Z0CZyfpkiYkXqqPi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;259&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  SqlSessionFactoryBean / SqlSessionTemplate&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;SqlSessionFactory: SqlSession을 생성해서 제공&lt;br /&gt;SqlSession: SQL명령을 수행하는데 필요한 메서드 제공&lt;br /&gt;&lt;br /&gt;SqlSessionFactoryBean: SqlSessionFactory를 Spring에서 사용하기 위한 빈&lt;br /&gt;SqlSessionTemplate: SQL명령을 수행하는데 필요한 메서드 제공 &lt;u&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;thread-safe&lt;/b&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Thread Safe란?&lt;/span&gt;&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;스레드 안전(Thread Safety)&lt;/b&gt;은 멀티 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일 때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서의 함수의 수행 결과가 올바로 나오는 것으로 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgmBkM/btsjYwmh7ov/a4KyEbg9MFJRnL4mzWnfN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgmBkM/btsjYwmh7ov/a4KyEbg9MFJRnL4mzWnfN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgmBkM/btsjYwmh7ov/a4KyEbg9MFJRnL4mzWnfN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgmBkM%2FbtsjYwmh7ov%2Fa4KyEbg9MFJRnL4mzWnfN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;126&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://gompangs.tistory.com/entry/OS-Thread-Safe%EB%9E%80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;곰팡이 먼지연구소&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  SqlSessionFactoryBean과 SqlSessionTemplate 사용 준비&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://mvnrepository.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mvnrepository.com/&lt;/a&gt; 에서 mybatis를 검색하여 버전을 확인하고 dependency를 pom.xml에 복사/붙여넣기 하면 된다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Spring에서 사용하기 위해 &lt;b&gt;mybatis&lt;/b&gt;와 &lt;b&gt;mybatis-spring&lt;/b&gt; 를 적용했다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1686803855593&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- pom.xml --&amp;gt;
&amp;lt;!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.mybatis&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;mybatis&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.5.9&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;
&amp;lt;!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring --&amp;gt;
&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.mybatis&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;mybatis-spring&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.0.7&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  SqlSessionFactoryBean과 SqlSessionTemplate 구성&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1686803804214&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- root-context.xml --&amp;gt;
&amp;lt;bean id=&quot;sqlSessionFactory&quot; class=&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&amp;gt;
    &amp;lt;property name=&quot;dataSource&quot; ref=&quot;dataSource&quot;/&amp;gt;
    &amp;lt;property name=&quot;configLocation&quot;  value=&quot;classpath:mybatis-config.xml&quot;/&amp;gt;
    &amp;lt;!--&amp;lt;property name=&quot;mapperLocations&quot; value=&quot;classpath:mapper/*Mapper.xml&quot;/&amp;gt;--&amp;gt;
&amp;lt;/bean&amp;gt;

&amp;lt;bean id=&quot;sqlSession&quot; class=&quot;org.mybatis.spring.SqlSessionTemplate&quot;&amp;gt;
    &amp;lt;constructor-arg ref=&quot;sqlSessionFactory&quot;/&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  SqlSession의 주요 메서드&lt;/span&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 105px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 60.5813%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;메서드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%; height: 20px; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 60.5813%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;int insert(String statement)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;int insert(String statement, Object parameter)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;insert문을 실행하고, insert된 행의 갯수를 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 60.5813%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;int delete(String statement)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;int delete(&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;String statement, Object parameter)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;delete문을 실행하고, delete된 행의 갯수를 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 60.5813%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;int update(String statement)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;int update(&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;String statement, Object parameter)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;update문을 실행하고, update된 행의 갯수를 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 60.5813%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;T selectOne(String statement)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;T selectOne(&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;String statement, Object parameter)&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나의 행을 반환하는 select에 사용&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;parameter로 SQL에 binding될 값 제공&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 60.5813%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;List&amp;lt;E&amp;gt; selectList(String statement)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;List&amp;lt;E&amp;gt; selectList(String statement, &lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;Object parameter&lt;/span&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%; height: 17px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여러 행을 반환하는 select에 사용&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;parameter로 SQL에 binding될 값 제공&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 60.5813%;&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Map&amp;lt;K, V&amp;gt; selectMap(String statement, String keyCol)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;Map&amp;lt;K, V&amp;gt;&lt;/span&gt; selectMap(String statement, &lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;String keyCol, &lt;/span&gt;&lt;span style=&quot;background-color: #efefef; color: #333333; text-align: start;&quot;&gt;Object parameter&lt;/span&gt;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 39.4187%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여러 행을 반환하는 select에 사용&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;keyCol에 map의 key로 사용할 컬럼 지정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  Mapper XML의 작성&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvTfek/btsj04bssjG/CWTkHx6Y2JXWPd8EWpzzkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvTfek/btsj04bssjG/CWTkHx6Y2JXWPd8EWpzzkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvTfek/btsj04bssjG/CWTkHx6Y2JXWPd8EWpzzkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvTfek%2Fbtsj04bssjG%2FCWTkHx6Y2JXWPd8EWpzzkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;540&quot; height=&quot;349&quot; data-origin-width=&quot;540&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사진 출처 | &lt;a href=&quot;https://moonhy7.tistory.com/entry/Spring-2%EC%9E%A5-Mapper-XML-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;문코딩&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686804983254&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring] 2장 Mapper XML 파일 설정 - Mybatis 구조와 Mapper XML 파일 구조 및 엘리먼트(select, insert, update, del&quot; data-og-description=&quot;실습 코드 참조 moonhy7/SpringFramework: Spring Framework 실습 코드 정리 (github.com) GitHub - moonhy7/SpringFramework: Spring Framework 실습 코드 정리 Spring Framework 실습 코드 정리. Contribute to moonhy7/SpringFramework developmen&quot; data-og-host=&quot;moonhy7.tistory.com&quot; data-og-source-url=&quot;https://moonhy7.tistory.com/entry/Spring-2%EC%9E%A5-Mapper-XML-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95&quot; data-og-url=&quot;https://moonhy7.tistory.com/entry/Spring-2%EC%9E%A5-Mapper-XML-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbnLUD/hyS0gIuuSk/ncXjrKb85xxGSvdVkaZi61/img.png?width=565&amp;amp;height=484&amp;amp;face=0_0_565_484,https://scrap.kakaocdn.net/dn/bQVknL/hyS0dSylN7/yd888bnpOYkx2YyMQ4tKik/img.png?width=565&amp;amp;height=484&amp;amp;face=0_0_565_484,https://scrap.kakaocdn.net/dn/qda9T/hyS0moqiTB/SsiOoy5oZTbM538ZN7pL4k/img.png?width=1449&amp;amp;height=455&amp;amp;face=0_0_1449_455&quot;&gt;&lt;a href=&quot;https://moonhy7.tistory.com/entry/Spring-2%EC%9E%A5-Mapper-XML-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://moonhy7.tistory.com/entry/Spring-2%EC%9E%A5-Mapper-XML-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbnLUD/hyS0gIuuSk/ncXjrKb85xxGSvdVkaZi61/img.png?width=565&amp;amp;height=484&amp;amp;face=0_0_565_484,https://scrap.kakaocdn.net/dn/bQVknL/hyS0dSylN7/yd888bnpOYkx2YyMQ4tKik/img.png?width=565&amp;amp;height=484&amp;amp;face=0_0_565_484,https://scrap.kakaocdn.net/dn/qda9T/hyS0moqiTB/SsiOoy5oZTbM538ZN7pL4k/img.png?width=1449&amp;amp;height=455&amp;amp;face=0_0_1449_455');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Spring] 2장 Mapper XML 파일 설정 - Mybatis 구조와 Mapper XML 파일 구조 및 엘리먼트(select, insert, update, del&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;실습 코드 참조 moonhy7/SpringFramework: Spring Framework 실습 코드 정리 (github.com) GitHub - moonhy7/SpringFramework: Spring Framework 실습 코드 정리 Spring Framework 실습 코드 정리. Contribute to moonhy7/SpringFramework developmen&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;moonhy7.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://fastcampus.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;패스트캠퍼스 스프링의 정석&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686805036414&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;패스트캠퍼스 [직장인 실무교육]&quot; data-og-description=&quot;프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.&quot; data-og-host=&quot;fastcampus.co.kr&quot; data-og-source-url=&quot;https://fastcampus.co.kr/&quot; data-og-url=&quot;https://fastcampus.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zZzCX/hyS0nt5RT1/al3hYGVLeVBF3SmK1gJgSK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/hcT80/hySZ8wXMui/7CNcszitrsxvGw8ITKwBvk/img.png?width=2560&amp;amp;height=900&amp;amp;face=0_0_2560_900&quot;&gt;&lt;a href=&quot;https://fastcampus.co.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://fastcampus.co.kr/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zZzCX/hyS0nt5RT1/al3hYGVLeVBF3SmK1gJgSK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/hcT80/hySZ8wXMui/7CNcszitrsxvGw8ITKwBvk/img.png?width=2560&amp;amp;height=900&amp;amp;face=0_0_2560_900');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;패스트캠퍼스 [직장인 실무교육]&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;fastcampus.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/  Spring</category>
      <category>mybatis</category>
      <category>Spring</category>
      <category>sqlsession</category>
      <category>SqlSessionFactoryBean</category>
      <category>SqlSessionTemplate</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/206</guid>
      <comments>https://mvmthyun.tistory.com/206#entry206comment</comments>
      <pubDate>Thu, 15 Jun 2023 13:58:20 +0900</pubDate>
    </item>
    <item>
      <title>Spring | DI(Dependency Injection)</title>
      <link>https://mvmthyun.tistory.com/205</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 내용은 공부의 목적으로 기록되었으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 내용은 모두 구글 검색으로 공부 블로그를 참고하여 작성했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열심히 배우는 중입니다. 감사합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OmNm2/btsjPI8MyaC/icVztazc70to7chqAH5A91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OmNm2/btsjPI8MyaC/icVztazc70to7chqAH5A91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OmNm2/btsjPI8MyaC/icVztazc70to7chqAH5A91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOmNm2%2FbtsjPI8MyaC%2FicVztazc70to7chqAH5A91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;512&quot; height=&quot;341&quot; data-origin-width=&quot;512&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  의존성 주입 DI(Dependency Injection)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Spring 프레임워크는 &lt;b&gt;3가지 핵심 프로그래밍 모델&lt;/b&gt;을 지원하고 있다. 그 중 하나가 의존성 주입(DI)이다.&lt;br /&gt;&lt;b&gt;의존성 주입(DI)이란&lt;/b&gt; 외부에서 두 객체 간의 관계를 결정해주는 디자인 패턴으로, 인터페이스를 사이에 둬서 클래스 레벨에서는 의존관계가 고정되지 않도록 하고 런타임 시에 관계를 동적으로 주입하여 유연성을 확보하고 결합도를 낮출 수 있게 해준다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 객체가 다른 객체를 사용할 때 의존성이 있다고 함.&lt;/li&gt;
&lt;li&gt;런타임 시 의존 관계를 맺는 대상을 외부에서 결정하고 주입해 준다.&lt;/li&gt;
&lt;li&gt;스프링 프레임워크는 DI 기능을 지원해주는 프레임워크이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ysRxE/btsjX34mkew/oCLFgnhmNdQQjao73cea50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ysRxE/btsjX34mkew/oCLFgnhmNdQQjao73cea50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ysRxE/btsjX34mkew/oCLFgnhmNdQQjao73cea50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FysRxE%2FbtsjX34mkew%2FoCLFgnhmNdQQjao73cea50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;191&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;의존성 주입의 장점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;의존성 주입을 인터페이스 기반으로 설계하면, 코드가 유연해진다.&lt;/li&gt;
&lt;li&gt;느슨한 결합도(loose coupling) 설계&lt;/li&gt;
&lt;li&gt;변경에 유연해진다.&lt;/li&gt;
&lt;li&gt;결합도가 낮은 객체끼리는 부품을 쉽게 갈아끼울 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://mangkyu.tistory.com/150&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;망나니개발자&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686724502120&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유&quot; data-og-description=&quot;1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Inj&quot; data-og-host=&quot;mangkyu.tistory.com&quot; data-og-source-url=&quot;https://mangkyu.tistory.com/150&quot; data-og-url=&quot;https://mangkyu.tistory.com/150&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GrXoR/hyS0m2fHSj/rAr4gqcg6V9Uzl5KOwnFdk/img.png?width=800&amp;amp;height=469&amp;amp;face=0_0_800_469,https://scrap.kakaocdn.net/dn/gN33h/hySYBNuAbV/8VaF4nXFxtKyPW6gHilgK0/img.png?width=800&amp;amp;height=469&amp;amp;face=0_0_800_469,https://scrap.kakaocdn.net/dn/cY70Ju/hySYJLxli2/WkwU6NcBVO1wQTBHXvpfQK/img.png?width=886&amp;amp;height=520&amp;amp;face=0_0_886_520&quot;&gt;&lt;a href=&quot;https://mangkyu.tistory.com/150&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mangkyu.tistory.com/150&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/GrXoR/hyS0m2fHSj/rAr4gqcg6V9Uzl5KOwnFdk/img.png?width=800&amp;amp;height=469&amp;amp;face=0_0_800_469,https://scrap.kakaocdn.net/dn/gN33h/hySYBNuAbV/8VaF4nXFxtKyPW6gHilgK0/img.png?width=800&amp;amp;height=469&amp;amp;face=0_0_800_469,https://scrap.kakaocdn.net/dn/cY70Ju/hySYJLxli2/WkwU6NcBVO1wQTBHXvpfQK/img.png?width=886&amp;amp;height=520&amp;amp;face=0_0_886_520');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Spring] 의존성 주입(Dependency Injection, DI)이란? 및 Spring이 의존성 주입을 지원하는 이유&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 의존성 주입(Dependency Injection)의 개념과 필요성 [ 의존성 주입(Dependency Injection) 이란? ] Spring 프레임워크는 3가지 핵심 프로그래밍 모델을 지원하고 있는데, 그 중 하나가 의존성 주입(Dependency Inj&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mangkyu.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/  Spring</category>
      <category>dependency injection</category>
      <category>di</category>
      <category>Spring</category>
      <category>의존성 주입</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/205</guid>
      <comments>https://mvmthyun.tistory.com/205#entry205comment</comments>
      <pubDate>Wed, 14 Jun 2023 15:36:04 +0900</pubDate>
    </item>
    <item>
      <title>Spring | Reflection을 사용하여 Annotation 가져오기</title>
      <link>https://mvmthyun.tistory.com/204</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 내용은 공부의 목적으로 기록되었으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 내용은 모두 구글 검색으로 공부 블로그를 참고하여 작성했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열심히 배우는 중입니다. 감사합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CzcWS/btsjPLchzfg/mieWHSnwxigz5x7vzdBXI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CzcWS/btsjPLchzfg/mieWHSnwxigz5x7vzdBXI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CzcWS/btsjPLchzfg/mieWHSnwxigz5x7vzdBXI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCzcWS%2FbtsjPLchzfg%2FmieWHSnwxigz5x7vzdBXI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;312&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  리플렉션 (Reflection)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;리플렉션은 생성자, 메소드, 필드 등 클래스에 대한 정보를 아주 자세히 알려주는 자바 API 이다.&lt;br /&gt;대표적인 예시로 여러 라이브러리, 프레임워크에서 사용되는 어노테이션이 리플렉션을 통해 확인하는 방법 등이 있다.&lt;br /&gt;리플렉션을 사용하면 접근 제어자와 무관하게 클래스의 필드나 메소드도 가져와서 호출할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  어노테이션 (Annotation) 가져오기&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;대표적인 예시 중 하나를 실습해봤다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  임의 어노테이션 생성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어노테이션의 폴더 구성&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQM4C5/btsjRmbxsRQ/M2ANcvQ0p6QJDk3l0Ck4nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQM4C5/btsjRmbxsRQ/M2ANcvQ0p6QJDk3l0Ck4nK/img.png&quot; data-alt=&quot;Controller, RequestMapping, Service 를 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQM4C5/btsjRmbxsRQ/M2ANcvQ0p6QJDk3l0Ck4nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQM4C5%2FbtsjRmbxsRQ%2FM2ANcvQ0p6QJDk3l0Ck4nK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;294&quot; height=&quot;229&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Controller, RequestMapping, Service 를 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;임의 어노테이션의 코드&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1686647888588&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mvcpractice.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  어노테이션 선언코드&lt;/span&gt;&lt;/h3&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어노테이션을 선언하기 위한 코드로 @Target 이라는 기능이 있다. 해당 사용자가 만든 어노테이션이 부착될 수 있는 타입을 지정한다. (타입: 클래스, 생성자, 메서드 등등)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어노테이션 선언코드 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용자 생성: @Controller&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686648154502&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.lang.annotation.ElementType;

@Target({ElementType.TYPE})
// TYPE 이외에도 CONSTRUCTOR, METHOD, FIELD 가 있으며, 원하는 타입을 작성한다.
public @interface Controller {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;@Retention은 해당 어노테이션이 언제까지 유지할지 알려주는 어노테이션이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;어노테이션을 선언하기 위해서 사용자의 생성 어노테이션 또한 어느 시점까지 유효한지를 명시해줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686648450856&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;@Retention에 사용하는 &lt;/span&gt;RetentionPolicy는 SOURCE, CLASS, RUNTIME 이렇게 3가지 속성을 사용할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;* SOURCE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 커스텀한 어노테이션을 주석처럼 사용하고 싶을 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 사용할 경우 컴파일 후 생성된 .class 에 해당 어노테이션 정보가 사라지고 소스코드까지만 유지한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 컴파일 후 해당 어노테이션은 사라진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;* CLASS&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- @Retention의 기본값 클래스 타입이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 런타임 시 클래스를 메모리로 읽어오면 해당 정보는 사라진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;* RUNTIME&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 클래스를 메모리에 읽어왔을 때까지 유지한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 코드에서 이 정보를 바탕으로 특정 로직을 실행할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  어노테이션 부착 클래스 생성&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzgpek/btsjRlcE72d/SN4A4IklyKMu3byDoCngYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzgpek/btsjRlcE72d/SN4A4IklyKMu3byDoCngYk/img.png&quot; data-alt=&quot;HomeController.class&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzgpek/btsjRlcE72d/SN4A4IklyKMu3byDoCngYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzgpek%2FbtsjRlcE72d%2FSN4A4IklyKMu3byDoCngYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;229&quot; data-origin-width=&quot;320&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HomeController.class&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생성한 어노테이션을 부착할 클래스를 생성한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1686648916991&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mvcpractice.controller;

import com.example.mvcpractice.annotation.Controller;
// 해당 패키지를 확인하면 사용자 생성 어노테이션임을 알 수 있다.
import com.example.mvcpractice.annotation.RequestMapping;
import com.example.mvcpractice.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Controller // 사용자 생성 어노테이션
public class HomeController {

    @RequestMapping(value = &quot;/&quot;, method = RequestMethod.GET)
    public String home(HttpServletRequest request, HttpServletResponse response) {
        return &quot;home&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  테스트 코드&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;테스트 클래스 생성&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;327&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zIZyW/btsjR8c43pB/QgxAeQE2MgG1l41g1YkZfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zIZyW/btsjR8c43pB/QgxAeQE2MgG1l41g1YkZfk/img.png&quot; data-alt=&quot;ReflectionTest.class&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zIZyW/btsjR8c43pB/QgxAeQE2MgG1l41g1YkZfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzIZyW%2FbtsjR8c43pB%2FQgxAeQE2MgG1l41g1YkZfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;351&quot; height=&quot;327&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;327&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ReflectionTest.class&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;테스트 코드&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1686649028748&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mvcpractice;

import com.example.mvcpractice.annotation.Controller;
import com.example.mvcpractice.annotation.Service;
import org.junit.jupiter.api.Test;
import org.reflections.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class ReflectionTest {
    private static final Logger logger = LoggerFactory.getLogger(ReflectionTest.class);
    // 사용자가 생성한 어노테이션을 로그로 확인한다.

    @Test
    void controllerScan() {
        Set&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt; beans = getTypesAnnotatedWith(List.of(Controller.class, Service.class));

        logger.info(&quot;beans: [{}]&quot;, beans);
        // beans 에 담긴 내용을 로그를 통해 확인할 수 있다.
    }

    // getTypesAnnotatedWith() 메서드를 통해 Controller과 Service 어노테이션이 부착된 클래스를 찾는다.
    private static Set&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt; getTypesAnnotatedWith(List&amp;lt;Class&amp;lt;? extends Annotation&amp;gt;&amp;gt; annotations) {
        Reflections reflections = new Reflections(&quot;com.example.mvcpractice&quot;);
        // reflection 의 해당 패키지 밑에 있는 클래스에 대한 정보를 가져온다.

        Set&amp;lt;Class&amp;lt;?&amp;gt;&amp;gt; beans = new HashSet&amp;lt;&amp;gt;();
        annotations.forEach(annotation -&amp;gt; beans.addAll(reflections.getTypesAnnotatedWith(annotation)));
        // reflections.getTypesAnnotatedWith() 의 함수를 사용해 클래스가 위치한 패키지 정보를 담는다.

        return beans;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실행 결과&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;115&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8wH97/btsjH2ztSk9/MkjHNax84uKXNYplZCZbxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8wH97/btsjH2ztSk9/MkjHNax84uKXNYplZCZbxk/img.png&quot; data-alt=&quot;어노테이션 Controller와 Service 가 부착된 클래스 정보를 가져왔다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8wH97/btsjH2ztSk9/MkjHNax84uKXNYplZCZbxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8wH97%2FbtsjH2ztSk9%2FMkjHNax84uKXNYplZCZbxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;964&quot; height=&quot;115&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;115&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;어노테이션 Controller와 Service 가 부착된 클래스 정보를 가져왔다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테스트 코드2&lt;/h4&gt;
&lt;pre id=&quot;code_1686651291450&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @Test
    void showClass() {
        Class&amp;lt;User&amp;gt; clazz = User.class;
        logger.info(clazz.getName());

        logger.info(&quot;User all declarde fields [{}]&quot;, Arrays.stream(clazz.getDeclaredFields()).collect(Collectors.toList()));
        // getDeclaredFields(): User 클래스에 선언된 모든 필드(String userId, String name)를 가져온다.
        logger.info(&quot;User all declarde constructors [{}]&quot;, Arrays.stream(clazz.getDeclaredConstructors()).collect(Collectors.toList()));
        // getDeclaredConstructors(): User 클래스에 선언 되어있는 모든 생성자(User(...))를 가져온다.
        logger.info(&quot;User all declarde Methods [{}]&quot;, Arrays.stream(clazz.getDeclaredMethods()).collect(Collectors.toList()));
        // getDeclaredMethods(): User 클래스에 선언된 메소드(equalsUser(...))를 가져온다.
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실행 결과&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvBZIm/btsjPr5TvPY/6T3uT7us4AkREqRpPRVgK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvBZIm/btsjPr5TvPY/6T3uT7us4AkREqRpPRVgK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvBZIm/btsjPr5TvPY/6T3uT7us4AkREqRpPRVgK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvBZIm%2FbtsjPr5TvPY%2F6T3uT7us4AkREqRpPRVgK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;853&quot; height=&quot;188&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  끝으로&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Reflection을 공부하면서 자주 등장하는 말이 있는데 '굳이 알아야할까?', '활용할 일이 거의 없다' 등이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;생각처럼 정보를 확인하는 기능이지만, 흔히 사용하게 될 구체적인 클래스를 모를리 없어 사용하지 않는 듯 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그리고 &lt;b&gt;단점으로 알려진 내용들 중, 성능 오버헤드&lt;/b&gt;가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컴파일 타임이 아닌 런타임에 동적으로 타입을 분석하고 정보를 가져오므로 JVM을 최적화 할 수 없다고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(아직 무슨 소리인지 잘 모르겠지만, 안좋은 것 같다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단점이라 말하고 예상못할 부작용을 굳이 감수할 필요는 없기 때문에 사용하지 말자는 결론에 도달했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;찾으면서 배운 &lt;b&gt;어노테이션의 선언코드&lt;/b&gt;도 알게되었다.&lt;/span&gt;&lt;span&gt;아직까지 직접적으로 어노테이션을 생성하고 사용하기까지 실력이 부족하지만, 좋은 공부가 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://hudi.blog/java-reflection/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;hudi&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686647216804&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;자바 리플렉션 (Reflection) 기초&quot; data-og-description=&quot;리플렉션 (Reflection) JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 해당 정보를 JVM 메모리에 저장한다. 그렇게 저장된 클래스에 대한 정보가 마치 거울에 투영된 모습과 닮아있어, 리플렉션&quot; data-og-host=&quot;hudi.blog&quot; data-og-source-url=&quot;https://hudi.blog/java-reflection/&quot; data-og-url=&quot;https://hudi.blog/java-reflection/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c7jNfX/hySYId7qU9/QJKC4yaghkGIHcZx4IV5t1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400&quot;&gt;&lt;a href=&quot;https://hudi.blog/java-reflection/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hudi.blog/java-reflection/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c7jNfX/hySYId7qU9/QJKC4yaghkGIHcZx4IV5t1/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;자바 리플렉션 (Reflection) 기초&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리플렉션 (Reflection) JVM은 클래스 정보를 클래스 로더를 통해 읽어와서 해당 정보를 JVM 메모리에 저장한다. 그렇게 저장된 클래스에 대한 정보가 마치 거울에 투영된 모습과 닮아있어, 리플렉션&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hudi.blog&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://goodgid.github.io/Spring-MVC-Retention-Annotation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;goodGid&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686649497764&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Spring MVC - @Retention 애노테이션&quot; data-og-description=&quot;Index&quot; data-og-host=&quot;goodgid.github.io&quot; data-og-source-url=&quot;https://goodgid.github.io/Spring-MVC-Retention-Annotation/&quot; data-og-url=&quot;https://goodgid.github.io/Spring-MVC-Retention-Annotation/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dzFx0Q/hySYGm6oaK/MIsPHu3BJM9mtxeKEkLe21/img.png?width=589&amp;amp;height=420&amp;amp;face=0_0_589_420&quot;&gt;&lt;a href=&quot;https://goodgid.github.io/Spring-MVC-Retention-Annotation/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://goodgid.github.io/Spring-MVC-Retention-Annotation/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dzFx0Q/hySYGm6oaK/MIsPHu3BJM9mtxeKEkLe21/img.png?width=589&amp;amp;height=420&amp;amp;face=0_0_589_420');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Spring MVC - @Retention 애노테이션&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Index&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;goodgid.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://tecoble.techcourse.co.kr/post/2020-07-16-reflection-api/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Tecoble&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686649525076&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Reflection API 간단히 알아보자.&quot; data-og-description=&quot;Spring Framework를 학습하다 보면 Java Reflection API를 자주 접하게 된다. 하지만 Reflection API&amp;hellip;&quot; data-og-host=&quot;tecoble.techcourse.co.kr&quot; data-og-source-url=&quot;https://tecoble.techcourse.co.kr/post/2020-07-16-reflection-api/&quot; data-og-url=&quot;https://post/2020-07-16-reflection-api/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hFc6W/hySYyJmFfi/DFrk0NSK5KA869hXQaXVFk/img.png?width=2542&amp;amp;height=1414&amp;amp;face=0_0_2542_1414&quot;&gt;&lt;a href=&quot;https://tecoble.techcourse.co.kr/post/2020-07-16-reflection-api/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tecoble.techcourse.co.kr/post/2020-07-16-reflection-api/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hFc6W/hySYyJmFfi/DFrk0NSK5KA869hXQaXVFk/img.png?width=2542&amp;amp;height=1414&amp;amp;face=0_0_2542_1414');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Reflection API 간단히 알아보자.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Spring Framework를 학습하다 보면 Java Reflection API를 자주 접하게 된다. 하지만 Reflection API&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tecoble.techcourse.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/  Spring</category>
      <category>annotation</category>
      <category>Reflection</category>
      <category>Spring</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/204</guid>
      <comments>https://mvmthyun.tistory.com/204#entry204comment</comments>
      <pubDate>Tue, 13 Jun 2023 18:53:37 +0900</pubDate>
    </item>
    <item>
      <title>AWS | AWS 클라우드</title>
      <link>https://mvmthyun.tistory.com/203</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 내용은 공부의 목적으로 기록되었으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 내용은 모두 구글 검색으로 공부 블로그를 참고하여 작성했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열심히 배우는 중입니다. 감사합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  AWS 클라우드&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvYofU/btsjKRLq8f2/3MozU7IZO7kKGqK0z7KOB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvYofU/btsjKRLq8f2/3MozU7IZO7kKGqK0z7KOB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvYofU/btsjKRLq8f2/3MozU7IZO7kKGqK0z7KOB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvYofU%2FbtsjKRLq8f2%2F3MozU7IZO7kKGqK0z7KOB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;347&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;클라우드&lt;/b&gt;의 용어는 연결 및 데이터 흐름을 설명하는 다이어그램에서 인터넷 리소스 또는 연결성이 구름으로 표현되었던 시절에서 유래한다.&lt;br /&gt;클라우드는 인터넷을 통해서 IT리소스나 애플리케이션을 필요시에 사용하고 사용한 만큼만 비용을 지불하고 사용하는 서비스이다.&lt;br /&gt;IT자원을 직접 구축하고 운영할 필요없이 인프라 시설로 바꾸고 사용자는 쉽게 접근할 수 있도록 한다.&lt;br /&gt;&lt;br /&gt;한마디로 클라우드는 구름 즉 인터넷을 통해서 원격지에 있는 IT 리소스를 이용하는 서비스이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  AWS 클라우드의 장점&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;민첩성: 속도 및 민첩성 향상&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;온디맨드 셀프 서비스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;탄력성: 규모의 경제로 얻게 되는 이점&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;빠른 규모 조정으로 수요에 대응&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비용절감: 선행 비용을 가변 비용으로 대체&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;사용한 IT에 대해서만 지불&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전 세계에 배포: 몇 분 만에 전 세계에 배포&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;광범위한 네트워크 엑세스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 센터 운영 및 유지관리에 비용 투자 불필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;용량 추정 불필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  AWS 글로벌 인프라: 현재 리전&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVc2iM/btsjpESTqCV/VI27FAPPJVZvJD4o0OtdN0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVc2iM/btsjpESTqCV/VI27FAPPJVZvJD4o0OtdN0/img.jpg&quot; data-alt=&quot;리전이 위치한 국가 및 주&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVc2iM/btsjpESTqCV/VI27FAPPJVZvJD4o0OtdN0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVc2iM%2FbtsjpESTqCV%2FVI27FAPPJVZvJD4o0OtdN0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;980&quot; height=&quot;531&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리전이 위치한 국가 및 주&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;리전 선택&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 거버넌스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지연 시간&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;엣지 인프라&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Amazon CloudFront(콘텐츠 전송 네트워크)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AWS Outposts&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AWS Local Zones&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;AWS Wavelength&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고: &lt;a href=&quot;https://aws.amazon.com/ko/about-aws/global-infrastructure/#reglink-pr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;글로벌 인프라&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686547829455&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;글로벌 인프라&quot; data-og-description=&quot;&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/about-aws/global-infrastructure/#reglink-pr&quot; data-og-url=&quot;https://aws.amazon.com/ko/about-aws/global-infrastructure/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bIlgqY/hySYKu96MG/aOuEzqGLCkLNHgW9UwQSc1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cIdHR8/hySW424rRk/WFdbmx5LnMnCYkPnTyQkY0/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/KGppy/hySXbulWdQ/6AM05ViA66yokGc98SVMmk/img.png?width=641&amp;amp;height=481&amp;amp;face=0_0_641_481&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/about-aws/global-infrastructure/#reglink-pr&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/about-aws/global-infrastructure/#reglink-pr&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bIlgqY/hySYKu96MG/aOuEzqGLCkLNHgW9UwQSc1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cIdHR8/hySW424rRk/WFdbmx5LnMnCYkPnTyQkY0/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109,https://scrap.kakaocdn.net/dn/KGppy/hySXbulWdQ/6AM05ViA66yokGc98SVMmk/img.png?width=641&amp;amp;height=481&amp;amp;face=0_0_641_481');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;글로벌 인프라&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  AWS 엣지 인프라&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라우드를 엔드포인트에서 더 가까이 이용할 수 있는 서비스&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F1MHY/btsjnIahIjU/XRwkrqfjneUOk05v3OCsn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F1MHY/btsjnIahIjU/XRwkrqfjneUOk05v3OCsn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F1MHY/btsjnIahIjU/XRwkrqfjneUOk05v3OCsn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF1MHY%2FbtsjnIahIjU%2FXRwkrqfjneUOk05v3OCsn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;323&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  AWS 핵심 인프라 및 서비스&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;350&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sMdcJ/btsjGJxYNjs/tIdIEgmVmHtsc3CioMVuQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sMdcJ/btsjGJxYNjs/tIdIEgmVmHtsc3CioMVuQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sMdcJ/btsjGJxYNjs/tIdIEgmVmHtsc3CioMVuQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsMdcJ%2FbtsjGJxYNjs%2FtIdIEgmVmHtsc3CioMVuQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;350&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;350&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;주요 인프라 구성도&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컴퓨팅&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;스토리지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터베이스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컨테이너&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버리스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기계 학습&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HE8SG/btsjqwtTs23/kVrYJoXa7XMQM77Z1gBuN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HE8SG/btsjqwtTs23/kVrYJoXa7XMQM77Z1gBuN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HE8SG/btsjqwtTs23/kVrYJoXa7XMQM77Z1gBuN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHE8SG%2FbtsjqwtTs23%2FkVrYJoXa7XMQM77Z1gBuN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;885&quot; height=&quot;484&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  일반적인 클라우드 용어&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라우드 컴퓨팅&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IT 리소스를 인터넷을 통해 온디맨드로 제공하고 사용한 만큼만 비용을 지불하는 것을 말한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라우드 서비스 공급자&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라우드 기반 플랫폼, 인프라, 애플리케이션 또는 저장소 서비스를 제공하는 타사.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;퍼블릭 클라우드&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서드 파티 클라우드 서비스 제공업체는 기반 컴퓨팅 리소스를 관리한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;제공업체는 리소스 유지 보수를 담당하며 서비스 수준 계약을 통해 가용성, 신뢰성, 보안을 보장한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;프라이빗 클라우드&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단일 조직 전용 클라우드 컴퓨팅 환경이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;모든 클라우드 인프라에는 셀프 서비스 포털을 통해 온디맨드로 프로비저닝하는 CPU&amp;nbsp; 및 스토리지와 같은 기본 컴퓨팅 리소스가 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하이브리드 클라우드&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기업의 퍼블릭 클라우드와 프라이빗 클라우드를 원활하게 통합하는 IT 인프라 설계.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스형 인프라(IaaS)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클라우드 IT를 위한 기본 빌딩 블록이 포함되어 있으며, 일반적으로 네트워킹 기능, 컴퓨터(가상 또는 전용 하드웨어) 및 데이터 스토리지 공간에 대한 액세스를 제공한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IT 부서 및 개발자에게 익숙한 기존 IT 리소스와 가장 유사하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스형 플랫폼(PaaS)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기본 인프라(일반적으로 하드웨어와 운영체제)를 관리할 필요가 없어 애플리케이션 개발과 관리에 집중할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;애플리케이션 실행과 관련된 리소스 구매, 용량 계획, 스프트웨어 유지 관리, 패치 작업 또는 다른 모든 획일적인 작업에 대한 부담 없이 더욱 효율적으로 운영이 가능하다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스형 소프트웨어(SaaS)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;서비스 공급자에 의해 실행되고 관리되는 완전한 제품을 제공한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;오퍼링의 경우 서비스를 유지 관리하는 방법이나 기본 인프라를 관리하는 방법에 대해 생각할 필요가 없다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스형 백엔드(BaaS)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;BaaS앱 개발자가 서버 기술을 몰라도 그 환경에 연결되는 모바일 앱을 만들 수 있게 돕는 서비스이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서비스형 플랫폼(PaaS)에 속하며, 서버와 통신하는 모바일앱 개발에 필요한 특정 기능을 지원하는 환경이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자동 크기 조정(AWS Auto Scaling)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;탄력성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;빅 데이터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;서버리스, 서버리스 컴퓨팅&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/#agenda&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AWSomeDay&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686548632024&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;company&quot; data-og-title=&quot;AWSome Day 온라인 컨퍼런스&quot; data-og-description=&quot;비용 절감, 속도, 민첩성, 확장성 등 강력한 클라우드 컴퓨팅의 장점을 이해할 수 있습니다. 또한 컴퓨팅, 스토리지, 데이터베이스, 네트워킹, 보안에 대해 학습하고, IoT, 기계 학습 등을 통해 혁&quot; data-og-host=&quot;aws.amazon.com&quot; data-og-source-url=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/#agenda&quot; data-og-url=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bAMdiG/hySW1SQkOu/OrpWdkmwU7wabCckuJVKbK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/c0WEzU/hySW94oNIU/WGUt7H0k4M0BOOqf6BkqKK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/#agenda&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://aws.amazon.com/ko/events/awsome-day/awsome-day-online/#agenda&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bAMdiG/hySW1SQkOu/OrpWdkmwU7wabCckuJVKbK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/c0WEzU/hySW94oNIU/WGUt7H0k4M0BOOqf6BkqKK/img.png?width=179&amp;amp;height=109&amp;amp;face=0_0_179_109');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;AWSome Day 온라인 컨퍼런스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;비용 절감, 속도, 민첩성, 확장성 등 강력한 클라우드 컴퓨팅의 장점을 이해할 수 있습니다. 또한 컴퓨팅, 스토리지, 데이터베이스, 네트워킹, 보안에 대해 학습하고, IoT, 기계 학습 등을 통해 혁&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;aws.amazon.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/☁️ AWS</category>
      <category>AWS</category>
      <category>AWSomeDay</category>
      <category>Cloud</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/203</guid>
      <comments>https://mvmthyun.tistory.com/203#entry203comment</comments>
      <pubDate>Mon, 12 Jun 2023 15:05:04 +0900</pubDate>
    </item>
    <item>
      <title>Spring JPA | JPA Auditing 개념</title>
      <link>https://mvmthyun.tistory.com/202</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 내용은 공부의 목적으로 기록되었으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 내용은 모두 구글 검색으로 공부 블로그를 참고하여 작성했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열심히 배우는 중입니다. 감사합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  JPA Auditing&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cG51ml/btsjS334ix5/6xioX5iNm8Vf0cvnkkIVAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cG51ml/btsjS334ix5/6xioX5iNm8Vf0cvnkkIVAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cG51ml/btsjS334ix5/6xioX5iNm8Vf0cvnkkIVAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcG51ml%2FbtsjS334ix5%2F6xioX5iNm8Vf0cvnkkIVAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;430&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재한다.&lt;br /&gt;대표적으로 생성일자, 수정일자, 식별자 같은 필드 및 컬럼이 있다.&lt;br /&gt;JAP에서는 &lt;b&gt;대표적인 기능 Audit&lt;/b&gt;이라는 기능을 제공한다. Audit는 &lt;b&gt;시간에 대해서 자동으로 값을 넣어주는 기능&lt;/b&gt;이다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  의존성&lt;/span&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1685606095756&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    annotationProcessor 'org.projectlombok:lombok'
    }&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;자바 1.8 이상부터 기존의 문제가 있던 Date, Calander 클래스를 사용하지 않고, LocalDate, LocalDateTime 클래스를 사용한다. 또한 LocalDateTime 객체와 테이블 사이의 매핑이 안되던 이슈는 Hibernate 5.2버전부터 해결이 되었다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;직접 사용은 다음번에 해볼 수 있도록 할 예정이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://webcoding-start.tistory.com/53&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;준영이의 웹 까페&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1685608641446&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;JPA Auditing 기능이란?&quot; data-og-description=&quot;JPA Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수&quot; data-og-host=&quot;webcoding-start.tistory.com&quot; data-og-source-url=&quot;https://webcoding-start.tistory.com/53&quot; data-og-url=&quot;https://webcoding-start.tistory.com/53&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cGac34/hySQLHXcma/rZmzzi098uHKDgKZEDp8g1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/jxlXZ/hySQDXrQBx/zdmNma7KPzQiwOBWhQgzK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://webcoding-start.tistory.com/53&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://webcoding-start.tistory.com/53&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cGac34/hySQLHXcma/rZmzzi098uHKDgKZEDp8g1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/jxlXZ/hySQDXrQBx/zdmNma7KPzQiwOBWhQgzK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;JPA Auditing 기능이란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JPA Auditing이란? Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통적으로 도메인들이 가지고 있는 필드나 컬럼들이 존재합니다. 대표적으로 생성일자, 수&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;webcoding-start.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/Spring JPA</category>
      <category>auditing</category>
      <category>JPA</category>
      <category>Spring</category>
      <category>Spring JPA</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/202</guid>
      <comments>https://mvmthyun.tistory.com/202#entry202comment</comments>
      <pubDate>Thu, 1 Jun 2023 17:38:58 +0900</pubDate>
    </item>
    <item>
      <title>Spring JPA | JPA(Java Persistence API)</title>
      <link>https://mvmthyun.tistory.com/201</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 내용은 공부의 목적으로 기록되었으며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래 내용은 모두 구글 검색으로 공부 블로그를 참고하여 작성했습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;열심히 배우는 중입니다. 감사합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDExBa/btsjO9kuzJY/2w8zR6ih7sOHct0KYjQyk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDExBa/btsjO9kuzJY/2w8zR6ih7sOHct0KYjQyk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDExBa/btsjO9kuzJY/2w8zR6ih7sOHct0KYjQyk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDExBa%2FbtsjO9kuzJY%2F2w8zR6ih7sOHct0KYjQyk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;430&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;500&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  JPA(Java&amp;nbsp;Persistence&amp;nbsp;API)&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span&gt;자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다.&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  ORM 기술이란?&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ORM 기술은 객체와 관계형 데이터 베이스를 매핑해주는 기술이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&amp;nbsp;- &lt;span style=&quot;color: #9d9d9d;&quot;&gt;Object Relational Mapping&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;객체는 객체대로, 관계형 데이터베이스는 관계형 데이터베이스대로 설계하고, ORM 프레임워크가 중간에서 매핑을 해준다.&lt;span style=&quot;color: #666666; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &amp;nbsp;JPA는 ORM을 사용하기 위한 인터페이스의 모음이다.&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단순한 명세이기 때문에 구현이 없고, 자바 애플리켸이션 관계형 데이터베이스를 어떻게 사용할지 정의하는 하나의 방법이다.&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&amp;nbsp;- 라이브러리가 아니다.&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;JPA의 구현체를 통해서 JPA를 사용할 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt; &amp;nbsp;Hibernate?&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JPA를 구현하는 대표적인 오픈소스, JPA의 구현체다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JPA의 핵심인 EntityManagerFactory, EntityManager, EntityTransaction 등을 상속받아 구현한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JPA를 구현하는 다른&amp;nbsp; 구현체들로는 EclipseLink, DataNucleus 등이 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #666666; text-align: left; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hibernate는 내부적으로 JDBC를 이용해 관계형 데이터베이스와 커넥션을 맺고 상호작용을 한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;  Spring Data JPA&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Spring Data JPA는 JPA를 사용하기 편하도록 만들어놓은 모듈이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;JPA를 한 단계 더 추상화시킨 Repository 인터페이스를 제공한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Hibernate의 구현체를 사용한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;간단한 데이터 접근을 위해 사용한다.&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D1cPZ/btsiekVkWoV/lIXKv3ifKm1Y6Ei2sdsVA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D1cPZ/btsiekVkWoV/lIXKv3ifKm1Y6Ei2sdsVA0/img.png&quot; data-alt=&quot;JPA, Hibernate, Spring Data JPA&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D1cPZ/btsiekVkWoV/lIXKv3ifKm1Y6Ei2sdsVA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD1cPZ%2FbtsiekVkWoV%2FlIXKv3ifKm1Y6Ei2sdsVA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;521&quot; height=&quot;442&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JPA, Hibernate, Spring Data JPA&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;출처 | &lt;a href=&quot;https://code-lab1.tistory.com/288&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;_연구소장_&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1685604576684&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[JPA] JPA란? Spring Data JPA란? Hibernate란?&quot; data-og-description=&quot;JPA(Java Persistent API)란? JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다. ORM 기술이란? ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. 객체는 객&quot; data-og-host=&quot;code-lab1.tistory.com&quot; data-og-source-url=&quot;https://code-lab1.tistory.com/288&quot; data-og-url=&quot;https://code-lab1.tistory.com/288&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/blBWyn/hySPf4UKNh/yelu54DZ8KYc9RpTHLO9R0/img.png?width=765&amp;amp;height=315&amp;amp;face=0_0_765_315,https://scrap.kakaocdn.net/dn/DT3KO/hySPoAOab2/W83y5a9VuuLfNTGRzmmMU0/img.png?width=765&amp;amp;height=315&amp;amp;face=0_0_765_315,https://scrap.kakaocdn.net/dn/KRU9C/hySPqL9PBz/Bsl0dThbFITMLpAqQTSHD0/img.jpg?width=1074&amp;amp;height=1441&amp;amp;face=0_0_1074_1441&quot;&gt;&lt;a href=&quot;https://code-lab1.tistory.com/288&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code-lab1.tistory.com/288&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/blBWyn/hySPf4UKNh/yelu54DZ8KYc9RpTHLO9R0/img.png?width=765&amp;amp;height=315&amp;amp;face=0_0_765_315,https://scrap.kakaocdn.net/dn/DT3KO/hySPoAOab2/W83y5a9VuuLfNTGRzmmMU0/img.png?width=765&amp;amp;height=315&amp;amp;face=0_0_765_315,https://scrap.kakaocdn.net/dn/KRU9C/hySPqL9PBz/Bsl0dThbFITMLpAqQTSHD0/img.jpg?width=1074&amp;amp;height=1441&amp;amp;face=0_0_1074_1441');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[JPA] JPA란? Spring Data JPA란? Hibernate란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;JPA(Java Persistent API)란? JPA는 자바 ORM(Object Relational Mapping) 기술에 대한 API 표준 명세를 뜻한다. ORM 기술이란? ORM 기술은 말 그대로 객체와 관계형 데이터 베이스를 매핑해 주는 기술이다. 객체는 객&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;code-lab1.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/Spring JPA</category>
      <category>Hibernate</category>
      <category>JPA</category>
      <category>spring data jpa</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/201</guid>
      <comments>https://mvmthyun.tistory.com/201#entry201comment</comments>
      <pubDate>Thu, 1 Jun 2023 16:44:03 +0900</pubDate>
    </item>
    <item>
      <title>Spring Boot | java.lang.IllegalArgumentException: 'script' must not be null or empty</title>
      <link>https://mvmthyun.tistory.com/200</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6TdIt/btsjTv7hED1/d016kYfkcp1s9sOIMKsK60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6TdIt/btsjTv7hED1/d016kYfkcp1s9sOIMKsK60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6TdIt/btsjTv7hED1/d016kYfkcp1s9sOIMKsK60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6TdIt%2FbtsjTv7hED1%2Fd016kYfkcp1s9sOIMKsK60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;372&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Error&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;java.lang.IllegalArgumentException: 'script' must not be null or empty&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Solution Content&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;xxx.sql 파일을 생성하고 내용을 입력하지 않았다.&lt;br /&gt;.sql 파일 안에 임의로 입력 후 다시 실행.&lt;br /&gt;&lt;br /&gt;- 해당 파일을 지우던지, 아니면 임의로 내용을 채워서 에러를 해결할 수 있다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;Before&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x3MFg/btsij8sqlZA/z2Q8Uovu6HNwtcgy1x6dcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x3MFg/btsij8sqlZA/z2Q8Uovu6HNwtcgy1x6dcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x3MFg/btsij8sqlZA/z2Q8Uovu6HNwtcgy1x6dcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx3MFg%2Fbtsij8sqlZA%2Fz2Q8Uovu6HNwtcgy1x6dcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1234&quot; height=&quot;252&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;After&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi24Qr/btsij8eSksM/gZrHJouoKnUjXjrKnA7Yw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi24Qr/btsij8eSksM/gZrHJouoKnUjXjrKnA7Yw0/img.png&quot; data-alt=&quot;임의 주석 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi24Qr/btsij8eSksM/gZrHJouoKnUjXjrKnA7Yw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi24Qr%2Fbtsij8eSksM%2FgZrHJouoKnUjXjrKnA7Yw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;236&quot; height=&quot;118&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;임의 주석 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc6XW6/btsickBiJbe/ewi4rupieOksB6TWmqLTT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc6XW6/btsickBiJbe/ewi4rupieOksB6TWmqLTT1/img.png&quot; data-alt=&quot;정상 실행!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc6XW6/btsickBiJbe/ewi4rupieOksB6TWmqLTT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc6XW6%2FbtsickBiJbe%2Fewi4rupieOksB6TWmqLTT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;780&quot; height=&quot;252&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정상 실행!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>  기록/ ️ Error Note</category>
      <category>error</category>
      <category>Spring</category>
      <category>spring boot</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/200</guid>
      <comments>https://mvmthyun.tistory.com/200#entry200comment</comments>
      <pubDate>Thu, 1 Jun 2023 16:20:30 +0900</pubDate>
    </item>
    <item>
      <title>Git branch 전략 세우기</title>
      <link>https://mvmthyun.tistory.com/199</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uQ1uk/btsjPLJ7uzI/qpobq5ZTauJlb2CzmGd5MK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uQ1uk/btsjPLJ7uzI/qpobq5ZTauJlb2CzmGd5MK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uQ1uk/btsjPLJ7uzI/qpobq5ZTauJlb2CzmGd5MK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuQ1uk%2FbtsjPLJ7uzI%2Fqpobq5ZTauJlb2CzmGd5MK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;371&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  Git branch&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;  깃 브랜치를 운영하는 방법론&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;gitflow: master, develop, feature, release, hotfix&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;github flow: main(master), feature&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;브랜치 전략을 세우는 이유와 요령&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;하나의 프로젝트 소스코드를 여러 개발자가 다루면서 발생하는 각종 부작용 해결을 위함.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;개발 협업을 원할하게 하기 위한 약속&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전략을 세울 때 고려할 수 있는 요소들&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 브랜치는 제품으로 내보낼 수 있는가?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 브랜치는 빌드 실패를 허용하는가?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 브랜치는 테스트 실패를 허용하는가?&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 브랜치는 임시로 운영하는가? 유지하지 않고 수시로 삭제하는가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1799&quot; data-origin-height=&quot;868&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9h8NK/btsh2PU10ZW/36G2mKkG8tWsLHb4lr8C71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9h8NK/btsh2PU10ZW/36G2mKkG8tWsLHb4lr8C71/img.png&quot; data-alt=&quot;github project&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9h8NK/btsh2PU10ZW/36G2mKkG8tWsLHb4lr8C71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9h8NK%2Fbtsh2PU10ZW%2F36G2mKkG8tWsLHb4lr8C71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1799&quot; height=&quot;868&quot; data-origin-width=&quot;1799&quot; data-origin-height=&quot;868&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;github project&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/  Github</category>
      <category>Branch</category>
      <category>github</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/199</guid>
      <comments>https://mvmthyun.tistory.com/199#entry199comment</comments>
      <pubDate>Wed, 31 May 2023 10:16:27 +0900</pubDate>
    </item>
    <item>
      <title>JS/Refactoring | 클로저, 콜백</title>
      <link>https://mvmthyun.tistory.com/198</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU2EP9/btsjNN9KFSN/beUbv2EbnuWz8F1iKiRUZ0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU2EP9/btsjNN9KFSN/beUbv2EbnuWz8F1iKiRUZ0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU2EP9/btsjNN9KFSN/beUbv2EbnuWz8F1iKiRUZ0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU2EP9%2FbtsjNN9KFSN%2FbeUbv2EbnuWz8F1iKiRUZ0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;660&quot; height=&quot;427&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  초기 코드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복문을 통해서 파일에 대한 정보를 formData로 넣고, 다른 함수 실행을 위해 필요한 변수값을 정의하여 함수 실행에 필요한 데이터를 보낼 생각이였으나, chatFilePattern의 변수값이 고정적으로 들어가면서 생긴 부분에 대해서 수정하고, 수정한 코드에 대한 리뷰를 진행했다.&lt;/p&gt;
&lt;pre id=&quot;code_1685081669651&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (const file of files) {
  chatFilePattern = firstNum + &quot;&quot; + countFileNumber++
  formData.append(&quot;files&quot;, file);
  formData.append(&quot;chatFileNumber&quot;, chatFilePattern);
    
  // Base64 이미지 변환
  const reader = new FileReader();
  reader.readAsDataURL(file); 
  reader.onloadend = () =&amp;gt; {
    var base64data = reader.result;
    stompSendFlag = 2;
    stompSend(base64data, chatFilePattern);
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  변경 코드&lt;/h2&gt;
&lt;pre id=&quot;code_1685079698158&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (const file of files) { // 1. for 반복문을 사용하여 files 배열의 각 파일에 대해 반복한다.
  // 2. 각 반복에서 새로운 chatFilePattern 값을 생성하고 이 값을 파일과 폼 데이터에 추가한다.
  let chatFilePattern = firstNum + &quot;&quot; + countFileNumber++;

  formData.append(&quot;files&quot;, file);
  formData.append(&quot;chatFileNumber&quot;, chatFilePattern);
  console.log(&quot;chatFilePattern22222222 :::: &quot;, chatFilePattern);

  // 3. FileReader 객체를 생성하고, 해당 파일을 readAsDataURL() 메서드를 사용하여 비동기적으로 읽는다.
  const reader = new FileReader();
  reader.readAsDataURL(file);
  // 4. reader.onloadend 이벤트 핸들러를 클로저로 감싸서 정의한다.
  reader.onloadend = ((currentChatFilePattern) =&amp;gt; {
    return () =&amp;gt; { // 5. reader.onloadend 이벤트가 발생하면 클로저 함수가 실행된다.
      var base64data = reader.result;
      stompSendFlag = 2;
      stompSend(base64data, currentChatFilePattern);
      console.log(&quot;chatFilePattern333333333 :::: &quot;, currentChatFilePattern);
    };
  })(chatFilePattern);
}
// for end&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;for 반복문을 사용하여 files 배열의 각 파일에 대해 반복한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각 반복에서 새로운 chatFilePattern 값을 생성하고 이 값을 파일과 폼 데이터에 추가한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;FileReader 객체를 생성하고, 해당 파일을 readAsDataURL() 메서드를 사용하여 비동기적으로 읽는다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;reader.onloadend 이벤트 핸들러를 클로저로 감싸서 정의한다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클로저는 외부 함수의 변수에 접근할 수 있는 함수이다. currentChatFilePattern 을 사용하여 클로저를 구성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;currentChatFilePattern 은 반복에서의 chatFilePattern 값을 복사하여 클로저에 보존한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클로저 함수는 reader.onloadend 이벤트가 발생할 때마다 실행된다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;reader.onloadend 이벤트가 발생하면 클로저 함수가 실행된다.&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;reader.result 를 사용하여 파일의 Base64 데이터를 가져온다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;currentChatFilePattern 은 클로저에 의해 보존된 값이므로, 해당 값을 stompSend() 함수에 전달한다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;stompSend() 함수를 호출하여 데이터와 currentChatFilePattern 값을 처리한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 반복으로 넘어가고, 새로운 chatFilePattern 값을 생성하여 다음 파일에 대해 동일한 과정을 반복한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://mvmthyun.tistory.com/197&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;클로저 함수 정리&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1685081522452&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;JavaScript | 클로저 함수&quot; data-og-description=&quot;  클로저 함수 클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 JS가 어떻게 변수의 유효범위를 지정하는지를 이해해야한다.   어휘적 범위 지정(Lexical scoping) f&quot; data-og-host=&quot;mvmthyun.tistory.com&quot; data-og-source-url=&quot;https://mvmthyun.tistory.com/197&quot; data-og-url=&quot;https://mvmthyun.tistory.com/197&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGLTap/hySLyu867X/ZbJTokx9AQYcsMxao6YJsK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dUxk2H/hySKvtiwbP/hzvfMBuswC0zhD7VF8D0m0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://mvmthyun.tistory.com/197&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mvmthyun.tistory.com/197&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGLTap/hySLyu867X/ZbJTokx9AQYcsMxao6YJsK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dUxk2H/hySKvtiwbP/hzvfMBuswC0zhD7VF8D0m0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;JavaScript | 클로저 함수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;  클로저 함수 클로저는 함수와 함수가 선언된 어휘적 환경의 조합이다. 클로저를 이해하려면 JS가 어떻게 변수의 유효범위를 지정하는지를 이해해야한다.   어휘적 범위 지정(Lexical scoping) f&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mvmthyun.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  공부 기록/ ️ JavaScript</category>
      <author>MVMT</author>
      <guid isPermaLink="true">https://mvmthyun.tistory.com/198</guid>
      <comments>https://mvmthyun.tistory.com/198#entry198comment</comments>
      <pubDate>Fri, 26 May 2023 15:28:01 +0900</pubDate>
    </item>
  </channel>
</rss>