<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>STUDY AND LESSON</title>
    <link>https://developer-rooney.tistory.com/</link>
    <description>자바를 비롯한 다양한 프로그래밍 언어와 오라클, MariaDB 등 데이터베이스 학습 및 일본어 학습 글을 작성하고 있습니다.</description>
    <language>ko</language>
    <pubDate>Sun, 10 May 2026 16:24:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Developer 수한</managingEditor>
    <image>
      <title>STUDY AND LESSON</title>
      <url>https://tistory1.daumcdn.net/tistory/4381408/attach/ce4f181ffe424bba938a56f175617eb5</url>
      <link>https://developer-rooney.tistory.com</link>
    </image>
    <item>
      <title>리눅스 기본 명령어</title>
      <link>https://developer-rooney.tistory.com/238</link>
      <description>&lt;ul style=&quot;list-style-type: disc; background-color: oklch(1 0 0); color: #222222; text-align: start;&quot; data-nodeid=&quot;6&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-nodeid=&quot;7&quot;&gt;ls&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 파일 리스트 출력&lt;/li&gt;
&lt;li data-nodeid=&quot;9&quot;&gt;ls -l&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 파일 리스트 출력(좀더 자세한 정보)&lt;/li&gt;
&lt;li data-nodeid=&quot;11&quot;&gt;ll&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 파일 리스트 출력(좀더 자세한 정보)&lt;/li&gt;
&lt;li data-nodeid=&quot;13&quot;&gt;ls -al&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 파일 리스트 출력(좀더 자세한 정보 + 숨김파일까지 표시)&lt;/li&gt;
&lt;li data-nodeid=&quot;15&quot;&gt;clear&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 화면 지우기&lt;/li&gt;
&lt;li data-nodeid=&quot;17&quot;&gt;pwd&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 현재 위치 표시&lt;/li&gt;
&lt;li data-nodeid=&quot;19&quot;&gt;cd ~&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 자신(운영체제 사용자)의 개인폴더로 이동&lt;/li&gt;
&lt;li data-nodeid=&quot;21&quot;&gt;cd /폴더명A/폴더명B&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 루트폴더 기준에서 해당 폴더로 이동(절대이동)&lt;/li&gt;
&lt;li data-nodeid=&quot;23&quot;&gt;팁 : 대부분의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;./는 생략가능&lt;/li&gt;
&lt;li data-nodeid=&quot;25&quot;&gt;cd ./폴더명&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 해당 폴더로 이동(상대이동)&lt;/li&gt;
&lt;li data-nodeid=&quot;27&quot;&gt;cd ..&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 상위 폴더로 이동(상대이동)&lt;/li&gt;
&lt;li data-nodeid=&quot;29&quot;&gt;rmdir ./폴더명&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 디렉토리 삭제(디렉토리안에 파일이 없어야 함)&lt;/li&gt;
&lt;li data-nodeid=&quot;31&quot;&gt;mkdir ./폴더명&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 디렉토리 생성&lt;/li&gt;
&lt;li data-nodeid=&quot;33&quot;&gt;mkdir -p ./폴더명A/폴더명B&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 디렉토리를 한번에 여러개 생성&lt;/li&gt;
&lt;li data-nodeid=&quot;35&quot;&gt;vim 문서파일명&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 문서파일을 수정하거나 만들기 위한 VIM 에디터를 실행한다.
&lt;ul style=&quot;list-style-type: disc; color: #222222;&quot; data-nodeid=&quot;37&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-nodeid=&quot;38&quot;&gt;a&lt;span&gt;&amp;nbsp;&lt;/span&gt;: vim에서 수정모드로 변경한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;40&quot;&gt;esc&lt;span&gt;&amp;nbsp;&lt;/span&gt;: vim에서 명령모드로 변경한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;42&quot;&gt;메뉴 모드에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;:wq&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-nodeid=&quot;44&quot;&gt;rm 파일명&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 파일을 지운다.&lt;/li&gt;
&lt;li data-nodeid=&quot;46&quot;&gt;echo ~&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 현재 사용자의 폴더경로를 화면에 출력한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;48&quot;&gt;echo 1&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 1을 화면에 출력한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;50&quot;&gt;echo &quot;원숭이도 이해 할 수 있는 Git&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 내용을 화면에 출력한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;52&quot;&gt;echo &quot;원숭이도 이해 할 수 있는 Git&quot; &amp;gt; sample.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 내용을 sample.txt 파일안에 출력한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;54&quot;&gt;cat sample.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;: sample.txt의 내용을 화면에 출력한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;56&quot;&gt;ls -al | fgrep 'sshd'&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 현재 디렉토리의 파일리스트 중에서 결과중에서 sshd가 포함된 줄만 추린다.&lt;/li&gt;
&lt;li data-nodeid=&quot;58&quot;&gt;ps aux | fgrep 'sshd'&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 현재 실행중인 프로세스리스트 중에서 결과중에서 sshd가 포함된 줄만 추린다.&lt;/li&gt;
&lt;li data-nodeid=&quot;60&quot;&gt;ps aux | fgrep 'sshd' &amp;gt; a.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 현재 실행중인 프로세스리스트 중에서 결과중에서 sshd가 포함된 줄만 추린다. 그후 그것을 화면이 아닌 a.txt 파일안에 출력한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;62&quot;&gt;zip a.zip a.txt b.txt&lt;span&gt;&amp;nbsp;&lt;/span&gt;: a.txt와 b.txt를 a.zip(으)로 압축한다.&lt;/li&gt;
&lt;li data-nodeid=&quot;64&quot;&gt;unzip a.zip&lt;span&gt;&amp;nbsp;&lt;/span&gt;: a.zip의 압축을 푼다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming/etc</category>
      <category>bash</category>
      <category>bash 명령어</category>
      <category>리눅스</category>
      <category>명령어</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/238</guid>
      <comments>https://developer-rooney.tistory.com/238#entry238comment</comments>
      <pubDate>Sun, 11 May 2025 11:10:07 +0900</pubDate>
    </item>
    <item>
      <title>[MairaDB] Amazon linux2에서 MariaDB 실행하는 방법</title>
      <link>https://developer-rooney.tistory.com/237</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Linux2에서 MariaDB 실행 및 정지 등 커맨드를 정리했습니다.&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;sudo systemctl start mariadb&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;sudo systemctl start mariadb&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;sudo systemctl restart mariadb&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;sudo systemctl status mariadb&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;그런데 systemctl으로 실행이 안 되는 경우에는 아래처럼 직접 접근해야 된다.&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;sudo /etc/init.d/mysql start&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;sudo /etc/init.d/mysql stop&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;sudo /etc/init.d/mysql restart&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;sudo /etc/init.d/mysql status&lt;/p&gt;</description>
      <category>DataBase/MySQL, MariaDB</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/237</guid>
      <comments>https://developer-rooney.tistory.com/237#entry237comment</comments>
      <pubDate>Tue, 9 Aug 2022 12:28:57 +0900</pubDate>
    </item>
    <item>
      <title>[구글 애드센스] 지급에서 '계좌 이체 조정' 항목으로 수익 이동</title>
      <link>https://developer-rooney.tistory.com/236</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 구글 애드센스에서 잔고를 확인했는데 기존에 69달러 정도였던 수익이 14달러까지 떨어졌습니다.&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;아래 이미지처럼 '계좌 이체 조정' 이라는 항목으로 50달러 넘게 빠져나갔는데 커뮤니티에 게시글을 남겼지만 다들 모르시는 것 같아 구글 애드센스 영어 버전 커뮤니티에 들어가서 관련 문의와 답변을 찾아보니 이제 애드센스 수익과 유튜브 수익을 별도로 관리하기 때문에 잔고가 이전된 것이라고 하네요.&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;1.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H3B3N/btrIoK18kEa/Ovzmsf9r9MAA1Le2TkTrpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H3B3N/btrIoK18kEa/Ovzmsf9r9MAA1Le2TkTrpk/img.png&quot; data-alt=&quot;계좌 이체 조정 항목으로 21달러가 사라짐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H3B3N/btrIoK18kEa/Ovzmsf9r9MAA1Le2TkTrpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH3B3N%2FbtrIoK18kEa%2FOvzmsf9r9MAA1Le2TkTrpk%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;1266&quot; height=&quot;381&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;계좌 이체 조정 항목으로 21달러가 사라짐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/np5LX/btrImcrw6MN/z68XQA4VhnNKTu8GZx1Hu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/np5LX/btrImcrw6MN/z68XQA4VhnNKTu8GZx1Hu0/img.png&quot; data-alt=&quot;계좌 이체 조정이라는 항목으로 34달러가 사라짐&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/np5LX/btrImcrw6MN/z68XQA4VhnNKTu8GZx1Hu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnp5LX%2FbtrImcrw6MN%2Fz68XQA4VhnNKTu8GZx1Hu0%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;1276&quot; height=&quot;456&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;계좌 이체 조정이라는 항목으로 34달러가 사라짐&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1383&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brmIQq/btrIuYrDPSy/jzGBaJkxJsgJ0zFKHtkrW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brmIQq/btrIuYrDPSy/jzGBaJkxJsgJ0zFKHtkrW1/img.png&quot; data-alt=&quot;애드센스와 유튜브 수익의 분리&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brmIQq/btrIuYrDPSy/jzGBaJkxJsgJ0zFKHtkrW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrmIQq%2FbtrIuYrDPSy%2FjzGBaJkxJsgJ0zFKHtkrW1%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;1383&quot; height=&quot;554&quot; data-origin-width=&quot;1383&quot; data-origin-height=&quot;554&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;위 이미지를 보시면 결제 정보 페이지에서 애드센스와 유튜브로 분리된 걸 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmtbjK/btrItuSaUXE/qytG2sPA9fatJAIztE3OMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmtbjK/btrItuSaUXE/qytG2sPA9fatJAIztE3OMk/img.png&quot; data-alt=&quot;애드센스에서 분리된 유튜브 수익&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmtbjK/btrItuSaUXE/qytG2sPA9fatJAIztE3OMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmtbjK%2FbtrItuSaUXE%2FqytG2sPA9fatJAIztE3OMk%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;1331&quot; height=&quot;426&quot; data-origin-width=&quot;1331&quot; data-origin-height=&quot;426&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;애드센스에서 계좌 이체 조정이라는 항목으로 빠져나간 금액이 여기로 옮겨졌네요.&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;</description>
      <category>파이프 라인 구축/구글 애드센스</category>
      <category>계좌 이체 조정</category>
      <category>계좌이체조정</category>
      <category>구글</category>
      <category>구글 애드센스</category>
      <category>구글 애드센스 계좌 이체 조정</category>
      <category>구독자 1000명 수익</category>
      <category>유튜브</category>
      <category>유튜브 수익</category>
      <category>유튜브 한달 수익</category>
      <category>한달 수익</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/236</guid>
      <comments>https://developer-rooney.tistory.com/236#entry236comment</comments>
      <pubDate>Fri, 29 Jul 2022 11:58:16 +0900</pubDate>
    </item>
    <item>
      <title>Optional 올바르게 쓰기</title>
      <link>https://developer-rooney.tistory.com/234</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1657599006754&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;blog&quot; data-og-title=&quot;Java Optional 바르게 쓰기&quot; data-og-description=&quot;Java Optional 바르게 쓰기Brian Goetz는 스택오버플로우에서 Optional을 만든 의도에 대해 다음과 같이 말했다. &amp;hellip; it was not to be a general purpose Maybe type, as much as many people would have liked us to do so. Our intention w&quot; data-og-host=&quot;homoefficio.github.io&quot; data-og-source-url=&quot;https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/&quot; data-og-url=&quot;http://homoefficio.github.io/2019/10/03/Java-Optional-바르게-쓰기/index.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bTguEe/hyO4B28BNU/DCLGpm6HbODSX1IabPAYt1/img.jpg?width=640&amp;amp;height=640&amp;amp;face=0_0_640_640,https://scrap.kakaocdn.net/dn/bymLVd/hyO3hLXLvP/cGpwfjgu9Dae3jKsAJAYl1/img.jpg?width=1280&amp;amp;height=711&amp;amp;face=0_0_1280_711&quot;&gt;&lt;a href=&quot;https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://homoefficio.github.io/2019/10/03/Java-Optional-%EB%B0%94%EB%A5%B4%EA%B2%8C-%EC%93%B0%EA%B8%B0/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bTguEe/hyO4B28BNU/DCLGpm6HbODSX1IabPAYt1/img.jpg?width=640&amp;amp;height=640&amp;amp;face=0_0_640_640,https://scrap.kakaocdn.net/dn/bymLVd/hyO3hLXLvP/cGpwfjgu9Dae3jKsAJAYl1/img.jpg?width=1280&amp;amp;height=711&amp;amp;face=0_0_1280_711');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Java Optional 바르게 쓰기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Java Optional 바르게 쓰기Brian Goetz는 스택오버플로우에서 Optional을 만든 의도에 대해 다음과 같이 말했다. &amp;hellip; it was not to be a general purpose Maybe type, as much as many people would have liked us to do so. Our intention w&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;homoefficio.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/234</guid>
      <comments>https://developer-rooney.tistory.com/234#entry234comment</comments>
      <pubDate>Tue, 12 Jul 2022 13:10:11 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] QueryDSL 설정(Gradle)</title>
      <link>https://developer-rooney.tistory.com/230</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;build.gradle 설정&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1647702654950&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// querydsl 추가
