<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>효송의 서재</title>
    <link>https://forest-of-knowledge.tistory.com/</link>
    <description>호기심 많은 이는 결국 길을 떠난다</description>
    <language>ko</language>
    <pubDate>Tue, 16 Jun 2026 05:08:16 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>8효송8</managingEditor>
    <image>
      <title>효송의 서재</title>
      <url>https://tistory1.daumcdn.net/tistory/4918895/attach/98831b5f294f4fa9bcf80549707dbaba</url>
      <link>https://forest-of-knowledge.tistory.com</link>
    </image>
    <item>
      <title>[네트워크] Windows에서 IP 주소 변경하는 방법</title>
      <link>https://forest-of-knowledge.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 네트워크 연결 설정으로 이동&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;방법 1. 제어판 &amp;gt; 네트워크 및 인터넷 &amp;gt; 네트워크 연결&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 제어판으로 이동한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows 키 + R을 누르고 &quot;control&quot; 입력&lt;/li&gt;
&lt;li&gt;또는 시작 메뉴에서 &quot;제어판&quot; 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;네트워크 상태 및 작업 보기&lt;/b&gt;로 들어간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1965&quot; data-origin-height=&quot;1108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J8yzP/btsL6hu5tlr/KsLwKAcOF4hUFr1hqn8sV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J8yzP/btsL6hu5tlr/KsLwKAcOF4hUFr1hqn8sV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J8yzP/btsL6hu5tlr/KsLwKAcOF4hUFr1hqn8sV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ8yzP%2FbtsL6hu5tlr%2FKsLwKAcOF4hUFr1hqn8sV1%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;860&quot; height=&quot;485&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1965&quot; data-origin-height=&quot;1108&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;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;어댑터 설정 변경&lt;/b&gt;으로 이동한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1967&quot; data-origin-height=&quot;1108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/62Xzb/btsL5Cmfrt9/SnB0qWsO9ulydy68cXJ9Y0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/62Xzb/btsL5Cmfrt9/SnB0qWsO9ulydy68cXJ9Y0/img.png&quot; data-alt=&quot;네트워크 및 공유 센터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/62Xzb/btsL5Cmfrt9/SnB0qWsO9ulydy68cXJ9Y0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F62Xzb%2FbtsL5Cmfrt9%2FSnB0qWsO9ulydy68cXJ9Y0%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;860&quot; height=&quot;484&quot; data-filename=&quot;image.png&quot; data-origin-width=&quot;1967&quot; data-origin-height=&quot;1108&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;h4 data-ke-size=&quot;size20&quot;&gt;방법 2. 화면 우측 하단 네트워크 아이콘으로 접근&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화면 우측 하단의 다음과 같은 컴퓨터 아이콘을 클릭하고 &lt;b&gt;네트워크 및 인터넷 설정&lt;/b&gt;으로 들어간다.&lt;/p&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;image 1.png&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSzAHe/btsL7FheIu9/Bx7WSvAUv7airuyQqvFRRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSzAHe/btsL7FheIu9/Bx7WSvAUv7airuyQqvFRRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSzAHe/btsL7FheIu9/Bx7WSvAUv7airuyQqvFRRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSzAHe%2FbtsL7FheIu9%2FBx7WSvAUv7airuyQqvFRRK%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;484&quot; height=&quot;356&quot; data-filename=&quot;image 1.png&quot; data-origin-width=&quot;724&quot; data-origin-height=&quot;533&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;p data-ke-size=&quot;size16&quot;&gt;다음과 같은 페이지가 열리면 &lt;b&gt;어댑터 변경&lt;/b&gt;을 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image 2.png&quot; data-origin-width=&quot;2565&quot; data-origin-height=&quot;1538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yMcPI/btsL7MAxIYK/aE2bKxzFvYYkJLJnz9l0Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yMcPI/btsL7MAxIYK/aE2bKxzFvYYkJLJnz9l0Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yMcPI/btsL7MAxIYK/aE2bKxzFvYYkJLJnz9l0Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyMcPI%2FbtsL7MAxIYK%2FaE2bKxzFvYYkJLJnz9l0Ck%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;678&quot; height=&quot;407&quot; data-filename=&quot;image 2.png&quot; data-origin-width=&quot;2565&quot; data-origin-height=&quot;1538&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;b&gt;2. 네트워크 어댑터 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 두 방법 중 하나를 거치면 다음과 같이 &lt;b&gt;네트워크 연결 설정&lt;/b&gt;으로 들어갈 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image 3.png&quot; data-origin-width=&quot;1969&quot; data-origin-height=&quot;1112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMInE8/btsL7PjEkh6/tp29tV94WT0U8EGb6QDZeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMInE8/btsL7PjEkh6/tp29tV94WT0U8EGb6QDZeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMInE8/btsL7PjEkh6/tp29tV94WT0U8EGb6QDZeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMInE8%2FbtsL7PjEkh6%2Ftp29tV94WT0U8EGb6QDZeK%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;860&quot; height=&quot;486&quot; data-filename=&quot;image 3.png&quot; data-origin-width=&quot;1969&quot; data-origin-height=&quot;1112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;현재 연결된 네트워크 어댑터 클릭 (이더넷 또는 Wi-Fi)&lt;/li&gt;
&lt;li&gt;&quot;속성&quot; 버튼 클릭&lt;/li&gt;
&lt;li&gt;&quot;Internet Protocol Version 4 (TCP/IPv4)&quot; 선택 후 속성 클릭&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이더넷을 우클릭해서 속성으로 들어간다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image 5.png&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;463&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/euT0Pu/btsL6pfuuw5/NwetHhtYMktkT15eqEUC00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/euT0Pu/btsL6pfuuw5/NwetHhtYMktkT15eqEUC00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/euT0Pu/btsL6pfuuw5/NwetHhtYMktkT15eqEUC00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeuT0Pu%2FbtsL6pfuuw5%2FNwetHhtYMktkT15eqEUC00%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;389&quot; height=&quot;264&quot; data-filename=&quot;image 5.png&quot; data-origin-width=&quot;683&quot; data-origin-height=&quot;463&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;p data-ke-size=&quot;size16&quot;&gt;이더넷 속성에서 &lt;b&gt;인터넷 프로토콜 버전&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;&amp;nbsp;4 (TCP/IPv4)&lt;/b&gt; 항목을 선택 후 속성을 클릭한다.&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image 6.png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;938&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nkirN/btsL7NMX1Mq/V3YtOQZbrUAxDEPTKkLHH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nkirN/btsL7NMX1Mq/V3YtOQZbrUAxDEPTKkLHH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nkirN/btsL7NMX1Mq/V3YtOQZbrUAxDEPTKkLHH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnkirN%2FbtsL7NMX1Mq%2FV3YtOQZbrUAxDEPTKkLHH1%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;462&quot; height=&quot;586&quot; data-filename=&quot;image 6.png&quot; data-origin-width=&quot;740&quot; data-origin-height=&quot;938&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. IP 주소 설정&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인터넷 프로토콜 버전&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;b&gt; 4 (TCP/IPv4)&lt;/b&gt;에 들어가면 자보통 자동 설정으로 세팅되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image 7.png&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;907&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HCgPu/btsL6baQEBo/JgZAYYJsPiMdA02kBPOyy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HCgPu/btsL6baQEBo/JgZAYYJsPiMdA02kBPOyy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HCgPu/btsL6baQEBo/JgZAYYJsPiMdA02kBPOyy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHCgPu%2FbtsL6baQEBo%2FJgZAYYJsPiMdA02kBPOyy0%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;563&quot; height=&quot;630&quot; data-filename=&quot;image 7.png&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;907&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;p data-ke-size=&quot;size16&quot;&gt;이제 수동으로 IP 주소를 설정해주자.&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;b&gt;다음 IP 주소 사용&lt;/b&gt; 선택 후 아래의 정보를 입력한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IP 주소&lt;/li&gt;
&lt;li&gt;서브넷 마스크&lt;/li&gt;
&lt;li&gt;기본 게이트웨이&lt;/li&gt;
&lt;li&gt;DNS 서버 주소&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image 8.png&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MMfH2/btsL6nva64i/z8PIVGWF4ziyerpwBTMkUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MMfH2/btsL6nva64i/z8PIVGWF4ziyerpwBTMkUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MMfH2/btsL6nva64i/z8PIVGWF4ziyerpwBTMkUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMMfH2%2FbtsL6nva64i%2Fz8PIVGWF4ziyerpwBTMkUK%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;587&quot; height=&quot;652&quot; data-filename=&quot;image 8.png&quot; data-origin-width=&quot;810&quot; data-origin-height=&quot;900&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 게이트웨이 주소를 IP 주소의 마지막 부분을 1로 설정하는 것은 일반적인 네트워크 관리 관행 중 하나라고 한다. 하지만 표준은 아님!&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;1252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JMJYz/btsL5CzQjtD/nmwMWrJVETEJ5avSdNKom1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JMJYz/btsL5CzQjtD/nmwMWrJVETEJ5avSdNKom1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JMJYz/btsL5CzQjtD/nmwMWrJVETEJ5avSdNKom1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJMJYz%2FbtsL5CzQjtD%2FnmwMWrJVETEJ5avSdNKom1%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;597&quot; height=&quot;575&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;1252&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;p data-ke-size=&quot;size16&quot;&gt;DNS 서버 설정 값은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기본 설정 DNS 서버(8.8.8.8)&lt;/b&gt;: Google에서 제공하는 공개 DNS 서버&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보조 DNS 서버(1.1.1.1)&lt;/b&gt;: Cloudflare에서 제공하는 공개 DNS 서버&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;&lt;b&gt;공개 DNS 서버 사용시 장점&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;안정성: 대형 기업에서 운영하므로 서비스 안정성이 높음&lt;/li&gt;
&lt;li&gt;속도: 전 세계에 분산된 서버로 빠른 응답 속도 제공&lt;/li&gt;
&lt;li&gt;보안: 기업 수준의 보안 체계 적용&lt;/li&gt;
&lt;li&gt;검열 우회: ISP의 DNS 서버보다 제한이 적음&lt;/li&gt;
&lt;li&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;&lt;b&gt;확인&lt;/b&gt; 버튼으로 설정을 저장하고 종료한다. &lt;span style=&quot;letter-spacing: 0px;&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;b&gt;4. 변경된 IP 주소 확인하기&lt;/b&gt;&lt;/h3&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;b&gt;Ctrl + R&lt;/b&gt;을 누르고 cmd를 입력하거나 시작메뉴에서 cmd를 쳐서 명령 프롬프트를 연다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;1106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVklRw/btsL7z2rgdS/IcjkOuA7j1TQAkCkVLfOeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVklRw/btsL7z2rgdS/IcjkOuA7j1TQAkCkVLfOeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVklRw/btsL7z2rgdS/IcjkOuA7j1TQAkCkVLfOeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVklRw%2FbtsL7z2rgdS%2FIcjkOuA7j1TQAkCkVLfOeK%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;561&quot; height=&quot;451&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;1106&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령 프롬프트에 &lt;b&gt;ipconfig&lt;/b&gt; 명령어를 입력해서 결과를 확인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5AafZ/btsL7wq6Xks/LTV9f4cjLJopmR5U4mkJo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5AafZ/btsL7wq6Xks/LTV9f4cjLJopmR5U4mkJo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5AafZ/btsL7wq6Xks/LTV9f4cjLJopmR5U4mkJo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5AafZ%2FbtsL7wq6Xks%2FLTV9f4cjLJopmR5U4mkJo0%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;1307&quot; height=&quot;896&quot; data-origin-width=&quot;1307&quot; data-origin-height=&quot;896&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;p data-ke-size=&quot;size16&quot;&gt;만약 변경한 ip가 적용되지 않았다면, 명령 프롬프트를 관리자 권한으로 실행하고 &lt;b&gt;ipconfig /release&lt;/b&gt; 후 &lt;b&gt;ipconfig /renew&lt;/b&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming 프로그래밍</category>
      <category>IP</category>
      <category>ip주소</category>
      <category>IP주소변경</category>
      <category>네트워크</category>
      <category>윈도우</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/34</guid>
      <comments>https://forest-of-knowledge.tistory.com/34#entry34comment</comments>
      <pubDate>Tue, 4 Feb 2025 18:28:58 +0900</pubDate>
    </item>
    <item>
      <title>[오류 해결] Type error: Non-relative paths are not allowed when 'baseUrl' is not set. Did you forget a leading './'?</title>
      <link>https://forest-of-knowledge.tistory.com/33</link>
      <description>&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1755&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdGqfN/btsK6ke8RGI/xMAfPVsZLL6rQEQKaTClO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdGqfN/btsK6ke8RGI/xMAfPVsZLL6rQEQKaTClO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdGqfN/btsK6ke8RGI/xMAfPVsZLL6rQEQKaTClO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdGqfN%2FbtsK6ke8RGI%2FxMAfPVsZLL6rQEQKaTClO1%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;1755&quot; height=&quot;232&quot; data-origin-width=&quot;1755&quot; data-origin-height=&quot;232&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;해결방법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;tsconfig.json 에서 path 수정&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;b&gt;수정 전&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;1179&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1CCFQ/btsK6hJpIL2/au0ZJwB7n75VWI6zis4aD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1CCFQ/btsK6hJpIL2/au0ZJwB7n75VWI6zis4aD1/img.png&quot; data-alt=&quot;수정 전 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1CCFQ/btsK6hJpIL2/au0ZJwB7n75VWI6zis4aD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1CCFQ%2FbtsK6hJpIL2%2Fau0ZJwB7n75VWI6zis4aD1%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;1318&quot; height=&quot;1179&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;1179&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;수정 후&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;1176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2hU9Q/btsK6ziTSKQ/K2GS6eH8Fu3cZ2fTOC0M90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2hU9Q/btsK6ziTSKQ/K2GS6eH8Fu3cZ2fTOC0M90/img.png&quot; data-alt=&quot;수정한 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2hU9Q/btsK6ziTSKQ/K2GS6eH8Fu3cZ2fTOC0M90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2hU9Q%2FbtsK6ziTSKQ%2FK2GS6eH8Fu3cZ2fTOC0M90%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;1431&quot; height=&quot;1176&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;1176&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;p data-ke-size=&quot;size16&quot;&gt;이후 무사히 빌드가 되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;923&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WWxVq/btsK71ZwgvW/ZYCTRwBuroRdYKHMDxH2H0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WWxVq/btsK71ZwgvW/ZYCTRwBuroRdYKHMDxH2H0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WWxVq/btsK71ZwgvW/ZYCTRwBuroRdYKHMDxH2H0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWWxVq%2FbtsK71ZwgvW%2FZYCTRwBuroRdYKHMDxH2H0%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;1783&quot; height=&quot;923&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;923&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;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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/nuxt/nuxt/issues/23157&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/nuxt/nuxt/issues/23157&lt;/a&gt;&lt;/p&gt;</description>
      <category>Programming 프로그래밍</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/33</guid>
      <comments>https://forest-of-knowledge.tistory.com/33#entry33comment</comments>
      <pubDate>Wed, 4 Dec 2024 15:54:31 +0900</pubDate>
    </item>
    <item>
      <title>[Spring Security] 스프링 시큐리티 간단 구현하기</title>
      <link>https://forest-of-knowledge.tistory.com/29</link>
      <description>&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. build.gradle 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2229&quot; data-origin-height=&quot;1541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIMvpV/btsHum8jddd/8OpCeWRdvm5T1apTFtx561/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIMvpV/btsHum8jddd/8OpCeWRdvm5T1apTFtx561/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIMvpV/btsHum8jddd/8OpCeWRdvm5T1apTFtx561/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIMvpV%2FbtsHum8jddd%2F8OpCeWRdvm5T1apTFtx561%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;2229&quot; height=&quot;1541&quot; data-origin-width=&quot;2229&quot; data-origin-height=&quot;1541&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;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;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;1713&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WgDU4/btsHuPWsipw/3t5eyDQCHu0Gcg4Win4FgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WgDU4/btsHuPWsipw/3t5eyDQCHu0Gcg4Win4FgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WgDU4/btsHuPWsipw/3t5eyDQCHu0Gcg4Win4FgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWgDU4%2FbtsHuPWsipw%2F3t5eyDQCHu0Gcg4Win4FgK%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;1713&quot; height=&quot;1154&quot; data-origin-width=&quot;1713&quot; data-origin-height=&quot;1154&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;p data-ke-size=&quot;size16&quot;&gt;콘솔을 확인하면 일회용 비밀번호가 발급된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 비밀번호를 복사하고 localhost:8080 으로 들어가보자.&lt;/p&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;1517&quot; data-origin-height=&quot;1124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IrZay/btsHvMdOgvu/P2DNeu1EiAV6I3tlYaTRmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IrZay/btsHvMdOgvu/P2DNeu1EiAV6I3tlYaTRmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IrZay/btsHvMdOgvu/P2DNeu1EiAV6I3tlYaTRmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIrZay%2FbtsHvMdOgvu%2FP2DNeu1EiAV6I3tlYaTRmK%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;1517&quot; height=&quot;1124&quot; data-origin-width=&quot;1517&quot; data-origin-height=&quot;1124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;곧바로 로그인 페이지로 연결이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 url을 확인하면 localhost:8080/login 으로 자동으로 리다이렉트 된 것을 볼 수 있다.&lt;/p&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;1500&quot; data-origin-height=&quot;888&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJQocm/btsHtPpAtCK/7NDlWfZV7DWsAKijWgKMGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJQocm/btsHtPpAtCK/7NDlWfZV7DWsAKijWgKMGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJQocm/btsHtPpAtCK/7NDlWfZV7DWsAKijWgKMGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJQocm%2FbtsHtPpAtCK%2F7NDlWfZV7DWsAKijWgKMGK%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;1500&quot; height=&quot;888&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;888&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;p data-ke-size=&quot;size16&quot;&gt;아이디란에 기본 사용자인 user, 비밀번호란에 콘솔에 적힌 일회용 비밀번호를 입력한다.&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;다음과 같이 404에러 페이지가 뜬다면 시큐리티가 성공적으로 적용된 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;714&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VYIMv/btsHuOiZrHV/vffIk3pLxFknK63OF36gNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VYIMv/btsHuOiZrHV/vffIk3pLxFknK63OF36gNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VYIMv/btsHuOiZrHV/vffIk3pLxFknK63OF36gNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVYIMv%2FbtsHuOiZrHV%2FvffIk3pLxFknK63OF36gNK%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;1511&quot; height=&quot;714&quot; data-origin-width=&quot;1511&quot; data-origin-height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 로그인이 되었을 때, 어디로 연결할지 결정하는 컨트롤러를 만들지 않았으니 404에러가 뜨는 것이 당연하다.&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;그렇다면 HomeController를 만들고 로그인이 성공하면 화면에 Home이 뜨게 만들자.&lt;/p&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;1906&quot; data-origin-height=&quot;813&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vdrJm/btsHu5Y5zjm/00oqTX3OiHe2ExMy7jb1S0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vdrJm/btsHu5Y5zjm/00oqTX3OiHe2ExMy7jb1S0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vdrJm/btsHu5Y5zjm/00oqTX3OiHe2ExMy7jb1S0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvdrJm%2FbtsHu5Y5zjm%2F00oqTX3OiHe2ExMy7jb1S0%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;1906&quot; height=&quot;813&quot; data-origin-width=&quot;1906&quot; data-origin-height=&quot;813&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;p data-ke-size=&quot;size16&quot;&gt;그리고 다시 서버를 실행해서 들어간다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 할 때는 다시 새로 발급된 비밀번호를 사용해서 로그인한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw1IZc/btsHtLOsAj5/qLlNRYHvAyRGQ8pZQfCk0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw1IZc/btsHtLOsAj5/qLlNRYHvAyRGQ8pZQfCk0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw1IZc/btsHtLOsAj5/qLlNRYHvAyRGQ8pZQfCk0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw1IZc%2FbtsHtLOsAj5%2FqLlNRYHvAyRGQ8pZQfCk0K%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;1236&quot; height=&quot;329&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/p&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;1598&quot; data-origin-height=&quot;847&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA0qbR/btsHvwoCISn/jgCYOqlQ7Szkyn0ZR9JoCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA0qbR/btsHvwoCISn/jgCYOqlQ7Szkyn0ZR9JoCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA0qbR/btsHvwoCISn/jgCYOqlQ7Szkyn0ZR9JoCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA0qbR%2FbtsHvwoCISn%2FjgCYOqlQ7Szkyn0ZR9JoCK%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;1598&quot; height=&quot;847&quot; data-origin-width=&quot;1598&quot; data-origin-height=&quot;847&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;p data-ke-size=&quot;size16&quot;&gt;application.properties 설정파일을 application.yml로 변경하자. (굳이 안해도 된다. 이게 계층구조로 보기 편해서 그냥 하는 것이다)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HK1me/btsHu2OYMoN/hOxEMQHxMHxVzfEbTLupJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HK1me/btsHu2OYMoN/hOxEMQHxMHxVzfEbTLupJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HK1me/btsHu2OYMoN/hOxEMQHxMHxVzfEbTLupJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHK1me%2FbtsHu2OYMoN%2FhOxEMQHxMHxVzfEbTLupJ0%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;465&quot; height=&quot;372&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;571&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;p data-ke-size=&quot;size16&quot;&gt;리팩터의 이름변경을 통해 파일 확장자명을 변경한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZnYdj/btsHuJIQQBL/K80Ra5wJFFpvM7vxLdbOuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZnYdj/btsHuJIQQBL/K80Ra5wJFFpvM7vxLdbOuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZnYdj/btsHuJIQQBL/K80Ra5wJFFpvM7vxLdbOuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZnYdj%2FbtsHuJIQQBL%2FK80Ra5wJFFpvM7vxLdbOuK%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;560&quot; height=&quot;166&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;263&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;p data-ke-size=&quot;size16&quot;&gt;로그인할 때의 사용자를 설정해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kyn82/btsHu7bwQyA/6azACyyQpYPs9sH3TamL1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kyn82/btsHu7bwQyA/6azACyyQpYPs9sH3TamL1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kyn82/btsHu7bwQyA/6azACyyQpYPs9sH3TamL1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fkyn82%2FbtsHu7bwQyA%2F6azACyyQpYPs9sH3TamL1k%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;594&quot; height=&quot;241&quot; data-origin-width=&quot;977&quot; data-origin-height=&quot;396&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;p data-ke-size=&quot;size16&quot;&gt;다시 서버를 실행하면 콘솔에 이제는 일회용 비밀번호가 뜨지 않는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2735&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVQD6W/btsHuzfgWGm/SLP8KCvzSCjcDYBeC4kTV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVQD6W/btsHuzfgWGm/SLP8KCvzSCjcDYBeC4kTV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVQD6W/btsHuzfgWGm/SLP8KCvzSCjcDYBeC4kTV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVQD6W%2FbtsHuzfgWGm%2FSLP8KCvzSCjcDYBeC4kTV1%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;2735&quot; height=&quot;937&quot; data-origin-width=&quot;2735&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 로그인까지 해서 성공하면 완료!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wTzhF/btsHtXVo90o/KvUhbmB1tyKhKTRe9LLgvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wTzhF/btsHtXVo90o/KvUhbmB1tyKhKTRe9LLgvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wTzhF/btsHtXVo90o/KvUhbmB1tyKhKTRe9LLgvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwTzhF%2FbtsHtXVo90o%2FKvUhbmB1tyKhKTRe9LLgvk%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;525&quot; height=&quot;229&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;659&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;p data-ke-size=&quot;size16&quot;&gt;성공!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1289&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/23AyN/btsHtI5mm8d/dmK5LkjYImcFWEkkqtd1uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/23AyN/btsHtI5mm8d/dmK5LkjYImcFWEkkqtd1uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/23AyN/btsHtI5mm8d/dmK5LkjYImcFWEkkqtd1uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F23AyN%2FbtsHtI5mm8d%2FdmK5LkjYImcFWEkkqtd1uK%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;515&quot; height=&quot;112&quot; data-origin-width=&quot;1289&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Java</category>
      <category>Security</category>
      <category>Spring</category>
      <category>spring security</category>
      <category>springsecutiry</category>
      <category>보안</category>
      <category>스프링</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/29</guid>
      <comments>https://forest-of-knowledge.tistory.com/29#entry29comment</comments>
      <pubDate>Mon, 20 May 2024 10:53:43 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] Java Persistence API 개념 - 엔티티 매니저, 영속성 컨텍스트</title>
      <link>https://forest-of-knowledge.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;엔티티 (Entity)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Entity 어노테이션이 달린 클래스.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;엔티티 매니저 (EntityManager)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 엔티티와 관련된 모든 작업을 처리한다. ( 엔티티 등록, 조회, 수정, 삭제)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Persistence 클래스가 META/INF 하위의 persistence.xml 파일에서 설정 정보를 조회한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 조회한 정보를 기반으로 EntityManagerFactory를 생성한다. (생성 비용이 크기 때문에 한번만 생성해서 공유해 사용함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. EntityManagerFactory 객체가 EntityManager 객체를 생성한다. (생성 비용이 매우 적다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 생성된 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;EntityManager가 JPA 기능을 제공한다.&amp;nbsp;&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;color: #333333; text-align: start;&quot;&gt;앤티티 매니저는 DB 커넥션과 밀접한 영향이 있으므로, 동시성 문제가 발생할 수 있다. 따라서 스레드 간에 공유하거나 재사용하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&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;color: #333333; text-align: start;&quot;&gt;영속성 컨텍스트 (Persistence Context)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;: 엔티티를 영구 저장하는 환경. (논리적 개념)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 엔티티 매니저에 엔티티를 등록하거나 저장하면, 엔티티 매니저는 이 엔티티를 영속성 컨텍스트에 보관해서 관리한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming 프로그래밍/JPA</category>
      <category>Entity</category>
      <category>EntityManager</category>
      <category>Java</category>
      <category>JPA</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/28</guid>
      <comments>https://forest-of-knowledge.tistory.com/28#entry28comment</comments>
      <pubDate>Thu, 2 May 2024 16:45:01 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] JPA 프로젝트 구조, 설정하기</title>
      <link>https://forest-of-knowledge.tistory.com/27</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로젝트 구조&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Maven이면 pom.xml, Gradle이면 build.gradle 사용.&lt;/p&gt;
