<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Hyunebee</title>
    <link>https://hyunebee97.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 4 Jul 2026 10:27:02 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Hyunebee</managingEditor>
    <item>
      <title>제로베이스 스쿨 9월 이제 마지막 후기..</title>
      <link>https://hyunebee97.tistory.com/172</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;262&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE6Gg2/btrORMydIu7/DLjVZUT2lYYFfSHABlGI60/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE6Gg2/btrORMydIu7/DLjVZUT2lYYFfSHABlGI60/img.jpg&quot; data-alt=&quot;수료했습니다~&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE6Gg2/btrORMydIu7/DLjVZUT2lYYFfSHABlGI60/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE6Gg2%2FbtrORMydIu7%2FDLjVZUT2lYYFfSHABlGI60%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;262&quot; height=&quot;192&quot; data-origin-width=&quot;262&quot; data-origin-height=&quot;192&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;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;350&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPLked/btrNuwkp6TX/D6P1Le3nggzLtNg2ZBv4v1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPLked/btrNuwkp6TX/D6P1Le3nggzLtNg2ZBv4v1/img.gif&quot; data-alt=&quot;끝으으으입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPLked/btrNuwkp6TX/D6P1Le3nggzLtNg2ZBv4v1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/dPLked/btrNuwkp6TX/D6P1Le3nggzLtNg2ZBv4v1/img.gif&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;350&quot; height=&quot;263&quot; data-origin-width=&quot;350&quot; data-origin-height=&quot;263&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;b&gt;팀프로젝트를 끝으로 이제 모든 교육과정이 끝났습니다. 다행이도 무사히 수료를 마치고 글을 작성하고 있습니다.&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;저는 백엔드 조원으로 팀프로젝트에 참여했습니다. 구성의 경우는 프론트 2명 백엔드 3명 + 전임강사님 + 제로베이스 진행 강사님까지 이런식으로 화상회의를 진행하였습니다. 총 5~6주의 기간동안 진행했으며 1주차에는 주제 2주차에는 문서작성 3~6주차에는 개발위주로 진행하였습니다. 이과정에서 주마다 한번씩 전임강사님의 피드백을 받아가면서 수정을 진행하였습니다. 6주란 기간은 생각보다 개발을 하기에 터무니없이 부족한 시간이라고 생각했습니다. 따로 모여서 하는게 아닌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개개인이 진행한 부분을 PR로 병합하고 통일하는과정이 생각보다 많이 걸렸기 때문입니다. 왜 의사소통이 중요한지 알게된 대목같았습니다.&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;277&quot; data-origin-height=&quot;182&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kKF54/btrOP2uyPCQ/Bt85klPNOYqmEbLkTcNbA0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kKF54/btrOP2uyPCQ/Bt85klPNOYqmEbLkTcNbA0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kKF54/btrOP2uyPCQ/Bt85klPNOYqmEbLkTcNbA0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkKF54%2FbtrOP2uyPCQ%2FBt85klPNOYqmEbLkTcNbA0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;277&quot; height=&quot;182&quot; data-origin-width=&quot;277&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;&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 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;토큰을 발급하고 사용하는 법만 알았지만 이렇게 사용할 경우 보안상의 문제가 있겠다는 피드백을 받고 bearer token을 만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들어 프론트에 송신해 일정기간 사용하지 않으면 refresh token을 사용해 다시 발급받을 수 있게 만들었습니다. 이과정을&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진행하고 이해하는데 7~8시간정도를 소요한것 같습니다. 이렇게 직접 코드를 만들다 보니 더욱 기억에 오래남고 다음에&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;&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;700&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yavxl/btrNui7RGGS/OEA78gCssv1hSpyCYQUyLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yavxl/btrNui7RGGS/OEA78gCssv1hSpyCYQUyLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yavxl/btrNui7RGGS/OEA78gCssv1hSpyCYQUyLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYavxl%2FbtrNui7RGGS%2FOEA78gCssv1hSpyCYQUyLk%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;630&quot; height=&quot;335&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;372&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 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;중이라는것을 느끼고 있습니다. 그리고 취업을 할려면 자소서를 쓰고 지원을 해서 면접도 보고 경험을 하는것도&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;