buildscript {
    ext {
        queryDslVersion = &quot;5.0.0&quot;
    }
}

plugins {
    id 'org.springframework.boot' version '2.6.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    
    //querydsl 플러그인 추가
    id &quot;com.ewerk.gradle.plugins.querydsl&quot; version &quot;1.0.10&quot;

    id 'java'
}

group = 'com.study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
    annotationProcessor 'org.projectlombok:lombok'

    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

    //querydsl 추가
    implementation &quot;com.querydsl:querydsl-jpa:${queryDslVersion}&quot;
    implementation &quot;com.querydsl:querydsl-apt:${queryDslVersion}&quot;

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}


tasks.named('test') {
    useJUnitPlatform()
}

//querydsl 추가 시작
def querydslDir = &quot;$buildDir/generated/querydsl&quot;

querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}
sourceSets {
    main.java.srcDir querydslDir
}
compileQuerydsl{
    options.annotationProcessorPath = configurations.querydsl
}
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}
//querydsl 추가 끝&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java Web/JPA</category>
      <category>Java ORM</category>
      <category>Java Persistence API</category>
      <category>jpa</category>
      <category>ORM</category>
      <category>querydsl</category>
      <category>QueryDSL Gradle</category>
      <category>QueryDSL 설정</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/230</guid>
      <comments>https://developer-rooney.tistory.com/230#entry230comment</comments>
      <pubDate>Sun, 20 Mar 2022 00:12:11 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] @Valid, @Validated 사용법</title>
      <link>https://developer-rooney.tistory.com/229</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;클라이언트 측에서 넘어온 데이터를 객체에 바인딩할 때 @Valid와 @Validated로 유효성 검사를 할 수 있습니다.&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;font-family: 'Noto Serif KR';&quot;&gt;우선 각 빌드에 맞게 의존성을 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #1b711d;&quot;&gt;&lt;b&gt;Gradle일 경우, build.gradle에 의존성 추가&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1646962044333&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-validation'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d; font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;Maven일 경우, pom.xml에 의존성 추가&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1646962111473&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;spring-boot-starter-validation&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.6.3&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #1b711d; font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;유효성 검사를 위한 어노테이션 적용&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span&gt;객체에 유효성 검사를 적용할 필드에 어노테이션을 적용합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646962342093&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Article {

    private Long id;
    
    @NotEmpty
    private String title;
    
    @NotEmpty
    private String content;
    
    ...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;어노테이션 종류&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style14&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;Anotation&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;제약조건&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@NotNull&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Null 불가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Null&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Null만 입력 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@NotEmpty&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Null, 빈 문자열 불가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@NotBlank&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Null, 빈 문자열, 스페이스만 있는 문자열 불가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Size(min= , max= )&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;문자열, 배열등의 크기가 만족하는가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Pattern(regex= )&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;정규식을 만족하는가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Max(숫자)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;지정 값 이하인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Min(숫자)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;지정 값 이상인가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Future&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;현재 보다 미래인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Past&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;현재 보다 과거인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Positive&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;양수만 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@PositiveOrZero&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;양수와 0만 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Negative&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;음수만 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@NegativeOrZero&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;음수와 0만 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Email&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이메일 형식만 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Digits(integer= , fraction = )&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;대상 수가 지정된 정수와 소수 자리 수 보다 작은가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@DecimalMax(value= )&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;지정된 값(실수) 이하인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@DecimalMin(value= )&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;지정된 값(실수) 이상인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@AssertFalse&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;false 인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@AssertTrue&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;true 인가?&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #1b711d;&quot;&gt;&lt;b&gt;Controller에서 유효성 검사&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;해당 유효성 검사를 할 것인지에 대해 Controller에서 @Valid를 통해 적용할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646962566749&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RestController