&lt;pre id=&quot;code_1714631198583&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;myproject/
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/
│   │   │       └── myproject/
│   │   │           └── JpaMain.java
│   │   └── resources/
│   │       └── META-INF/
│   │           └── persistence.xml
│   └── test/
│       ├── java/
│       │   └── com/
│       │       └── myproject/
│       │           └── MyApplicationTest.java
│       └── resources/
└── pom.xml | build.gradle&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; 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;b&gt;프로젝트 설정하기&lt;/b&gt;&lt;/h2&gt;
&lt;h4 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;메이븐 pom.xml&lt;/span&gt; &lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;- 메이븐 프로젝트의 설정 파일.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #222222; text-align: start;&quot;&gt;- JPA를 사용하려면 JPA 구현체(여기서는 Hibernate)와 JDBC 드라이버를 의존성으로 추가&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1714631261615&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&amp;gt;
	&amp;lt;!-- ... --&amp;gt;
	&amp;lt;properties&amp;gt;
		&amp;lt;java.version&amp;gt;17&amp;lt;/java.version&amp;gt;
		&amp;lt;!-- 프로젝트 코드 인코딩 설정 --&amp;gt;
		&amp;lt;project.build.sourceEncoding&amp;gt;UTF-8&amp;lt;/project.build.sourceEncoding&amp;gt;
		&amp;lt;project.reporting.outputEncoding&amp;gt;UTF-8&amp;lt;/project.reporting.outputEncoding&amp;gt;
	&amp;lt;/properties&amp;gt;

	&amp;lt;dependencies&amp;gt;
		&amp;lt;!-- JPA, 하이버네이트 --&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.hibernate.orm&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;hibernate-core&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;6.3.1.Final&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
		&amp;lt;!-- MariaDB JDBC Driver --&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.mariadb.jdbc&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;mariadb-java-client&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;3.1.4&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
		&amp;lt;!-- 로깅 --&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;ch.qos.logback&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;logback-classic&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;1.4.12&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.apache.logging.log4j&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;log4j-core&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;2.20.0&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
	&amp;lt;/dependencies&amp;gt;
	&amp;lt;!-- ... --&amp;gt;