&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;782&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W7lm8/btrNueEJ0pa/jw9tnzeep10yB4VTmdlQm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W7lm8/btrNueEJ0pa/jw9tnzeep10yB4VTmdlQm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W7lm8/btrNueEJ0pa/jw9tnzeep10yB4VTmdlQm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW7lm8%2FbtrNueEJ0pa%2Fjw9tnzeep10yB4VTmdlQm1%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;782&quot; height=&quot;443&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #222222;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;이 글은 데이원컴퍼니로부터 소정의 원고료를 지급받아 작성되었습니다.)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;</description>
      <category>zerebase</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/172</guid>
      <comments>https://hyunebee97.tistory.com/172#entry172comment</comments>
      <pubDate>Fri, 30 Sep 2022 18:10:17 +0900</pubDate>
    </item>
    <item>
      <title>이제 마지막 달 남은 후기 (8월편) - 제로베이스 스쿨</title>
      <link>https://hyunebee97.tistory.com/171</link>
      <description>&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;225&quot; data-origin-height=&quot;225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Tloup/btrK0MRpeOI/S4IFx9Qb0KyH54GtHri6J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Tloup/btrK0MRpeOI/S4IFx9Qb0KyH54GtHri6J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Tloup/btrK0MRpeOI/S4IFx9Qb0KyH54GtHri6J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTloup%2FbtrK0MRpeOI%2FS4IFx9Qb0KyH54GtHri6J1%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;347&quot; height=&quot;347&quot; data-origin-width=&quot;225&quot; data-origin-height=&quot;225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;벌써 8월 아니 9월입니다.&amp;nbsp; 7월에는 집안일과 몸이 아파서 공부를 많이 못한거 같아서 후회스럽습니다. 마지막 까지&lt;/b&gt;&lt;/p&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;&lt;b&gt;다면 한번쯤은 해봐야합니다. 저는 앞으로 프로젝트 해본것을 더다듬어서 취업 전선에 참여할 것 같습니다. 그때 까지&lt;/b&gt;&lt;/p&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-size=&quot;size16&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀프로젝트 시작 전 준비&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqRk14/btrK4UAzspK/uxADndBpWVgXX2Ar0lcY31/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqRk14/btrK4UAzspK/uxADndBpWVgXX2Ar0lcY31/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqRk14/btrK4UAzspK/uxADndBpWVgXX2Ar0lcY31/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqRk14%2FbtrK4UAzspK%2FuxADndBpWVgXX2Ar0lcY31%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;718&quot; height=&quot;404&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;팀프로젝트 시작전 준비운동..? 네카라쿠베 강사님들의 프로젝트들을 먼저 배우고 팀프로젝트에 들어갑니다. 스프링을 사용하기 이전부터 사용한 이후 차이 현업에서는 뭐가 쓰이고 좋다..? 자기 경험을 이야기 해주십니다. 코드를 짜면서 점점 짜임새가 갖춰지고 코드의 재사용성 등등 고도화 작업을 직접 느끼실 수 있습니다. 항상 느끼지만 아는만큼 보이는 것 같습니다. 첫번째 두번째 뒤로 가면서 뭐가 이래서 그렇구나 여기서 이런 이유로 사용하는 구나 등등을 느끼는것 같습니다. 역시 뭐든 직접 쳐보면서 느끼는게 가장 배움이 빠른것 같습니다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;팀프로젝트 시작&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/puVn5/btrK4WZppCB/MqJmHb1CIhfh92QGZHS940/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/puVn5/btrK4WZppCB/MqJmHb1CIhfh92QGZHS940/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/puVn5/btrK4WZppCB/MqJmHb1CIhfh92QGZHS940/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpuVn5%2FbtrK4WZppCB%2FMqJmHb1CIhfh92QGZHS940%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;290&quot; height=&quot;174&quot; data-origin-width=&quot;290&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;제로베이스를 선택한 가장 큰이유중 하나 우수 수강생을 선정해 팀프로젝트를 진행하는 과정이였습니다. 한달? 5주? 정도 기간을 잡고 진행했습니다. 방식은 백엔드 3 프론트 2 이런식으로 진행했습니다. 여기에 전임강사님이 1주일에 한번씩 피드백을 한시간 가량 해주십니다. 항상 느끼는 것이지만 프로젝트를 한번씩 진행하는것이 강의를 10개 듣는것 보다 배우는게 많은것 같습니다.&amp;nbsp; 물론 기초적인 지식이 탄탄하다면 더욱이 진행이 빠르겠지만 모르는것을 직접 찾아보고 팀원들에게 물어보면서 진행하는 방법이 빠르게 성장하는법이라고 저는 생각합니다. 그렇기 때문에 우수 수강생에 들고 싶어서&amp;nbsp; 노력을 했습니다. 팀원들이 잘이끌어주고 알려주셔서 지금 프로젝트를 마무리 하는 시점 많은것을 배우는 것 같습니다. 하면서 기초적인 api 작성 팁이나 그간 개발하면서 생각하지 않았던 restAPI 양식, 보기좋은 코드등등 서로 피드백 하면서 더욱이 발전한것 같습니다. 꼭 신청하신다면 한번 해보시는것을 추천합니다.&amp;nbsp;&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;프로젝트를 진행하면서 더욱이 느끼는 리펙토링&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMT8ln/btrK4FjkKI6/T8oQm5WkkOMOjU3U9Avhr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMT8ln/btrK4FjkKI6/T8oQm5WkkOMOjU3U9Avhr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMT8ln/btrK4FjkKI6/T8oQm5WkkOMOjU3U9Avhr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMT8ln%2FbtrK4FjkKI6%2FT8oQm5WkkOMOjU3U9Avhr0%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;280&quot; height=&quot;180&quot; data-origin-width=&quot;280&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;사진을 보면서 사람이 점점 진화하듯 코드도 저의 코드도 리펙토링을 통해 진화하고 있었습니다. 프로젝트를 진행하면서 한번에 바로 기능을 만든적이 없던것 같습니다. 두번 세번 네번 테스트를 하고 여기서는 이렇게 코드를 짜는게 더 좋겠다. 여기 코드는 뭐로 빼면 좋겠다. 이건 사용 안한다 등등 리펙토링을 참 많이 한것같습니다. 물론 한번에 정확하게 딱딱 만드는건 어렵겠지만 그 횟수가 많아지면 많아질 수 록 지치게 되는 것 같습니다. 하다보면 저런 리펙토링에 대한 기술? 같은건 찾기 어려웠었습니다. 하지만 그런 강의도 제공하고 있더군요!부록으로 주시는거 같습니다.&amp;nbsp; 클린코드 나 리펙토링 같은 강의들은 이론도 많이 섞여있지만 한번쯤은 ? 아니 두번 넘게 들어도 된다고 생각합니다. 이런 부분은 쌓이면 쌓일수록 좋다고 생각합니다. 저는 이론 공부를 재밌어 하는 편이여서 잘듣고 있습니다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gm2D3/btrOgSUw7Gj/W2Boz5uIEkMcvtKdgo5A91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gm2D3/btrOgSUw7Gj/W2Boz5uIEkMcvtKdgo5A91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gm2D3/btrOgSUw7Gj/W2Boz5uIEkMcvtKdgo5A91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGm2D3%2FbtrOgSUw7Gj%2FW2Boz5uIEkMcvtKdgo5A91%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;782&quot; height=&quot;443&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #222222;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;이 글은 데이원컴퍼니로부터 소정의 원고료를 지급받아 작성되었습니다.)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;</description>
      <category>zerebase</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/171</guid>
      <comments>https://hyunebee97.tistory.com/171#entry171comment</comments>
      <pubDate>Wed, 31 Aug 2022 18:37:57 +0900</pubDate>
    </item>
    <item>
      <title>절반 달려온 지금의 느낌 - 제로베이스 스쿨</title>
      <link>https://hyunebee97.tistory.com/170</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;nbsp;Part1 통과 소감&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGjQf6/btrF5NOikIk/YZH7OuG4xWecZCFlMPh0Zk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGjQf6/btrF5NOikIk/YZH7OuG4xWecZCFlMPh0Zk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGjQf6/btrF5NOikIk/YZH7OuG4xWecZCFlMPh0Zk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGjQf6%2FbtrF5NOikIk%2FYZH7OuG4xWecZCFlMPh0Zk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;358&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 수강한지 3개월이 지나가고 있어요.. 현재는 Part1의 과제를 제출하고 작성하는 중입니다. 자바 기초부터 CS지식 데이터베이스 JSP 스프링 등등 많을것을 배웠습니다. 아직 정리가 필요하긴하지만 전체적인 느낌을 알고가는 Part1이라고 생각하고 무사히(?) 끝낸것 같습니다. 주마다 하는 코테는 아직도 적응중이라는게 함정입니다.&amp;nbsp;&lt;/p&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;b&gt;프로젝트와 Part1&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OkAGP/btrOQiEat5t/0PreUsa24LWn4ESZBbRKv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OkAGP/btrOQiEat5t/0PreUsa24LWn4ESZBbRKv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OkAGP/btrOQiEat5t/0PreUsa24LWn4ESZBbRKv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOkAGP%2FbtrOQiEat5t%2F0PreUsa24LWn4ESZBbRKv1%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;315&quot; height=&quot;160&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;이번에 Part1에는 2가지 프로젝트가 있었어요!&amp;nbsp; 하나는 공공API 데이터를 파싱해서 데이터베이스에 넣고 불러오는 JSP와&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;데이터 베이스를 사용했습니다! JSP는 큰 설명이 없어서 처음에는 어렵긴 했지만 과제로 나오니 어찌저찌 처리하게 되더&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;생성 프로젝트인데 이게 생각보다 어렵긴 했지만 강의를 보면서 하면 할만했던것 같습니다. 강의가 긴 분량으로 상세하게&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;설명해준 바탕으로 다시 재구성하는 느낌으로 만들어보았습니다.&amp;nbsp; 벌써 Part1에만 몇개의 프로젝트를 진행한것 같아요&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;size18&quot;&gt;&lt;b&gt;Part1의 전체적인 강의 후기&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;750&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsGxIm/btrGbtUTn9Y/weKykuwyRLUagpcVInsnHK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsGxIm/btrGbtUTn9Y/weKykuwyRLUagpcVInsnHK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsGxIm/btrGbtUTn9Y/weKykuwyRLUagpcVInsnHK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsGxIm%2FbtrGbtUTn9Y%2FweKykuwyRLUagpcVInsnHK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;515&quot; height=&quot;333&quot; data-origin-width=&quot;750&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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;저는 항상 느끼는건데 이론을 배우든 실기를 배우든 ex) 즉 예시가 많은것을 참좋아하는데 일단 강의가 풍부하고 스프링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;같은 경우는 세심한 부분까지 알려주셔서 저는 엄청 만족했습니다. 실무에서 이것을 사용하는 이유와 강사님 경험에서&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;b&gt;단점&lt;/b&gt;&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;에는 이해보다는 단순암기? 쪽에 가까울수도 있겠다. 라고 생각했습니다. 중간에 생략하는 내용은 별로없지만 그에 따라&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;양도 방대하기 때문에 후반에 갈수록 무엇을 병행하면서 하는게 조금 부담스러울수도 있겠다~ 라고 생각했습니다.&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;족하고 제출했습니다. 그래도 만족하지않고 앞으로도 열심히!&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDoDL8/btrGcWoKUFe/Ftc9p66vzGcd5bALKOYsVk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDoDL8/btrGcWoKUFe/Ftc9p66vzGcd5bALKOYsVk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDoDL8/btrGcWoKUFe/Ftc9p66vzGcd5bALKOYsVk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDoDL8%2FbtrGcWoKUFe%2FFtc9p66vzGcd5bALKOYsVk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;236&quot; height=&quot;198&quot; data-origin-width=&quot;236&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&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 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;필요하다면 책을 사서 볼생각입니다. 또 주마다진행하는 알고리즘 테스트도 있으니 매일 2~3문제씩 풀면서 감은 유지해&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;782&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0pOfD/btrOl5Y88V7/CXcwI1hUxrIIiRkCJwrZzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0pOfD/btrOl5Y88V7/CXcwI1hUxrIIiRkCJwrZzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0pOfD/btrOl5Y88V7/CXcwI1hUxrIIiRkCJwrZzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0pOfD%2FbtrOl5Y88V7%2FCXcwI1hUxrIIiRkCJwrZzK%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;782&quot; height=&quot;443&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #222222;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #222222;&quot;&gt;이 글은 데이원컴퍼니로부터 소정의 원고료를 지급받아 작성되었습니다.)&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;</description>
      <category>zerebase</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/170</guid>
      <comments>https://hyunebee97.tistory.com/170#entry170comment</comments>
      <pubDate>Thu, 30 Jun 2022 23:02:31 +0900</pubDate>
    </item>
    <item>
      <title>Lombok</title>
      <link>https://hyunebee97.tistory.com/169</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Lombok :&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;@Setter , @Getter &lt;br /&gt;-Java Bean 규약에 있는 setter, getter를 자동으로 생성해줌&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;@ToString&amp;nbsp; &lt;br /&gt;-Object에 기본 구현된 ToString 대신 객체의 데이터를 보여주는 ToString을 자동 생성&amp;nbsp;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;@NoArgsConstructor&amp;nbsp;&lt;br /&gt;-No Argument Constructor, 파라미터가 없는 생성자를 만든다.&lt;br /&gt;-만약 필드가 final로 설정되어 있는 경우 컴파일러 에러가 발생한다. 필드가 final로 설정되어 있는 경우@NoArgsConstructor(force = true)옵션을 사용하면 final 필드를 0,false,null 등으로 강제 초기화를 하여 생성자를 만들 수 있다.&lt;br /&gt;&lt;br /&gt;@RequiredArgsConstructor&lt;br /&gt;-final 필드 또는 @NonNull이 적용된 필드에 대한 인수가 포함된 생성자를 생성한다.&lt;br /&gt;&lt;br /&gt;@AllArgsConstructor&lt;br /&gt;-모든 필드에 대한 생성자를 생성한다.이 어노테이션으로 생성자를 생성할 때 모든 필드값이 적용되어야 한다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;@Data&amp;nbsp;&lt;br /&gt;-Getter, Setter, ToString, Equals등등 다양한 기능을 모두 제공&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;@Slf4j&amp;nbsp;&lt;br /&gt;-해당 클래스의 logger를 자동으로 생성&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;@Transactional&lt;br /&gt;-선언적 트랜잭션 처리를 지원&lt;br /&gt;-이 방식이 선언적 트랜잭션이고, 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성 되어 자동으로&amp;nbsp;&lt;br /&gt;&amp;nbsp;commit or rollback을 실행한다.&lt;/blockquote&gt;</description>
      <category>zerebase/Spring</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/169</guid>
      <comments>https://hyunebee97.tistory.com/169#entry169comment</comments>
      <pubDate>Thu, 23 Jun 2022 10:39:06 +0900</pubDate>
    </item>
    <item>
      <title>예외처리</title>
      <link>https://hyunebee97.tistory.com/168</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;REST API로 예외 처리하기&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;전역 처리시 @RestControllerAdvice, ControllerAdvice&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;@ExceptionHandler 컨트롤러 기반 예외 처리&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;HTTP Status code를 변경하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;@ResponseStatus&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;ResponseEntity 활용&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. 해당 Exception이 정확히 지정된 Handler&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 해당 Exception의 부모 예외 Handler&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 이도 저도 아니면 그냥 Exception(모든 예외의 부모)&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;@ResponseStatus 사용&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@ResponseStatus(value = HttpStatus.FORBIDDEN)