public class ArticleController {

    ...

    @PostMapping(&quot;/article/write&quot;)
    public ResponseEntity articleWrite(@RequestBody @Valid Article article) {
        ...
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;@Validated&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;@Validated 어노테이션은 스프링에서 제공하는 @Valid 기능을 확장한 어노테이션이고 그룹핑 목적으로 사용합니다. 예를 들어 위 예제에서 본 Article 클래스에서 @NotEmpty를 통해 게시글 제목과 내용에 null값과 빈 문자열이 들어가지 못하도록 설정했는데 @Valid를 사용하면 필드에 적용된 모든 어노테이션에 대한 검증이 이뤄지므로 특정 필드만 유효성 검사를 하고 싶을 경우에는 필드를 그룹핑하여 일부만 유효성 검사를 할 수 있습니다.&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;font-family: 'Noto Serif KR';&quot;&gt;그룹을 지정하기 위한 용도의 클래스를 하나 생성하고 그룹별 interface를 클래스 내에 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646962953407&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class ValidationGroups {

    public interface groupA {};
    public interface groupB {};

}&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;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;그리고 적용할 필드에 그룹을 적용하면 그룹핑이 끝납니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646962777024&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Article {

    private Long id;
    
    @NotEmpty(group = {ValidationGroups.groupA.class})
    private String title;
    
    @NotEmpty(group = {ValidationGroups.groupB.class})
    private String content;
    
    ...

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위에서 본 예제 Controller에 유효성 검사 시 게시글 내용만 null값을 체크하고 싶으면 아래 코드처럼 적용하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646963206548&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RestController
public class ArticleController {

    ...

    @PostMapping(&quot;/article/write&quot;)
    public ResponseEntity articleWrite(@RequestBody 
                                       @Validated(ValidationGroup.groupB.class) Article article) {
        ...
    }

}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java Web/Spring</category>
      <category>@NotBlank</category>
      <category>@NotEmpty</category>
      <category>@NotNull</category>
      <category>@Size</category>
      <category>@Valid</category>
      <category>@Validated</category>
      <category>Spring Validation</category>
      <category>Spring 유효성 검사</category>
      <category>validation check</category>
      <category>유효성 검사</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/229</guid>
      <comments>https://developer-rooney.tistory.com/229#entry229comment</comments>
      <pubDate>Fri, 11 Mar 2022 10:48:20 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] Entity 설계 시 주의사항</title>
      <link>https://developer-rooney.tistory.com/226</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;엔티티(Entity) 설계 시 주의사항&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. Setter를 사용하지 말 것&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;Setter가 모두 열려있을 경우 변경 포인트가 많아서 유지 보수가 어려워집니다.&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;b&gt;&lt;span style=&quot;&quot;&gt;2. 모든 연관 관계는 지연로딩(LAZY)로 설정할 것 * 중요&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;즉시로딩(EAGER)은 예측이 어렵고 어떤 SQL이 실행될 지 예측하기 어렵습니다. 특히 JPQL을 실행할 때 N+1 문제가 자주 발생하게 됩니다.&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;b&gt;&lt;span style=&quot;&quot;&gt;3. 컬렉션은 필드에서 초기화할 것&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;컬렉션은 필드에서 바로 초기화해야 NullPointerException으로부터 안전합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Java Web/JPA</category>
      <category>EAGER</category>
      <category>Entity</category>
      <category>jpa</category>
      <category>JPA 연관 관계</category>
      <category>JPA 조인</category>
      <category>lazy</category>
      <category>엔티티</category>
      <category>연관 관계</category>
      <category>즉시로딩</category>
      <category>지연로딩</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/226</guid>
      <comments>https://developer-rooney.tistory.com/226#entry226comment</comments>
      <pubDate>Sun, 6 Mar 2022 21:38:18 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] persistence.xml 작성 예시</title>
      <link>https://developer-rooney.tistory.com/225</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;persistence.xml 설정&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;resources 디렉토리 밑에 META-INF 디렉토리를 생성하고 그 안에 persistence.xml을 만든 다음 아래 내용을 자신의 개발 환경에 맞게 세팅하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646211146426&quot; class=&quot;java&quot; data-ke-language=&quot;java&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 version=&quot;2.2&quot;
             xmlns=&quot;http://xmlns.jcp.org/xml/ns/persistence&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
             xsi:schemaLocation=&quot;http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/&quot;&amp;gt;
    