&amp;lt;/project&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;persistence.xml 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- JPA 설정 파일. 데이터베이스 연결 정보와 엔티티 클래스를 설정한다.&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 사용하는 데이터베이스의 종류에 따라 &amp;lt;property name=&quot;javax.persistence.jdbc.driver&quot; /&amp;gt; 의 value를 작성한다. (여기서는 mariadb 사용)&lt;/p&gt;
&lt;pre id=&quot;code_1714631470673&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;persistence xmlns=&quot;http://xmlns.jcp.org/xml/ns/persistence&quot; version=&quot;2.1&quot;&amp;gt;

    &amp;lt;persistence-unit name=&quot;jpabook&quot;&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;!-- 필수 속성 --&amp;gt;
            &amp;lt;property name=&quot;jakarta.persistence.jdbc.driver&quot; value=&quot;org.mariadb.jdbc.Driver&quot;/&amp;gt;
            &amp;lt;property name=&quot;jakarta.persistence.jdbc.user&quot; value=&quot;[유저네임]&quot;/&amp;gt;
            &amp;lt;property name=&quot;jakarta.persistence.jdbc.password&quot; value=&quot;[비번]&quot;/&amp;gt;
            &amp;lt;property name=&quot;jakarta.persistence.jdbc.url&quot; value=&quot;jdbc:mariadb://localhost:[설정포트]/[db이름]&quot;/&amp;gt;
            
            &amp;lt;!-- Hibernate properties --&amp;gt;
            &amp;lt;property name=&quot;hibernate.dialect&quot; value=&quot;org.hibernate.dialect.MariaDBDialect&quot; /&amp;gt;
            &amp;lt;!-- 옵션 --&amp;gt;
            &amp;lt;property name=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;create&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.show_sql&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.format_sql&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.use_sql_comments&quot; value=&quot;true&quot; /&amp;gt;
            &amp;lt;property name=&quot;hibernate.id.new_generator_mappings&quot; value=&quot;true&quot; /&amp;gt;
        &amp;lt;/properties&amp;gt;
    &amp;lt;/persistence-unit&amp;gt;