@ExceptionHandler(IllegalAccessException.class)
public ErrorResponse handleIllegalAccessException(IllegalAccessException e) {
    log.error(&quot;Illegal Exception : &quot;, e);
    return new ErrorResponse(&quot;ACCESS_DENIED&quot;, &quot;Illegal Exception occurred.&quot;);
}
&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;ResponseEntity 사용&lt;/p&gt;
&lt;pre class=&quot;monkey&quot;&gt;&lt;code&gt;@ExceptionHandler(IllegalAccessException.class)
public ResponseEntity&amp;lt;ErrorResponse&amp;gt; handleIllegalAccessException(IllegalAccessException e) {
    log.error(&quot;Illegal Exception : &quot;, e);
    return ResponseEntity
            .status(HttpStatus.FORBIDDEN)
            .header(&quot;header&quot;, &quot;some value&quot;)
            .body(new ErrorResponse(&quot;ACCESS_DENIED&quot;, &quot;Illegal Exception occurred.&quot;));
}
&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;</description>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/168</guid>
      <comments>https://hyunebee97.tistory.com/168#entry168comment</comments>
      <pubDate>Thu, 16 Jun 2022 21:06:20 +0900</pubDate>
    </item>
    <item>
      <title>필터와 인터셉터</title>
      <link>https://hyunebee97.tistory.com/167</link>
      <description>&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;조금더 low level의 처리가 가능하다.&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;실제 매핑된 Handler 확인 가능&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;AOP와 비교한다면 AOP는 인터셉터보다 더 구체적인 조건과 동작을 가진다.&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;637&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dh47tN/btrEXG9TpV1/GEOgHfH2Fo8IUtytTheGW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dh47tN/btrEXG9TpV1/GEOgHfH2Fo8IUtytTheGW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dh47tN/btrEXG9TpV1/GEOgHfH2Fo8IUtytTheGW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh47tN%2FbtrEXG9TpV1%2FGEOgHfH2Fo8IUtytTheGW1%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;637&quot; height=&quot;681&quot; data-origin-width=&quot;637&quot; data-origin-height=&quot;681&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;아래는 @Component를 통해 자동으로 스프링 컨테이너 부착&lt;/p&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@Component