    &amp;lt;!-- EntityManagerFactory 생성 시 unit name과 일치해야 합니다 --&amp;gt;
    &amp;lt;persistence-unit name=&quot;hello&quot;&amp;gt;
        &amp;lt;properties&amp;gt;
            &amp;lt;!-- 필수 속성 --&amp;gt;
            &amp;lt;!-- DB Driver --&amp;gt;
            &amp;lt;property name=&quot;javax.persistence.jdbc.driver&quot; value=&quot;org.mariadb.jdbc.Driver&quot;/&amp;gt;
            
            &amp;lt;!-- DB user info --&amp;gt;
            &amp;lt;property name=&quot;javax.persistence.jdbc.user&quot; value=&quot;user&quot;/&amp;gt;
            &amp;lt;property name=&quot;javax.persistence.jdbc.password&quot; value=&quot;password&quot;/&amp;gt;
            
            &amp;lt;!-- DB url --&amp;gt;
            &amp;lt;property name=&quot;javax.persistence.jdbc.url&quot; value=&quot;jdbc:mariadb://localhost:3306/schema&quot;/&amp;gt;
            
            &amp;lt;!-- DB Dialect 설정 --&amp;gt;
            &amp;lt;property name=&quot;hibernate.dialect&quot; value=&quot;org.hibernate.dialect.MariaDB103Dialect&quot;/&amp;gt;
            