&amp;lt;/persistence&amp;gt;&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;b&gt;프로젝트 빌드하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 실행하기 전에 pom.xml에서 프로젝트를 빌드해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pom.xml에서 우클릭 &amp;gt; Maven &amp;gt; Reload project 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1829&quot; data-origin-height=&quot;1634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brL3wJ/btsG5GNyCiF/DCxBqgJIdcZ4ayJBLtJqM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brL3wJ/btsG5GNyCiF/DCxBqgJIdcZ4ayJBLtJqM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brL3wJ/btsG5GNyCiF/DCxBqgJIdcZ4ayJBLtJqM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrL3wJ%2FbtsG5GNyCiF%2FDCxBqgJIdcZ4ayJBLtJqM0%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;1829&quot; height=&quot;1634&quot; data-origin-width=&quot;1829&quot; data-origin-height=&quot;1634&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔티티 클래스를 작성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1714633192769&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import jakarta.persistence.*;  

@Entity
@Table(name=&quot;MEMBER&quot;)
public class Member {

    @Id
    @Column(name = &quot;ID&quot;)
    private String id;

    @Column(name = &quot;NAME&quot;)
    private String username;

    private Integer age;

    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
}&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 클래스를 실행해서 JPA가 잘 동작하는지 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1714633082403&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class JpaMain {

    public static void main(String[] args) {

        //엔티티 매니저 팩토리 생성
        EntityManagerFactory emf = Persistence.createEntityManagerFactory(&quot;jpabook&quot;);
        EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성
        EntityTransaction tx = em.getTransaction(); //트랜잭션 기능 획득

        try {
            tx.begin(); //트랜잭션 시작
            logic(em);  //비즈니스 로직
            tx.commit();//트랜잭션 커밋
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback(); //트랜잭션 롤백
        } finally {
            em.close(); //엔티티 매니저 종료
        }
        emf.close(); //엔티티 매니저 팩토리 종료
    }

    public static void logic(EntityManager em) {

        String id = &quot;id1&quot;;
        Member member = new Member();
        member.setId(id);
        member.setUsername(&quot;지한&quot;);
        member.setAge(2);

        em.persist(member); //등록

        member.setAge(20); //수정

        Member findMember = em.find(Member.class, id); //한 건 조회
        System.out.println(&quot;findMember=&quot; + findMember.getUsername() + &quot;, age=&quot; + findMember.getAge());

        //목록 조회
        List&amp;lt;Member&amp;gt; members = em.createQuery(&quot;select m from Member m&quot;, Member.class).getResultList();
        System.out.println(&quot;members.size=&quot; + members.size());

        em.remove(member); //삭제

    }
}&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;1500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/83u7u/btsG5HyUwYk/X9cOpvCHUOjADccYVWIzh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/83u7u/btsG5HyUwYk/X9cOpvCHUOjADccYVWIzh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/83u7u/btsG5HyUwYk/X9cOpvCHUOjADccYVWIzh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F83u7u%2FbtsG5HyUwYk%2FX9cOpvCHUOjADccYVWIzh0%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;1912&quot; height=&quot;1500&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;1500&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;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;&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;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming 프로그래밍/JPA</category>
      <category>JPA</category>
      <category>maVen</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/27</guid>
      <comments>https://forest-of-knowledge.tistory.com/27#entry27comment</comments>
      <pubDate>Thu, 2 May 2024 16:01:51 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] JPA 환경설정/ 엔티티 만들기 + MariaDB (Gradle)</title>
      <link>https://forest-of-knowledge.tistory.com/26</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 글은 개인 공부용 기록을 남긴 글입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IDE: IntelliJ Ultimate&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;MariaDB 준비하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용할 세션 정보&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2037&quot; data-origin-height=&quot;1289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oT237/btsGVbFXekT/6yJ56vi8BdH7vtlNRIOo20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oT237/btsGVbFXekT/6yJ56vi8BdH7vtlNRIOo20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oT237/btsGVbFXekT/6yJ56vi8BdH7vtlNRIOo20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoT237%2FbtsGVbFXekT%2F6yJ56vi8BdH7vtlNRIOo20%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;2037&quot; height=&quot;1289&quot; data-origin-width=&quot;2037&quot; data-origin-height=&quot;1289&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;p data-ke-size=&quot;size16&quot;&gt;세션을 열면 다음과 같은 창이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 kws라는 데이터베이스를 JPA와 연결할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2011&quot; data-origin-height=&quot;1300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yXVGF/btsGUM0HCEp/gDgJ12Z8YP0WHRkZfaZeT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yXVGF/btsGUM0HCEp/gDgJ12Z8YP0WHRkZfaZeT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yXVGF/btsGUM0HCEp/gDgJ12Z8YP0WHRkZfaZeT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyXVGF%2FbtsGUM0HCEp%2FgDgJ12Z8YP0WHRkZfaZeT0%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;2011&quot; height=&quot;1300&quot; data-origin-width=&quot;2011&quot; data-origin-height=&quot;1300&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;p data-ke-size=&quot;size16&quot;&gt;아직은 데이터베이스에 아무것도 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 JPA와 연결하고, 엔티티를 등록한 후 서버를 실행하면 엔티티와 대응되는 테이블이 생성된다.&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;b&gt;SpringBoot 프로젝트 설정하기&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;build.gradle 설정&lt;/h3&gt;