@Slf4j

public class LogFilter implements Filter{
    @Override
    public void doFilter(
            ServletRequest request, ServletResponse response, FilterChain chain //외부 -&amp;gt; filter -&amp;gt; 처리 -&amp;gt; filter -&amp;gt; 외부
    ) throws ServletException, IOException {
        log.info(&quot;Hello filter : &quot; + Thread.currentThread());
        chain.doFilter(request, response);
        log.info(&quot;Bye filter : &quot; + Thread.currentThread());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rQmuT/btrEX01pMUw/ZVnW2KT90RjNiFrAYmV0W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rQmuT/btrEX01pMUw/ZVnW2KT90RjNiFrAYmV0W1/img.png&quot; data-alt=&quot;간단한 get요청에 따른 filter장착&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rQmuT/btrEX01pMUw/ZVnW2KT90RjNiFrAYmV0W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrQmuT%2FbtrEX01pMUw%2FZVnW2KT90RjNiFrAYmV0W1%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;1548&quot; height=&quot;96&quot; data-origin-width=&quot;1548&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;간단한 get요청에 따른 filter장착&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;필터는 자동으로 컨테이너에 부착되지 않음으로 RegistrationBean을 해줘야함&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Configuration
public class WebConfig {
    //필터는 자동으로 컨테어너에 부착되지 않음 등록시켜줘야함
    @Bean
    public FilterRegistrationBean loggingFilter(){
        FilterRegistrationBean&amp;lt;Filter&amp;gt; filterFilterRegistrationBean = new FilterRegistrationBean&amp;lt;&amp;gt;();
        filterFilterRegistrationBean.setFilter(new LogFilter());
        filterFilterRegistrationBean.setOrder(1);
        filterFilterRegistrationBean.addUrlPatterns(&quot;/*&quot;);


        return filterFilterRegistrationBean;
    }
}&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;인터셉터 또한 이 상태로 둔다면 클래스와 다름없음 등록을 해줘야함&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;aspectj&quot;&gt;&lt;code&gt;@Slf4j
public class LogInterceptor implements HandlerInterceptor {
    @Override
    //요청시 try와 같은 느낌
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info(&quot;preHandle Interceptor : &quot; + Thread.currentThread());
        log.info(&quot;preHandle handler : &quot; + handler);
        return true;
    }

    @Override// 요청이 성공하면
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        log.info(&quot;postHandle Interceptor : &quot; + Thread.currentThread());
    }

    @Override// 요청이 성공하든 실패하던
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        log.info(&quot;afterCompletion Interceptor : &quot; + Thread.currentThread());

        if (ex != null) {
            log.error(&quot;afterCompletion exception : &quot; + ex.getMessage());
        }
    }
}&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;해당 @Configuration에 WebMvcConfigurer를 구현 addInterceptors를 추가해줘야 한다.&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot;&gt;&lt;code&gt;@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogInterceptor())
                .order(1).addPathPatterns(&quot;/*&quot;)
                .excludePathPatterns(&quot;/css/*&quot;, &quot;/image/*&quot;);
    }

    //필터는 자동으로 컨테어너에 부착되지 않음 등록시켜줘야함
    @Bean
    public FilterRegistrationBean loggingFilter(){
        FilterRegistrationBean&amp;lt;Filter&amp;gt; filterFilterRegistrationBean = new FilterRegistrationBean&amp;lt;&amp;gt;();
        filterFilterRegistrationBean.setFilter(new LogFilter());
        filterFilterRegistrationBean.setOrder(1);
        filterFilterRegistrationBean.addUrlPatterns(&quot;/*&quot;);



        return filterFilterRegistrationBean;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4er2z/btrEZEXplTr/BPgGM3RzzQH9xKFA05i4kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4er2z/btrEZEXplTr/BPgGM3RzzQH9xKFA05i4kK/img.png&quot; data-alt=&quot;해당 로그들을 보면 filer -&amp;amp;gt; 인터셉터 -&amp;amp;gt; 처리 -&amp;amp;gt; 인터셉터 -&amp;amp;gt; filter순인것을 확인가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4er2z/btrEZEXplTr/BPgGM3RzzQH9xKFA05i4kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4er2z%2FbtrEZEXplTr%2FBPgGM3RzzQH9xKFA05i4kK%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;753&quot; height=&quot;199&quot; data-origin-width=&quot;753&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 로그들을 보면 filer -&amp;gt; 인터셉터 -&amp;gt; 처리 -&amp;gt; 인터셉터 -&amp;gt; filter순인것을 확인가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>zerebase/Spring</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/167</guid>
      <comments>https://hyunebee97.tistory.com/167#entry167comment</comments>
      <pubDate>Thu, 16 Jun 2022 20:14:46 +0900</pubDate>
    </item>
    <item>
      <title>스프링 MVC의 기본 HTTP요청 매핑</title>
      <link>https://hyunebee97.tistory.com/166</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Controller와 restController의 차이&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;Controller : 응답값이 기본적으로 HTML을 주도록 되어 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RestController : 응답값으로 Rest API 요청에 대한 응답(주로 JSON)을 주도록 되어 있음&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;gt; 스프링4.3 부터&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;@GetMapping : 데이터를 가져옴&lt;/li&gt;
&lt;li&gt;@PostMapping : 데이터를 전송함&lt;/li&gt;
&lt;li&gt;@PutMapping : 전체 수정&lt;/li&gt;
&lt;li&gt;@PatchMapping : 일부 수정&lt;/li&gt;
&lt;li&gt;@DeleteMapping : 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스프링 HTTP 요청 파라미터 전송&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;파라미터를 넘기는 법(Get, Delete)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1. PathVariable : id를 path에 넣는것을 선호&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;@PathVariable(&amp;rdquo;id&amp;rdquo;) String identity;&lt;/li&gt;
&lt;li&gt;하지만 이름이 같으면 생략 가능&lt;/li&gt;
&lt;li&gt;여러개를 넣을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rZLsl/btrEX1k4yxC/TIjdjkU6RPaaKxo9aTrsh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rZLsl/btrEX1k4yxC/TIjdjkU6RPaaKxo9aTrsh1/img.png&quot; data-alt=&quot;(&amp;quot; &amp;quot;)안의 내용과 String ?? 이름이 같으면 생략가능하다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rZLsl/btrEX1k4yxC/TIjdjkU6RPaaKxo9aTrsh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrZLsl%2FbtrEX1k4yxC%2FTIjdjkU6RPaaKxo9aTrsh1%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;747&quot; height=&quot;140&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(&quot; &quot;)안의 내용과 String ?? 이름이 같으면 생략가능하다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2.query-params : 추가적인 정보들 입력 요청시 /order/orderId=?&amp;amp;orderAmount&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;게시판의 검색 필터 페이징에서 많이 사용&lt;/li&gt;
&lt;li&gt;@RequestParam 사용법&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PathVariable처럼 이름을 동일하게 하면 자동으로 받아줌
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Map, MultiValueMap으로 요청 받는 방법 -&amp;gt; 하나의 키에 여러값이 있을 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baDb2m/btrEYh2fsCD/g7fXZesLSwX0KNIEuyQfM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baDb2m/btrEYh2fsCD/g7fXZesLSwX0KNIEuyQfM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baDb2m/btrEYh2fsCD/g7fXZesLSwX0KNIEuyQfM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaDb2m%2FbtrEYh2fsCD%2Fg7fXZesLSwX0KNIEuyQfM1%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;715&quot; height=&quot;165&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;165&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;파라미터를 넘기는 법(Post, Put, Patch )&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;@RequestBody : http body 정보를 편리하게 받을 수 있음 주로 사용하는 메시지 포맷은 JSON(현재 사실상의 표준) @RequestHeader : http header 정보를 편리하게 받을 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKg54i/btrEYgWAYhj/tz4lbDvNvy102OIvbblAC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKg54i/btrEYgWAYhj/tz4lbDvNvy102OIvbblAC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKg54i/btrEYgWAYhj/tz4lbDvNvy102OIvbblAC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKg54i%2FbtrEYgWAYhj%2Ftz4lbDvNvy102OIvbblAC0%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;763&quot; height=&quot;209&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;209&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;</description>
      <category>zerebase/Spring</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/166</guid>
      <comments>https://hyunebee97.tistory.com/166#entry166comment</comments>
      <pubDate>Thu, 16 Jun 2022 19:11:14 +0900</pubDate>
    </item>
    <item>
      <title>Valudation, Data Binding, SpEL</title>
      <link>https://hyunebee97.tistory.com/165</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Validation - 유효성 검증&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;주로 사용자 or 타 서버의 요청에 대해 잘못된 내용이 있는지 확인하는 행위&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;Validation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2. 비지니스 검증&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;서비스에 정책에 따라 데이터를 확인하여 검증&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;b&gt;Spring Validation&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;스프링은 웹 레이어에 종속적이 지 않고 2가지 방법으로 진행 -&amp;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;1.Java Bean Validation&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; JavaBean 기반으로 간편하게 개별 데이터 검증 어노테이션으로 검증 방법을 명시해줌&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JuRVa/btrEU3co6m6/CfN3KlSwQy07CkWXl1seJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JuRVa/btrEU3co6m6/CfN3KlSwQy07CkWXl1seJ0/img.png&quot; data-alt=&quot;위 사진 처럼 dto에 어노테이션에 명시후&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JuRVa/btrEU3co6m6/CfN3KlSwQy07CkWXl1seJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJuRVa%2FbtrEU3co6m6%2FCfN3KlSwQy07CkWXl1seJ0%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;535&quot; height=&quot;245&quot; data-origin-width=&quot;535&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 사진 처럼 dto에 어노테이션에 명시후&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRaYOV/btrESDzeiAf/KCwAjw7NqlkVkA6IXtOvoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRaYOV/btrESDzeiAf/KCwAjw7NqlkVkA6IXtOvoK/img.png&quot; data-alt=&quot;아래 사진처럼 @Valid를 RequestBody에 달아 검증을하고 이상이 없을시 메서드 내부를 실행한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRaYOV/btrESDzeiAf/KCwAjw7NqlkVkA6IXtOvoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRaYOV%2FbtrESDzeiAf%2FKCwAjw7NqlkVkA6IXtOvoK%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;764&quot; height=&quot;138&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;아래 사진처럼 @Valid를 RequestBody에 달아 검증을하고 이상이 없을시 메서드 내부를 실행한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 2.Spring validator 인터페이스 구현을 통한 validation&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;643&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUs4AK/btrEU3i9rlM/d1HwVenjPCBJvgWtgWHDs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUs4AK/btrEU3i9rlM/d1HwVenjPCBJvgWtgWHDs0/img.png&quot; data-alt=&quot;support는 Validator가 동작할 조건을 정의해준다. 주로 class의 타입을 비교한다. validate()에서 원하는 검증을 진행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUs4AK/btrEU3i9rlM/d1HwVenjPCBJvgWtgWHDs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUs4AK%2FbtrEU3i9rlM%2Fd1HwVenjPCBJvgWtgWHDs0%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;643&quot; height=&quot;407&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;support는 Validator가 동작할 조건을 정의해준다. 주로 class의 타입을 비교한다. validate()에서 원하는 검증을 진행&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;Data Binding&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자나 외부 서버의 요청 데이터를 특정 도메인 객체에 저장해서 우리 프로그램에 Request에 담아주는 것을 뜻한다.&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.Converter&amp;lt;S,T&amp;gt; Interface&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;S(Source)라는 타입을 받아서 T(Target)이라는 타입으로 변환해주는 Interface&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;143&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxCn9C/btrEUh9QBz6/rDmm84M3MkRPcT14EGvAo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxCn9C/btrEUh9QBz6/rDmm84M3MkRPcT14EGvAo0/img.png&quot; data-alt=&quot;내부 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxCn9C/btrEUh9QBz6/rDmm84M3MkRPcT14EGvAo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxCn9C%2FbtrEUh9QBz6%2FrDmm84M3MkRPcT14EGvAo0%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;526&quot; height=&quot;143&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;143&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;내부 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4ueLu/btrEWo1vKuI/odbf5pXJ2I6d0duJutxI4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4ueLu/btrEWo1vKuI/odbf5pXJ2I6d0duJutxI4k/img.png&quot; data-alt=&quot;x-auth-user는 Json 형식의 문자열 @RequestHeader를 살펴보면 x-auth-user의 헤더를 XauthUser객체로 받을려고함 이때 아래 사진의 converter를 사용하게 됨&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4ueLu/btrEWo1vKuI/odbf5pXJ2I6d0duJutxI4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4ueLu%2FbtrEWo1vKuI%2Fodbf5pXJ2I6d0duJutxI4k%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;686&quot; height=&quot;380&quot; data-origin-width=&quot;686&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;x-auth-user는 Json 형식의 문자열 @RequestHeader를 살펴보면 x-auth-user의 헤더를 XauthUser객체로 받을려고함 이때 아래 사진의 converter를 사용하게 됨&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WWSXn/btrEU3jcoV0/vs6Xd6VHcS1Gt4OdBFefZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WWSXn/btrEU3jcoV0/vs6Xd6VHcS1Gt4OdBFefZK/img.png&quot; data-alt=&quot;해당 컨버터는 Spring bean에 등록 -&amp;amp;gt; 스프링 내에 ConversionService라는 내장된 서비스에서 Converter 구현체 Bean들을
Converter 리스트에 등록-&amp;amp;gt; 이때 &amp;amp;lt;S,T&amp;amp;gt;가 일치하게 되면 해당 Convert가 동작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WWSXn/btrEU3jcoV0/vs6Xd6VHcS1Gt4OdBFefZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWWSXn%2FbtrEU3jcoV0%2Fvs6Xd6VHcS1Gt4OdBFefZK%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;705&quot; height=&quot;184&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 컨버터는 Spring bean에 등록 -&amp;gt; 스프링 내에 ConversionService라는 내장된 서비스에서 Converter 구현체 Bean들을
Converter 리스트에 등록-&amp;gt; 이때 &amp;lt;S,T&amp;gt;가 일치하게 되면 해당 Convert가 동작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2.Formatter&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 특정 객체 &amp;harr; String간의 변환을 담당&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;779&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1F6pF/btrEVYIMJvJ/g6CfMibvilIxBlZkhfum5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1F6pF/btrEVYIMJvJ/g6CfMibvilIxBlZkhfum5k/img.png&quot; data-alt=&quot;print : API 요청에 대한 응답을 줄 때, Date형식으로 된 데이터를 특정 locale에 맞춘
String으로 변환
parse : API 요청을 받아올 때, String으로 된 &amp;quot;2021-01-01 13:15:00&amp;quot; 같은 날짜 형식의 데
이터를 Date로 변환하도록 함&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1F6pF/btrEVYIMJvJ/g6CfMibvilIxBlZkhfum5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1F6pF%2FbtrEVYIMJvJ%2Fg6CfMibvilIxBlZkhfum5k%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;779&quot; height=&quot;299&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;print : API 요청에 대한 응답을 줄 때, Date형식으로 된 데이터를 특정 locale에 맞춘
String으로 변환
parse : API 요청을 받아올 때, String으로 된 &quot;2021-01-01 13:15:00&quot; 같은 날짜 형식의 데
이터를 Date로 변환하도록 함&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;SpEL(스프링표현언어)&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; @Value(&quot;${config.value}&quot;)와 같은 방식으로 설정값을 주입 받는데 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이떄 &quot;&quot;안에 들어있는 문자열을 평가해서 결과값을 만들어 낸다. 리터럴과 메서드도 같이 호출할 수 있다.&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;784&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJw7Ai/btrEWp7fUIG/2TGCtKxgmbRXHQMdVEFqO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJw7Ai/btrEWp7fUIG/2TGCtKxgmbRXHQMdVEFqO0/img.png&quot; data-alt=&quot;예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJw7Ai/btrEWp7fUIG/2TGCtKxgmbRXHQMdVEFqO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJw7Ai%2FbtrEWp7fUIG%2F2TGCtKxgmbRXHQMdVEFqO0%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;784&quot; height=&quot;322&quot; data-origin-width=&quot;784&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>zerebase/Spring</category>
      <category>B</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/165</guid>
      <comments>https://hyunebee97.tistory.com/165#entry165comment</comments>
      <pubDate>Thu, 16 Jun 2022 13:12:09 +0900</pubDate>
    </item>
    <item>
      <title>OOP와 스프링</title>
      <link>https://hyunebee97.tistory.com/164</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;OOP를 왜 사용할까?&lt;/b&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;b&gt;OOP란?&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;데이터(상태)와 로직(행위)이 응집되어 상호 교류하여 동작하도록 만드는 기법(ex) 상속, 캡슐화, 다형성)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1. 분류&amp;nbsp; &amp;gt; Class&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;Class는 프로그램의 코드를 체계적으로 분류하고 같은 역할을 하는 코드를 응집성 있게 모아준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;2. 교체 &amp;gt; 유지보수&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &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;OOP를 잘하려면?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;SOLID 원칙을 준수!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; 1. SRP - 단일 책임 원칙 : 한 클래스는 단일의 책임을 가져야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 단일? 책임? 둘다 모호함&amp;nbsp;&amp;nbsp;&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;&lt;b&gt;&amp;nbsp; 2. OCP - 개방 폐쇄의 원칙 : 확장에는 열려있고, 변경에는 닫혀있다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 수정하지 말고 신규 클래스를 추가하자!&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;&lt;b&gt;&amp;nbsp; 3. LSP - 리스코프 치환 법칙 : 서브 타입은 언제나 기반타입으로 교체할 수 있어야 한다.&amp;nbsp;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 상속받는 클래스는 부모 클래스와 동일한 동작을 해야 재활용 가능성이 높아진다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &lt;i&gt;실무에서는 상속을 잘 사용하지 않음&amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; 1. 상속 시 오버라이드를 한것과 아닌것의 혼란&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp; 2. 상속 오버라이드를 잘못하면 로직충돌 -&amp;gt; Fragile base class&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;3. 기능을 너무 확장하거나 변경하면 재활용성 낮아짐&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Fragile base class&amp;nbsp;&lt;br /&gt;부모 클래스의 변경에 의해 자식 클래스가 영향을 받는 현상&lt;br /&gt;&amp;nbsp;자식 클래스를 점진적으로 추가해서 기능을 확장하는 데는 용이하지만 높은 결합도로 인해 부모 클래스를 점진적&amp;nbsp; &amp;nbsp;으로 개선하는 것은 어렵게 만든다.&lt;br /&gt;&amp;nbsp;자식 클래스가 부모 클래스의 구현 세부사항에 의존하도록 만들기 때문에 캡슐화를 약화 시킨다.&lt;br /&gt;&lt;br /&gt;또 다른 상속의 문제점&amp;nbsp;&lt;br /&gt;&lt;a title=&quot;상속과 코드 재사용&quot; href=&quot;https://velog.io/@swucs/10%EC%9E%A5-%EC%83%81%EC%86%8D%EA%B3%BC-%EC%BD%94%EB%93%9C-%EC%9E%AC%EC%82%AC%EC%9A%A9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@swucs/10%EC%9E%A5-%EC%83%81%EC%86%8D%EA%B3%BC-%EC%BD%94%EB%93%9C-%EC%9E%AC%EC%82%AC%EC%9A%A9&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&amp;nbsp; &amp;nbsp;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; 4. ISP - 인터페이스 분리 원칙 : 인터페이스 또한 단일 책임을 갖도록 분리해야 한다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; 5. DIP - 의존성 역전 원칙 : 하위 모듈의 변경이 상위 모들의 변경을 요구하는 의존성을 끊어 내야 한다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; 기존 라이브러리 사용 -&amp;gt; 다른 라이브 러리로 변경시 강결합이라면 코드 전체를 수정해야할 수 도 있음&amp;nbsp;&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;&lt;b&gt;&amp;nbsp;스프링과 SOLID&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;842&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzmhCz/btrEsihi2oa/Jkve5kq5tFphb2NdmIkyik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzmhCz/btrEsihi2oa/Jkve5kq5tFphb2NdmIkyik/img.png&quot; data-alt=&quot;https://www.javaguides.net/2020/07/three-tier-three-layer-architecture-in-spring-mvc-web-application.html&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzmhCz/btrEsihi2oa/Jkve5kq5tFphb2NdmIkyik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzmhCz%2FbtrEsihi2oa%2FJkve5kq5tFphb2NdmIkyik%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;632&quot; height=&quot;354&quot; data-origin-width=&quot;842&quot; data-origin-height=&quot;472&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://www.javaguides.net/2020/07/three-tier-three-layer-architecture-in-spring-mvc-web-application.html&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&lt;b&gt;Presentation layer:&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&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;p data-ke-size=&quot;size16&quot;&gt;2.&lt;b&gt;Business logic (or Application) layer:&lt;/b&gt;&lt;span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&quot;&gt;이 계층에는 애플리케이션의 핵심 기능을 주도하는 비즈니스 로직이 포함되어 있습니다. 의사 결정, 계산, 평가 및 다른 두 계층 간에 전달되는 데이터 처리와 같습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&lt;b&gt;Data access layer (or Data) layer:&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt; &lt;span style=&quot;background-color: #fdfdfd; color: #000000;&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&amp;nbsp;스프링은 표준적인 레이어 별 역할을 나눠주기 때문에 SRP를 도와줌 각 Class마다 역할이 더 명확해짐 &lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>zerebase/Spring</category>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/164</guid>
      <comments>https://hyunebee97.tistory.com/164#entry164comment</comments>
      <pubDate>Fri, 10 Jun 2022 16:27:27 +0900</pubDate>
    </item>
    <item>
      <title>Git 사용법</title>
      <link>https://hyunebee97.tistory.com/163</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Git 사용자 설정&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;git config : Git에 관한 설정을 추가/삭제/변경하는 명령어&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. System 설정 파일 : 모든 시스템 사용자에게 적용&lt;br /&gt;2. Global 설정 파일 : 한 사용자의 전체 Git Repository에 적용&lt;br /&gt;3. Local 설정 파일 : 하나의 레포지토리에 적용&lt;br /&gt;&lt;br /&gt;git config -- ~로 사용&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh key - github연동&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. ssh-keygen 명령어 사용&lt;br /&gt;2. 이름설정&lt;br /&gt;3. 비밀번호 설정&lt;br /&gt;4. cat으로 내용확인후 key에 복붙하기&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8yQ28/btrDWFq6rpX/Dk2irgxU2L8uQMk6S4I3Ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8yQ28/btrDWFq6rpX/Dk2irgxU2L8uQMk6S4I3Ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8yQ28/btrDWFq6rpX/Dk2irgxU2L8uQMk6S4I3Ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8yQ28%2FbtrDWFq6rpX%2FDk2irgxU2L8uQMk6S4I3Ik%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;1054&quot; height=&quot;477&quot; data-origin-width=&quot;1054&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git 초기화&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;git init -&amp;gt; 해당 폴더 자체가 Local Repository가 된다고 생각하면됨&amp;nbsp;&lt;br /&gt;&lt;br /&gt;명령을 실행하면 .git/ 폴더 생성&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brXjK7/btrDZuBWGdn/S0i3RkKwkFjOgsCCT3amt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brXjK7/btrDZuBWGdn/S0i3RkKwkFjOgsCCT3amt0/img.png&quot; data-alt=&quot;config등 다양한 설정파일이 들어있음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brXjK7/btrDZuBWGdn/S0i3RkKwkFjOgsCCT3amt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrXjK7%2FbtrDZuBWGdn%2FS0i3RkKwkFjOgsCCT3amt0%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;431&quot; height=&quot;100&quot; data-origin-width=&quot;431&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;config등 다양한 설정파일이 들어있음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;사용자가 git에 등록되지 않길 원하는 파일 또는 폴더들의 목록을 저장&lt;br /&gt;.gitignore에 등록된 파일들은 커밋 시 자동으로 제외됨&lt;br /&gt;&lt;br /&gt;- 폴더 : /폴더명 (예: /docs)&lt;br /&gt;- 파일 : 파일명.확장자 (예: test.txt) &lt;br /&gt;- 폴더 안 파일 : /폴더명/파일명.확장자 (예: /docs/test.txt) &lt;br /&gt;- 폴더 안 특정 확장자 파일 전부 (예: /docs/*.text)&lt;br /&gt;- 폴더 하위 모든 특정 확장자 파일 전부 (예: /docs/**/*.txt)&lt;br /&gt;&lt;br /&gt;https://www.toptal.com/developers/gitignore/&amp;nbsp; &amp;nbsp; &amp;nbsp;gitignore생성 사이트&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git 기본 공간 구조&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Working Directory : 작업하는 파일이 있는 폴더&lt;br /&gt;Staging area : Git에 등록할 파일들이 올라가는 영역(깃에 등록하기전에 임시거처(?))&lt;br /&gt;Local Repository : 로컬 Git 프로젝트의 메타데이터와 데이터 정보가 저장되는 영역&lt;br /&gt;Remote Repositroy : 온라인 상의 저장소&amp;nbsp;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PQiS6/btrDWDz7jbW/cjhoNQsxN3WYWOghuauLJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PQiS6/btrDWDz7jbW/cjhoNQsxN3WYWOghuauLJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PQiS6/btrDWDz7jbW/cjhoNQsxN3WYWOghuauLJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPQiS6%2FbtrDWDz7jbW%2FcjhoNQsxN3WYWOghuauLJk%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;912&quot; height=&quot;591&quot; data-origin-width=&quot;912&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git 기본용어&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;origin : 원격 (Github 등의 온라인 저장소)에 있는 코드 &lt;br /&gt;head : 내가 지금 작업하고 있는 로컬 브랜치 &lt;br /&gt;add : Working Directory에서 Staging Area로 등록하다 &lt;br /&gt;commit : Staging Area에 등록된 파일을 Local Storage로 등록&lt;br /&gt;Commit Message : commit 시 함께 작성해 저장하는 메시지 (메모) &lt;br /&gt;push : Local Storage에서 변경된 파일들을 Remote Repository로 등록 &lt;br /&gt;fetch : Remote Repository의 변경된 파일들을 Local Repository로 전달 &lt;br /&gt;merge : Local Repository의 변경사항을 Working Directory로 전달 &lt;br /&gt;Branch : 독립적으로 어떤 작업을 따로 진행하기위한 가지 &lt;br /&gt;checkout : 사용할 다른 브랜치를 지정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Clone&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Git Remote Repository에 있는 내용을 복사해 나의 PC로 저장&lt;br /&gt;1.HTTPS를 사용 -&amp;gt; 보안에 취약&lt;br /&gt;2.SSH -&amp;gt; 권장하는 편이다.&amp;nbsp;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;271&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dGo2Jo/btrDWiXccQK/JRqKCemyfjeAooDyt883R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dGo2Jo/btrDWiXccQK/JRqKCemyfjeAooDyt883R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dGo2Jo/btrDWiXccQK/JRqKCemyfjeAooDyt883R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdGo2Jo%2FbtrDWiXccQK%2FJRqKCemyfjeAooDyt883R0%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;271&quot; data-origin-width=&quot;484&quot; data-origin-height=&quot;271&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ADD, COMMIT, PULL, PUSH&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;ADD : 변경된 파일 중 Repositroy에 올림&amp;nbsp;&lt;br /&gt;Commit Add:&amp;nbsp; 등록된 파일들을 한 덩어리로 만들고 메시지를 추가해 로컬저장소에 올려줌&lt;br /&gt;Push : 원격저장소에서도 반영을 해줌&lt;br /&gt;Pull : 원격 저장소의 변경사랑을 로컬 저장소로 가져옴으로 동시에 작업소스와 합쳐줌&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Fork 복제&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;다른 사람의 원격 저장소에서 어떤 부분을 수정하거나 추가 기능을 넣고 싶을때 해당 원격 저장소를 내 원격 저장소에 그대로 복제하는것&amp;nbsp;&lt;br /&gt;Clone과는 내 로컬에 저장 원격에 저장 이런 부분이 다름&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pull Request&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;다른 사람에게 내 브랜치를 Merge해 달라고 하는 요청&lt;/blockquote&gt;</description>
      <author>Hyunebee</author>
      <guid isPermaLink="true">https://hyunebee97.tistory.com/163</guid>
      <comments>https://hyunebee97.tistory.com/163#entry163comment</comments>
      <pubDate>Mon, 6 Jun 2022 09:28:33 +0900</pubDate>
    </item>
  </channel>
</rss>