            &amp;lt;!-- 옵션 --&amp;gt;
            &amp;lt;!-- SQL show --&amp;gt;
            &amp;lt;property name=&quot;hibernate.show_sql&quot; value=&quot;true&quot;/&amp;gt;
            
            &amp;lt;!-- SQL 정렬 --&amp;gt;
            &amp;lt;property name=&quot;hibernate.format_sql&quot; value=&quot;true&quot;/&amp;gt;
            
            &amp;lt;!-- SQL에 관한 주석 처리 --&amp;gt;
            &amp;lt;property name=&quot;hibernate.use_sql_comments&quot; value=&quot;true&quot;/&amp;gt;
            
            &amp;lt;!-- application 실행 시 ddl 전략 --&amp;gt;
            &amp;lt;property name=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;create&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;</description>
      <category>Java Web/JPA</category>
      <category>Entity</category>
      <category>hibernate</category>
      <category>Java Persistence API</category>
      <category>jpa</category>
      <category>JPA 설정</category>
      <category>persistence.xml</category>
      <category>하이버네이트</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/225</guid>
      <comments>https://developer-rooney.tistory.com/225#entry225comment</comments>
      <pubDate>Wed, 2 Mar 2022 17:53:05 +0900</pubDate>
    </item>
    <item>
      <title>[JPA] 연관 관계 편의 메소드</title>
      <link>https://developer-rooney.tistory.com/223</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;연관 관계 편의 메소드를 사용하기 전에&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 부분을 이해하시려면 우선 영속성 컨텍스트(Persistence Context)에 대한 이해가 필요합니다. 관련 글은 다른 블로그에 자세히 설명된 게 있어서 링크로 첨부하니 확인해보세요!&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1646280345057&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;JPA / 영속성 컨텍스트 / 1차 캐시 / 쓰기 지연&quot; data-og-description=&quot;&amp;quot;T아카데미 / JPA 프로그래밍 기본기 다지기 - 김영한 &amp;quot; 강좌를 듣고 정리한 글입니다. 영속성 컨텍스트를 영속성 컨텍스로 관리하면 어떤 이점을 갖을까 1. 1차 캐시 /&amp;nbsp;엔티티 동일성 보장 2. 쓰기 &quot; data-og-host=&quot;www.ecsimsw.com&quot; data-og-source-url=&quot;https://ecsimsw.tistory.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-1%EC%B0%A8-%EC%BA%90%EC%8B%9C-%EC%93%B0%EA%B8%B0-%EC%A7%80%EC%97%B0&quot; data-og-url=&quot;https://www.ecsimsw.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-1%EC%B0%A8-%EC%BA%90%EC%8B%9C-%EC%93%B0%EA%B8%B0-%EC%A7%80%EC%97%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ryAQT/hyNAWvlgHW/MEcF3KhEjbucBbtkTZ5Pr1/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/NFf3z/hyNAUYAfPF/bCqCq51yaWMyNJq8Dwtbh1/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/bfGmix/hyNA2vyaD7/XgxjHDK2DvmY0FnTkCjgVK/img.png?width=1272&amp;amp;height=848&amp;amp;face=0_0_1272_848&quot;&gt;&lt;a href=&quot;https://ecsimsw.tistory.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-1%EC%B0%A8-%EC%BA%90%EC%8B%9C-%EC%93%B0%EA%B8%B0-%EC%A7%80%EC%97%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ecsimsw.tistory.com/entry/JPA-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8-1%EC%B0%A8-%EC%BA%90%EC%8B%9C-%EC%93%B0%EA%B8%B0-%EC%A7%80%EC%97%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ryAQT/hyNAWvlgHW/MEcF3KhEjbucBbtkTZ5Pr1/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/NFf3z/hyNAUYAfPF/bCqCq51yaWMyNJq8Dwtbh1/img.png?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/bfGmix/hyNA2vyaD7/XgxjHDK2DvmY0FnTkCjgVK/img.png?width=1272&amp;amp;height=848&amp;amp;face=0_0_1272_848');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;JPA / 영속성 컨텍스트 / 1차 캐시 / 쓰기 지연&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&quot;T아카데미 / JPA 프로그래밍 기본기 다지기 - 김영한 &quot; 강좌를 듣고 정리한 글입니다. 영속성 컨텍스트를 영속성 컨텍스로 관리하면 어떤 이점을 갖을까 1. 1차 캐시 /&amp;nbsp;엔티티 동일성 보장 2. 쓰기&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ecsimsw.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;연관 관계 편의 메소드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;JPA에서 양방향 연관 관계를 설정했을 때 연관 관계의 주인의 반대쪽 필드는 mappedby를 설정하여 읽기 전용으로 쓰게 됩니다. 그런데 일대다 중 다 쪽에만 연관 관계를 설정하면 객체 지향적이지 않을뿐더러 DB에서 데이터를 조회하기 전까지는 일대다 중 다 쪽에만 값이 세팅되어 일 쪽 Entity에서는 연관 관계를 모르기 때문에 일 쪽의 값을 출력해보면 데이터가 나오지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;예제 코드&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;아래 코드는 teamA를 생성하고 memberA에 teamA를 넣어 연관 관계를 설정하는 코드입니다. 이 코드는 문제가 없어보일 수 있지만 실행하면 마지막 줄은 출력되지 않습니다.&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;font-family: 'Noto Serif KR';&quot;&gt;memberA에는 teamA가 들어갔지만 반대인 teamA는 memberA와의 연관 관계가 설정되지 않았기 때문에 teamA에는 member와 관련된 아무런 값도 설정되지 않았기 때문입니다.&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;font-family: 'Noto Serif KR';&quot;&gt;따라서 teamA가 memberA를 알려면 em.flush() 후 em.clear()를 통해 영속성 컨텍스트를 깨끗하게 비워 DB에서 값을 찾을 수 있도록 해주면 되는데 이보다 객체 지향적이면서, 1차 캐시의 영속성 컨텍스트와 실제 DB 데이터와의 데이터 차이 문제를 해결하기 위해 일대다 양쪽에 데이터를 넣어주는 게 필수적입니다. 아래 예제를 통해 확인해봅시다!&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: #ee2323;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;* 반드시 영속성 컨텍스트에 대한 내용을 숙지하고 보세요!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646007966671&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Team teamA = new Team();
team.setName(&quot;teamA&quot;);
em.persist(teamA);

Member memberA = new Member();
memberA.setName(&quot;memberA&quot;);

// memberA에 연관 관계 설정
memberA.setTeam(teamA);
em.persist(memberA);

System.out.println(&quot;memberA.getTeam : &quot; + memberA.getTeam());
System.out.println(&quot;teamA.getMembers() : &quot; + teamA.getMembers(0));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;teamA에도 연관 관계 설정&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span&gt;teamA.getMember().add(memberA); 한 줄만 추가해주면 됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646008563398&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Team teamA = new Team();
team.setName(&quot;teamA&quot;);
em.persist(teamA);

Member memberA = new Member();
memberA.setName(&quot;memberA&quot;);

// memberA에 연관 관계 설정
memberA.setTeam(teamA);
em.persist(memberA);

// teamA에 연관 관계 설정
teamA.getMembers().add(memberA);

System.out.println(&quot;memberA.getTeam : &quot; + memberA.getTeam());
System.out.println(&quot;teamA.getMembers() : &quot; + teamA.getMembers(0));&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;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Member Entity에 연관 관계 편의 메소드 생성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;위 방법으로 해결할 수 있지만 같은 코드 반복을 방지하기 위해 Member Entity에서 연관 관계 편의 메소드를 생성합니다. 이렇게 연관 관계 편의 메소드를 사용하면 코드 중복을 방지하고 양방향 연관 관계 매핑에서 한쪽에만 연관 관계가 설정되는 것을 방지할 수 있습니다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1646008891301&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Entity
@Getter
public Member {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = &quot;MEMBER_ID&quot;)
    private Long id;
    private String name;
    private Team team;
    