&lt;pre id=&quot;code_1714007779785&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-data-jpa'
    implementation 'org.mariadb.jdbc:mariadb-java-client'
}&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;DB 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;application.yml에 사용할 데이터베이스(mariaDB)의 연결 정보를 작성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1714010987932&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  application:
    name: kws
# DBMS
  datasource:
    driver-class-name: org.mariadb.jdbc.Driver
    url: jdbc:mariadb://localhost:3306/kws
    username: root
    password: 0000
# JPA
  jpa:
    hibernate:
      ddl-auto: update
    properties:
        hibernate:
          show_sql: true
          format_sql: true&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;application.properties 경우&lt;/p&gt;
&lt;pre id=&quot;code_1714007928313&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring.datasource.url=jdbc:mariadb://localhost:[설정포트]/[db이름]
spring.datasource.username=[설정유저네임]
spring.datasource.password=[비번]
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.hibernate.ddl-auto=update&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;datasource: 데이터베이스 연결관련 설정&lt;/li&gt;
&lt;li&gt;driver-class-name: 사용할 jdbc 드라이버 클래스 이름. 여기서는 mariadb의 jdbc driver 클래스 사용.&lt;/li&gt;
&lt;li&gt;url: 데이터베이스에 접속하기 위한 url. localhost:[설정포트]&lt;/li&gt;
&lt;li&gt;username: 데이터베이스에 접속한 사용자 이름&lt;/li&gt;
&lt;li&gt;password: 데이터베이스에 접속한 사용자의 비밀번호&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;JPA 설정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;database-platform: 사용할 데이터베이스의 Hibernate dialect를 설정.&lt;/li&gt;
&lt;li&gt;hibernate: 하이버네이트(Hibernate) 설정.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ddl-auto: 스키마 자동 생성에 대한 옵션. 여기서 update는 애플리케이션을 시작할 때 스키마를 생성 또는 업데이트한다는 의미.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;properties: 하이버네이스의 추가 속성을 설정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;show_sql: 실행되는 SQL 쿼리를 로그로 출력하기 위해 true로 설정&lt;/li&gt;
&lt;li&gt;format_sql: 하이버네이트가 생성한 SQL 쿼리를 가독성 있게 출력하기 위해 true로 설정. (들여쓰기)&lt;/li&gt;
&lt;/ul&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;h2 data-ke-size=&quot;size26&quot;&gt;JPA 적용해서 실행하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;엔티티 만들기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;해당 코드는 위키독스 페이지를 참고했다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://wikidocs.net/161165&quot;&gt;https://wikidocs.net/161165&lt;/a&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 해당 엔티티는 기본키에 해당하는 속성을 반드시 하나 갖고 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;식별자에 해당하는 속성은 @Id, @GeneratedValue(strategy=GenerationType.IDENTITY) 어노테이션을 붙여준다.&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 게시판에 질문이 달린다면 그 질문에는 여러 개의 답변이 달릴 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 질문과 답변은 1:N의 관계이다.&amp;nbsp;질문의 입장에서는 여러 개의 답변과 연결될 수 있고, 답변의 입장에서는 하나의 질문에만 연결될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 답변은 하나의 질문의 식별자를 foreign key로 참조해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1714013357695&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;

@Getter
@Setter
@Entity
public class Answer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(columnDefinition = &quot;TEXT&quot;)
    private String content;

    private LocalDateTime createDate;

    @ManyToOne
    private Question question;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1714013412157&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import lombok.Getter;
import lombok.Setter;

import java.time.LocalDateTime;
import java.util.List;

@Getter
@Setter
@Entity
public class Question {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(length = 200)
    private String title;

    @Column(columnDefinition = &quot;TEXT&quot;)
    private String content;

    private LocalDateTime createDate;

    @OneToMany(mappedBy = &quot;question&quot;, cascade = CascadeType.REMOVE)
    private List&amp;lt;Answer&amp;gt; answerList;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실행하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@SpringBootApplication 어노테이션이 있는 클래스에 들어가서 서버를 실행한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2858&quot; data-origin-height=&quot;1497&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK41q1/btsGVTSf5dR/bvNU8Kf2kz88ahi0gQfxoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK41q1/btsGVTSf5dR/bvNU8Kf2kz88ahi0gQfxoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK41q1/btsGVTSf5dR/bvNU8Kf2kz88ahi0gQfxoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK41q1%2FbtsGVTSf5dR%2FbvNU8Kf2kz88ahi0gQfxoK%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;2858&quot; height=&quot;1497&quot; data-origin-width=&quot;2858&quot; data-origin-height=&quot;1497&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버를 실행하면 아까 설정에서 SQL 쿼리를 볼 수 있게 설정했기 때문에 콘솔에서 SQL 쿼리를 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3301&quot; data-origin-height=&quot;2068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2fKtj/btsGVv5eDNv/iSZHzuEUHIn9SkFczKfOw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2fKtj/btsGVv5eDNv/iSZHzuEUHIn9SkFczKfOw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2fKtj/btsGVv5eDNv/iSZHzuEUHIn9SkFczKfOw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2fKtj%2FbtsGVv5eDNv%2FiSZHzuEUHIn9SkFczKfOw0%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;3301&quot; height=&quot;2068&quot; data-origin-width=&quot;3301&quot; data-origin-height=&quot;2068&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;p data-ke-size=&quot;size16&quot;&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1093&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsVH17/btsGSS16iBF/Ab8fhBpkQDkm3gP2tOlSH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsVH17/btsGSS16iBF/Ab8fhBpkQDkm3gP2tOlSH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsVH17/btsGSS16iBF/Ab8fhBpkQDkm3gP2tOlSH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsVH17%2FbtsGSS16iBF%2FAb8fhBpkQDkm3gP2tOlSH1%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;2012&quot; height=&quot;1093&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1093&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;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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QD8Zv/btsGUQPwVSn/W5BFCbr8hCnkKg5w5kDbGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QD8Zv/btsGUQPwVSn/W5BFCbr8hCnkKg5w5kDbGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QD8Zv/btsGUQPwVSn/W5BFCbr8hCnkKg5w5kDbGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQD8Zv%2FbtsGUQPwVSn%2FW5BFCbr8hCnkKg5w5kDbGk%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;2012&quot; height=&quot;1294&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;1294&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;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;&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;참고 사이트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wikidocs.net/161165&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wikidocs.net/161165&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@sheltonwon/SpringBoot%EC%99%80-MariaDB-%EC%97%B0%EA%B2%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@sheltonwon/SpringBoot%EC%99%80-MariaDB-%EC%97%B0%EA%B2%B0&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@bnb8419/JPA-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@bnb8419/JPA-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://sjh9708.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://sjh9708.tistory.com/77&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://luvris2.tistory.com/462&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://luvris2.tistory.com/462&lt;/a&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>Programming 프로그래밍/JPA</category>
      <category>Entity</category>
      <category>JPA</category>
      <category>mariaDB</category>
      <category>springdata jpa</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/26</guid>
      <comments>https://forest-of-knowledge.tistory.com/26#entry26comment</comments>
      <pubDate>Thu, 25 Apr 2024 12:00:27 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] Java Persistence API 정리</title>
      <link>https://forest-of-knowledge.tistory.com/25</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;JPA(Java Persistence API)&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: Java에서 RDB를 다루기 위한 표준 ORM 기술.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바에서 RDB를 사용할 방식을 정의한 인터페이스. -&amp;gt; 구현체를 통해 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JPA를 구현한 ORM 프레임워크로는 Hibernate, OpenJPA, EclipseLink, DataNucleus 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이중 Hibernate가 가장 많이 사용된다.&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;ORM(Object-Relational Mapping)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 자바 객체와 RDB를 연결(매핑)하는 프로그래밍 기법.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL을 몰라도 자바 언어로 DB에 접근해서 사용 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;JDBC(Java Database Connectivity)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 애플리케이션과 DB 사이에서 중간 계층으로서 DB 관련 작업을 추상화, 표준화 하는 역할을 수행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; DB 종류에 상관없이 적용할 수 있음.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바로 DB 접속, SQL 쿼리 실행, 결과 처리를 할 수 있게 만들어준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JDBC는 인터페이스이기 때문에 구현해서 사용해야 한다. 그 구현체가 바로 JDBC Driver (DB 별로 다르다)&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;JPA 내부에 JDBC가 포함되어 있다. 둘의 역할이 다르기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JPA는 자바 객체와 DB를 매핑만 한다. 내부적으로 DB와 연결하기 위해서는 JDBC를 사용해야 한다.&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;JPA에서 핵심 개념 = 엔티티, 엔티티 매니저&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;b&gt;엔티티(Entity)&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:DB와 매핑되는 클래스(객체)&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;엔티티 매니저 (Entity Manager)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;엔티티 매니저 팩토리 (Entity Manager Factory)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;/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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 엔티티를 관리하는 가상의 공간&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 캐시, 쓰기 지연, 변경 감지, 지연 로딩의 기능을 제공 =&amp;gt; DB에 접근을 최소화함으로써 성능을 향상시킴&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영속성 콘텍스트가 관리하는지에 여부에 다르다. 특정 메소드를 통해 변경 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 분리 상태 (detached) : 영속성 콘텍스트가 관리하지 않는 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 관리 상태 (managed): 영속성 콘텍스트가 관리하는 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비영속 상태 (transient): 영속성 콘텍스트가 관련없는 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 제거된 상태 (removed): 영속성 콘텍스트에서 제거된 상태&lt;/p&gt;
&lt;pre id=&quot;code_1714007041233&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import com.mysite.kws.model.Question;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;

public class EntityManagerTests {
    @PersistenceContext
    private EntityManager entityManager;