    public changeTeam(Team team) {
        
        // Member에 이미 Team이 설정되어 있을 경우
        if(this.team != null) {
         
            // team에서 해당 Entity를 제거
            this.team.getMembers().remove(this);
        }
        
        // 해당 member Entity에 파라미터로 들어온 team 연관 관계 설정
        this.team = team;
        
        // 파라미터로 들어온 team Entity에 member 연관 관계 설정
        team.getMembers().add(this);
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Java Web/JPA</category>
      <category>@ManyToOne</category>
      <category>@OneToMany</category>
      <category>jpa</category>
      <category>jpa 기초</category>
      <category>양방향 연관 관계</category>
      <category>연관 관계 매핑</category>
      <category>연관 관계 편의 메소드</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/223</guid>
      <comments>https://developer-rooney.tistory.com/223#entry223comment</comments>
      <pubDate>Mon, 28 Feb 2022 09:43:09 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] ResponseEntity</title>
      <link>https://developer-rooney.tistory.com/217</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일반적으로 REST API를 만들게 되면 @RestController를 이용하여 JSON 형식으로 값을 반환하게 됩니다. 일반적으로 데이터를 반환할 때 상태값을 넘겨주는데 이 때 사용하는 게 Spring Framework에서 제공하는 ResponseEntity입니다.&lt;/span&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;515&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I7ibX/btrtqCxrPRK/303vu8F6K11uVnBKjRK2KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I7ibX/btrtqCxrPRK/303vu8F6K11uVnBKjRK2KK/img.png&quot; data-alt=&quot;ResponseEntity는 HttpEntity를 상속받습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I7ibX/btrtqCxrPRK/303vu8F6K11uVnBKjRK2KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI7ibX%2FbtrtqCxrPRK%2F303vu8F6K11uVnBKjRK2KK%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;123&quot; data-origin-width=&quot;515&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ResponseEntity는 HttpEntity를 상속받습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;&quot;&gt;&lt;b&gt;ResponseEntity의 HttpEntity 상속&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;위 이미지처럼 ResponseEntity는 HTTP 요청에 의한 HttpStatus, HttpHeader와 HttpBody를 포함하는 HttpEntity 클래스를 상속받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java Web/Spring</category>
      <category>http 요청</category>
      <category>HttpEntity</category>
      <category>ResponseEntity</category>
      <category>Spring Entity 반환</category>
      <category>Spring Http</category>
      <category>Spring Http 요청</category>
      <category>Spring 상태 정보</category>
      <author>Developer 수한</author>
      <guid isPermaLink="true">https://developer-rooney.tistory.com/217</guid>
      <comments>https://developer-rooney.tistory.com/217#entry217comment</comments>
      <pubDate>Wed, 16 Feb 2022 12:42:11 +0900</pubDate>
    </item>
  </channel>
</rss>