    public void test() {
        // 비영속 상태: 엔티티 매니저가 관리하지 않는 상태
        Question q1 = new Question();

        // 관리 상태: 엔티티 매니저가 관리하는 상태. 영속성 컨택스트에 저장
        entityManager.persist(q1);

        // 분리 상태: 엔티티 매니저가 관리하지 않는 상태. 영속성 컨택스트에서 관리 안함
        entityManager.detach(q1);

        // 제거된 상태: 엔티티를 영속성 컨텍스트와 데이터베이스에서 제거
        entityManager.remove(q1);
    }

}&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;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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;참고 사이트&lt;br /&gt;https://goldenrabbit.co.kr/2023/06/08/springjpa/&lt;br /&gt;https://imprint.tistory.com/111&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Programming 프로그래밍/JPA</category>
      <category>JDBC</category>
      <category>JPA</category>
      <category>ORM</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/25</guid>
      <comments>https://forest-of-knowledge.tistory.com/25#entry25comment</comments>
      <pubDate>Thu, 25 Apr 2024 10:11:50 +0900</pubDate>
    </item>
    <item>
      <title>[자바] 컬렉션 - List, Set, Map 인터페이스</title>
      <link>https://forest-of-knowledge.tistory.com/18</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컬렉션 프레임워크에서는 컬렉션 데이터 그룹을 3가지 타입으로 보고 이것을 다룰 3가지 인터페이스를 정의했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중, List와 Set의 공통된 부분을 뽑아서 새로운 인터페이스인 Collection이 추가로 정의되었다.&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;table style=&quot;border-collapse: collapse; width: 100%; height: 102px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.2636%; text-align: center; height: 68px;&quot; rowspan=&quot;4&quot;&gt;Collection&lt;/td&gt;
&lt;td style=&quot;width: 16.9379%; text-align: center; height: 34px;&quot; rowspan=&quot;2&quot;&gt;List&lt;/td&gt;
&lt;td style=&quot;width: 68.7984%; height: 17px;&quot;&gt;순서가 있는 데이터 집합. 중복을 허용한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 68.7984%; height: 17px;&quot;&gt;구현 클래스: ArrayList, LinkedList, Stack, Vector 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 16.9379%; text-align: center; height: 34px;&quot; rowspan=&quot;2&quot;&gt;Set&lt;/td&gt;
&lt;td style=&quot;width: 68.7984%; height: 17px;&quot;&gt;순서가 없는 데이터 집합. 중복을 허용하지 않는다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 68.7984%; height: 17px;&quot;&gt;구현 클래스: HashSet, TreeSet 등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.2636%; text-align: center; height: 34px;&quot; rowspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.9379%; text-align: center; height: 34px;&quot; rowspan=&quot;2&quot;&gt;Map&lt;/td&gt;
&lt;td style=&quot;width: 68.7984%; height: 17px;&quot;&gt;키(key)와 값(value)의 쌍으로 이루어진 데이터 집합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 68.7984%; height: 17px;&quot;&gt;구현클래스: HashMap, TreeMap, Hashtable, Properties emd&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Collection 인터페이스의 메소드&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 206px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 35px;&quot;&gt;boolean add(Object o)&lt;br /&gt;boolean addAll(Collection c)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 35px;&quot;&gt;지정된 객체들을 콜렉션에 추가한다. &lt;br /&gt;성공하면 true 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;void clear()&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;콜렉션의 모든 객체를 삭제한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 35px;&quot;&gt;boolean contains(Object o)&lt;br /&gt;boolean containsAll(Collection c)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 35px;&quot;&gt;지정된 객체(o) 혹은 콜렉션 객체들이 콜렉션에 포함되어 있는지 확인한다. &lt;br /&gt;사실이면 true 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;boolean equals(Object o)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;동일한 콜렉션인지 비교한다.&lt;br /&gt;사실이면 true 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;int hashCode()&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;콜렉션의 해쉬코드를 반환한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;boolean isEmpty()&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;콜렉션이 비어있는지 확인한다.&lt;br /&gt;비어있으면 true 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;Iterator iterator()&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;콜렉션의 이터레이터를 얻어서 반환한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;boolean remove(Object o)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;지정된 객체(o)를 삭제한다.&amp;nbsp;&lt;br /&gt;성공하면 true 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;boolean removeall(Collection c)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;지정된 콜렉션에 포함된 객체들을 삭제한다.&lt;br /&gt;성공하면 true 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center;&quot;&gt;boolean retainAll(Collection c)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%;&quot;&gt;지정된 콜렉션(c)에 포함된 객체만을 남기고 나머지 객체는 삭제한다.&lt;br /&gt;이로인해 콜렉션에 변화가 있으면 true를 반환. &lt;br /&gt;변화가 없으면 false를 반환.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center; height: 17px;&quot;&gt;int size()&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%; height: 17px;&quot;&gt;콜렉션에 저장된 객체의 수를 반환하다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center;&quot;&gt;Object[] toArray()&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%;&quot;&gt;콜렉션에 저장된 객체들을 객체 배열로 반환한다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.6279%; text-align: center;&quot;&gt;Object[] toArray(Object[] a)&lt;/td&gt;
&lt;td style=&quot;width: 68.3721%;&quot;&gt;지정된 배열에 Collection 객체를 저장해서 반환한다.&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;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;</description>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/18</guid>
      <comments>https://forest-of-knowledge.tistory.com/18#entry18comment</comments>
      <pubDate>Thu, 25 Jan 2024 14:57:19 +0900</pubDate>
    </item>
    <item>
      <title>VS Code에서 Git branch 새로 생성하기</title>
      <link>https://forest-of-knowledge.tistory.com/15</link>
      <description>&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: #dddddd;&quot;&gt;&lt;b&gt;Ctrl + Shift + P&lt;/b&gt;&lt;/span&gt; )를 사용해서 Git: Checkout to 를 실행한다.&lt;/p&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;1209&quot; data-origin-height=&quot;439&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ck6n5c/btsDKaDkO9D/w2N4TmH5zZlKOtg0LFWhHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ck6n5c/btsDKaDkO9D/w2N4TmH5zZlKOtg0LFWhHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ck6n5c/btsDKaDkO9D/w2N4TmH5zZlKOtg0LFWhHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fck6n5c%2FbtsDKaDkO9D%2Fw2N4TmH5zZlKOtg0LFWhHK%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;1209&quot; height=&quot;439&quot; data-origin-width=&quot;1209&quot; data-origin-height=&quot;439&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 레포지터리가 master 밖에 없기에 이것만 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bch9LW/btsDNKcPvVi/4J1fqwOsUv1OlaVXI3Dxs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bch9LW/btsDNKcPvVi/4J1fqwOsUv1OlaVXI3Dxs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bch9LW/btsDNKcPvVi/4J1fqwOsUv1OlaVXI3Dxs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbch9LW%2FbtsDNKcPvVi%2F4J1fqwOsUv1OlaVXI3Dxs1%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;1057&quot; height=&quot;293&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;293&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;master에서 분기되는 브랜치(branch)를 하나 생성하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Create new branch from... 을 누르고 master를 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byLUa2/btsDGrzNWno/xh7rX9AyxYXmA51XkDQNU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byLUa2/btsDGrzNWno/xh7rX9AyxYXmA51XkDQNU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byLUa2/btsDGrzNWno/xh7rX9AyxYXmA51XkDQNU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyLUa2%2FbtsDGrzNWno%2Fxh7rX9AyxYXmA51XkDQNU0%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;1013&quot; height=&quot;298&quot; data-origin-width=&quot;1013&quot; data-origin-height=&quot;298&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;p data-ke-size=&quot;size16&quot;&gt;그리고 브랜치의 이름을 적어주면 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 만드는 홈페이지의 CSS 틀을 짜는 용도로 만드는 브랜치이기에 branch1_frame이라고 명명했다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kImMj/btsDKQLoYBb/Qv1s37t9y7tpgrUiJj2mZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kImMj/btsDKQLoYBb/Qv1s37t9y7tpgrUiJj2mZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kImMj/btsDKQLoYBb/Qv1s37t9y7tpgrUiJj2mZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkImMj%2FbtsDKQLoYBb%2FQv1s37t9y7tpgrUiJj2mZ0%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;762&quot; height=&quot;696&quot; data-origin-width=&quot;762&quot; data-origin-height=&quot;696&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 브랜치는 vscode에서 만들었기 때문에 원격저장소에는 반영이 되어 있지 않다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 브랜치를 publish 해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP9D6r/btsDJBnGwtB/jsgYrS0SoZseDmAxKN5KU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP9D6r/btsDJBnGwtB/jsgYrS0SoZseDmAxKN5KU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP9D6r/btsDJBnGwtB/jsgYrS0SoZseDmAxKN5KU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP9D6r%2FbtsDJBnGwtB%2FjsgYrS0SoZseDmAxKN5KU0%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;497&quot; height=&quot;182&quot; data-origin-width=&quot;497&quot; data-origin-height=&quot;182&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;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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lF5fy/btsDNsJ18dU/yRW6t4MRRlLOnjrhf4SoCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lF5fy/btsDNsJ18dU/yRW6t4MRRlLOnjrhf4SoCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lF5fy/btsDNsJ18dU/yRW6t4MRRlLOnjrhf4SoCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlF5fy%2FbtsDNsJ18dU%2FyRW6t4MRRlLOnjrhf4SoCK%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;986&quot; height=&quot;284&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;284&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;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;p data-ke-size=&quot;size16&quot;&gt;branch1을 pull request 하겠냐는 질문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 모르겠어서 한번 Create Pull Request를 눌러보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sTMKm/btsDHqAIhSy/ueL5ckxhdtkUICKggOfIWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sTMKm/btsDHqAIhSy/ueL5ckxhdtkUICKggOfIWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sTMKm/btsDHqAIhSy/ueL5ckxhdtkUICKggOfIWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsTMKm%2FbtsDHqAIhSy%2FueL5ckxhdtkUICKggOfIWK%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;1010&quot; height=&quot;472&quot; data-origin-width=&quot;1010&quot; data-origin-height=&quot;472&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아하. branch1을 master랑 합치겠냐는 의미였구나.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직은 작업한 것이 없으므로 넘기자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;730&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sr6cN/btsDIyLKlWa/Ds3RqEimpqg32viPfBpK4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sr6cN/btsDIyLKlWa/Ds3RqEimpqg32viPfBpK4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sr6cN/btsDIyLKlWa/Ds3RqEimpqg32viPfBpK4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSr6cN%2FbtsDIyLKlWa%2FDs3RqEimpqg32viPfBpK4K%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;1254&quot; height=&quot;730&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;730&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;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;&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;first commit이라고 이름짓고 작성 완료. 그리고 push to origin을 해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;507&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddtHqO/btsDNqenI76/oerxgNeWBOfzKZHxq1CAfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddtHqO/btsDNqenI76/oerxgNeWBOfzKZHxq1CAfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddtHqO/btsDNqenI76/oerxgNeWBOfzKZHxq1CAfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddtHqO%2FbtsDNqenI76%2FoerxgNeWBOfzKZHxq1CAfk%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;1582&quot; height=&quot;507&quot; data-origin-width=&quot;1582&quot; data-origin-height=&quot;507&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;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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1385&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1scwZ/btsDGMcJHQH/Q8Lpm9kft4kZmu6t8lPwAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1scwZ/btsDGMcJHQH/Q8Lpm9kft4kZmu6t8lPwAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1scwZ/btsDGMcJHQH/Q8Lpm9kft4kZmu6t8lPwAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1scwZ%2FbtsDGMcJHQH%2FQ8Lpm9kft4kZmu6t8lPwAk%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;1385&quot; height=&quot;270&quot; data-origin-width=&quot;1385&quot; data-origin-height=&quot;270&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;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;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;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;</description>
      <category>GIT</category>
      <category>Github</category>
      <category>vscode</category>
      <category>깃</category>
      <category>깃허브</category>
      <category>환경설정</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/15</guid>
      <comments>https://forest-of-knowledge.tistory.com/15#entry15comment</comments>
      <pubDate>Sun, 21 Jan 2024 17:28:24 +0900</pubDate>
    </item>
    <item>
      <title>[WEB] 다이나믹 웹 프로젝트 만들기</title>
      <link>https://forest-of-knowledge.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 이클립스에서 우클릭 &amp;gt; New &amp;gt; Dynamic Web Project를 누른다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;628&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zWARm/btsmRrVKpC1/qlHMJfkhWfg9KZGJpAf2vK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zWARm/btsmRrVKpC1/qlHMJfkhWfg9KZGJpAf2vK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zWARm/btsmRrVKpC1/qlHMJfkhWfg9KZGJpAf2vK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzWARm%2FbtsmRrVKpC1%2FqlHMJfkhWfg9KZGJpAf2vK%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;1000&quot; height=&quot;628&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로젝트 이름을 작성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 프로젝트의 위치가 어디에 있는지 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이클립스와 연동한 톰캣으로 잘 연결되었는지 확인한다. 여기서는 연동한 9버전 톰캣과 잘 연결되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC9l0Q/btsmOIEv41L/bM96TcvF50GjdnEpbc1zn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC9l0Q/btsmOIEv41L/bM96TcvF50GjdnEpbc1zn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC9l0Q/btsmOIEv41L/bM96TcvF50GjdnEpbc1zn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC9l0Q%2FbtsmOIEv41L%2FbM96TcvF50GjdnEpbc1zn1%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;635&quot; height=&quot;695&quot; data-origin-width=&quot;635&quot; data-origin-height=&quot;695&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;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;634&quot; data-origin-height=&quot;695&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfRrDE/btsmUuRZ3My/97N9H1n2ab7TowdDLL74nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfRrDE/btsmUuRZ3My/97N9H1n2ab7TowdDLL74nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfRrDE/btsmUuRZ3My/97N9H1n2ab7TowdDLL74nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfRrDE%2FbtsmUuRZ3My%2F97N9H1n2ab7TowdDLL74nk%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;634&quot; height=&quot;695&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;695&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;p data-ke-size=&quot;size16&quot;&gt;여기서 이건 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Generate web.xml deployment descriptor 부분을 꼭 체크해두자!!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CIYVC/btsmRpXXeuA/Fx7pEC6IofzjTAMuYzYnY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CIYVC/btsmRpXXeuA/Fx7pEC6IofzjTAMuYzYnY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CIYVC/btsmRpXXeuA/Fx7pEC6IofzjTAMuYzYnY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCIYVC%2FbtsmRpXXeuA%2FFx7pEC6IofzjTAMuYzYnY0%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;640&quot; height=&quot;700&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;700&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;p data-ke-size=&quot;size16&quot;&gt;다 되었으면 완료!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dusmoF/btsmSuLuJIB/RVS8zvCvNyFX8DwsWkllK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dusmoF/btsmSuLuJIB/RVS8zvCvNyFX8DwsWkllK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dusmoF/btsmSuLuJIB/RVS8zvCvNyFX8DwsWkllK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdusmoF%2FbtsmSuLuJIB%2FRVS8zvCvNyFX8DwsWkllK0%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;1009&quot; height=&quot;761&quot; data-origin-width=&quot;1009&quot; data-origin-height=&quot;761&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Programming 프로그래밍</category>
      <author>8효송8</author>
      <guid isPermaLink="true">https://forest-of-knowledge.tistory.com/14</guid>
      <comments>https://forest-of-knowledge.tistory.com/14#entry14comment</comments>
      <pubDate>Sat, 8 Jul 2023 17:03:59 +0900</pubDate>
    </item>
  </channel>
</rss>