<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>풀스택은 존재하지 않는다.</title>
    <link>https://iwannafullstack.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 01:58:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>풀스택개발자</managingEditor>
    <image>
      <title>풀스택은 존재하지 않는다.</title>
      <url>https://tistory1.daumcdn.net/tistory/5044750/attach/470a4b74308449f3bab1b43860f52faf</url>
      <link>https://iwannafullstack.tistory.com</link>
    </image>
    <item>
      <title>TDD 란?</title>
      <link>https://iwannafullstack.tistory.com/entry/TDD-%EB%9E%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;TDD란 Test Driven Development의 약자로 '테스트 주도 개발'이라고 한다.&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;스크린샷 2021-11-23 오후 2.08.39.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mnKTb/btrlXDJNCvE/ZnVD1STaF20mQ4upCqGxzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mnKTb/btrlXDJNCvE/ZnVD1STaF20mQ4upCqGxzk/img.png&quot; data-alt=&quot;출처 : 패스트캠퍼스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mnKTb/btrlXDJNCvE/ZnVD1STaF20mQ4upCqGxzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmnKTb%2FbtrlXDJNCvE%2FZnVD1STaF20mQ4upCqGxzk%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;273&quot; height=&quot;273&quot; data-filename=&quot;스크린샷 2021-11-23 오후 2.08.39.png&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 패스트캠퍼스&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;TDD 개발 주기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Red &lt;span style=&quot;color: #000000;&quot;&gt;: &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;단계에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;실패하는 테스트 코드&lt;/u&gt;를 먼저 작성한다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Green &lt;span style=&quot;color: #000000;&quot;&gt;: &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;단계에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;테스트 코드를 성공시키기 위한 실제 코드&lt;/u&gt;를 작성한다.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;Yellow &lt;span style=&quot;color: #000000;&quot;&gt;:&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;단계에서는 중복 코드 제거, 일반화 등의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;리팩토링을 수행&lt;/u&gt;한다&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;TDD 예시&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 코드를 보는 것이 가장 이해가 빠를 것이다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;for (String a : list) {
    this.create(a),
    this.read(a),
    this.update(a),
    this.delete(a)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 위 처럼 하나의 for 문에 여러 메서드가 삽입 되어 있는 경우 for문을 동작시켜 테스트를 할 수 있지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 메서드가 묶여 있어 디버깅 과정이 까다로울 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문 안에, System.out.println()을 사용하여 테스트 하거나 디버깅 모드 사용하여 디버깅을 하는 것이 대부분일 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, for문 안에 각각의 메서드 마다의 기능 단위가 커지면 커질 수록 디버깅이 어려워 질 것이다.&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;TDD 예시 코드 적용&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드 뭉치에 TDD를 적용 시켜보자.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Test
public void create테스트(){
	String a = a;
	this.create(a);
}

@Test
public void read테스트(){
	String a = a;
	this.read(a);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위처럼 &lt;b&gt;기능 단위로&lt;/b&gt;&amp;nbsp;각각의 메서드를 바로바로 실행 시켜 볼 수 있다. 한 기능을 만들때 들어가는 메서드들을 각각 위와 같이 테스트 하며 개발하는 것을 TDD라고 한다.&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;TDD 적용 방법&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;size18&quot;&gt;&lt;b&gt;TDD 장 단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;장점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능 단위의 빠른 피드백을 받을 수 있다.&lt;/li&gt;
&lt;li&gt;작성한 코드가 가지는 불안정성을 개선 할 수 있다.&lt;/li&gt;
&lt;li&gt;보다 튼튼한 객체 지향적인 코드 생산이 가능하다.&lt;/li&gt;
&lt;li&gt;재설계 시간이 단축된다.&lt;/li&gt;
&lt;li&gt;사전의 많은 버그를 발견할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;단점
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생산성의 저하(개발 속도 저하)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;TDD는 필수?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-23 오후 3.32.39.png&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;316&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eeTiWB/btrlS1yFlek/MDYrmNKtHX91l9MyWr79yK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eeTiWB/btrlS1yFlek/MDYrmNKtHX91l9MyWr79yK/img.png&quot; data-alt=&quot;출처 : 패스트캠퍼스&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eeTiWB/btrlS1yFlek/MDYrmNKtHX91l9MyWr79yK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeeTiWB%2FbtrlS1yFlek%2FMDYrmNKtHX91l9MyWr79yK%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;608&quot; height=&quot;316&quot; data-filename=&quot;스크린샷 2021-11-23 오후 3.32.39.png&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;316&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;TDD를 꾸준히 적용한다면, 시간 대비 비용이 더 커지지 않고 일정하게 유지된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기 비용은 더 많이 들 수 있으나 전체적으로 봤을때 비용이 점진적으로 늘어나지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TDD를 사용하는 편이 장기적으로는 효과적이라고 할 수 있다.&lt;/p&gt;</description>
      <category>개발 방법론/TDD</category>
      <category>java</category>
      <category>TDD</category>
      <category>Test driven development</category>
      <category>개발 방법론</category>
      <category>단위 테스트</category>
      <category>메서드</category>
      <category>방법론</category>
      <category>애자일</category>
      <category>테스트</category>
      <category>테스트 주도 개발</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/10</guid>
      <comments>https://iwannafullstack.tistory.com/entry/TDD-%EB%9E%80#entry10comment</comments>
      <pubDate>Tue, 23 Nov 2021 15:35:09 +0900</pubDate>
    </item>
    <item>
      <title>org.springframework.dao.DataIntegrityViolationException:</title>
      <link>https://iwannafullstack.tistory.com/entry/orgspringframeworkdaoDataIntegrityViolationException</link>
      <description>&lt;pre id=&quot;code_1637557151877&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: 
Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B&quot;H\xB2\x0C\x00\x00xpw\x15\x06\x00\x00\x07\xE5\x0B\x16\x044.\x0E\x0E\x11x' for column 'CREA_DT' at row 1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert하려는 Date 타입과 DB에 선언 되어 있는 Date 타입이 달라 충돌 나는 에러입니다.&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;해결 방법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Insert 하려는 Date 타입과 DB Date 컬럼의 Type을 맞춰 주어야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB마다 호환되는 Date 타입이 다르니 사용하는 DB의 Date 호환 타입을 찾아 맞춰 주어야합니다.&lt;/p&gt;</description>
      <category>BackEnd/Debug</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/9</guid>
      <comments>https://iwannafullstack.tistory.com/entry/orgspringframeworkdaoDataIntegrityViolationException#entry9comment</comments>
      <pubDate>Mon, 22 Nov 2021 14:02:13 +0900</pubDate>
    </item>
    <item>
      <title>React 기초 공부하기(1)</title>
      <link>https://iwannafullstack.tistory.com/entry/React-%EA%B8%B0%EC%B4%88-%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B01</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;공부하기 앞서 React가 어떤 프레임워크인지 모르는 분들은 참고하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://iwannafullstack.tistory.com/6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://iwannafullstack.tistory.com/6&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637406926425&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;React란?&quot; data-og-description=&quot;리액트(React, React.js, ReactJS)는 자바스크립트 라이브러리의 하나로서 페이스북의 소프트웨어 엔지니어 Jordan Walke가 개발하였다. PHP용 HTML 컴포넌트 프레임워크인 XHP에 영향을 받았다. 2011년 페이&quot; data-og-host=&quot;iwannafullstack.tistory.com&quot; data-og-source-url=&quot;https://iwannafullstack.tistory.com/6&quot; data-og-url=&quot;https://iwannafullstack.tistory.com/6&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jTj0N/hyMqYGGlxN/hXzJ5dz9R7OVK1mk7K9bgk/img.png?width=800&amp;amp;height=360&amp;amp;face=0_0_800_360,https://scrap.kakaocdn.net/dn/dhJeqU/hyMqSNes32/UZ798C9CxrDMCegRKNaRT1/img.png?width=800&amp;amp;height=360&amp;amp;face=0_0_800_360,https://scrap.kakaocdn.net/dn/fuVah/hyMo7L1rHo/MudRN5z4CZIZfcWDskL64K/img.png?width=1150&amp;amp;height=518&amp;amp;face=0_0_1150_518&quot;&gt;&lt;a href=&quot;https://iwannafullstack.tistory.com/6&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://iwannafullstack.tistory.com/6&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jTj0N/hyMqYGGlxN/hXzJ5dz9R7OVK1mk7K9bgk/img.png?width=800&amp;amp;height=360&amp;amp;face=0_0_800_360,https://scrap.kakaocdn.net/dn/dhJeqU/hyMqSNes32/UZ798C9CxrDMCegRKNaRT1/img.png?width=800&amp;amp;height=360&amp;amp;face=0_0_800_360,https://scrap.kakaocdn.net/dn/fuVah/hyMo7L1rHo/MudRN5z4CZIZfcWDskL64K/img.png?width=1150&amp;amp;height=518&amp;amp;face=0_0_1150_518');&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;React란?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;리액트(React, React.js, ReactJS)는 자바스크립트 라이브러리의 하나로서 페이스북의 소프트웨어 엔지니어 Jordan Walke가 개발하였다. PHP용 HTML 컴포넌트 프레임워크인 XHP에 영향을 받았다. 2011년 페이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;iwannafullstack.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;React Demo Project&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/ruanyf/react-demos&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/ruanyf/react-demos&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1637406996365&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - ruanyf/react-demos: a collection of simple demos of React.js&quot; data-og-description=&quot;a collection of simple demos of React.js. Contribute to ruanyf/react-demos development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/ruanyf/react-demos&quot; data-og-url=&quot;https://github.com/ruanyf/react-demos&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bcGJkB/hyMqWPCCLC/qmkK3ToTkYOjry5odwG4wK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/ruanyf/react-demos&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/ruanyf/react-demos&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bcGJkB/hyMqWPCCLC/qmkK3ToTkYOjry5odwG4wK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - ruanyf/react-demos: a collection of simple demos of React.js&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;a collection of simple demos of React.js. Contribute to ruanyf/react-demos development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;React의 기초를 단계별로 잘 정리한 Demo Project 입니다.&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;size18&quot;&gt;&lt;b&gt;Demo01 : Render JSX&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;div id=&quot;example&quot;&amp;gt;&amp;lt;/div&amp;gt;
  &amp;lt;script type=&quot;text/babel&quot;&amp;gt;
    ReactDOM.render(
      &amp;lt;h1&amp;gt;Hello, world!&amp;lt;/h1&amp;gt;,
      document.getElementById('example')
    );
  &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;React의 템플릿 구문을 JSX라고 합니다. JSX에서는 HTML 태그를 JavaScript 코드에 직접 넣을 수 있습니다. ReactDOM.render()는 JSX를 HTML로 변환하고 지정된 DOM 노드로 렌더링하는 메소드입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;실행결과&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-20 오후 8.39.34.png&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L4xBJ/btrlDcUWzfH/HJQxnclEVqaS5fuIuWLOC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L4xBJ/btrlDcUWzfH/HJQxnclEVqaS5fuIuWLOC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L4xBJ/btrlDcUWzfH/HJQxnclEVqaS5fuIuWLOC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL4xBJ%2FbtrlDcUWzfH%2FHJQxnclEVqaS5fuIuWLOC0%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;300&quot; height=&quot;76&quot; data-filename=&quot;스크린샷 2021-11-20 오후 8.39.34.png&quot; data-origin-width=&quot;954&quot; data-origin-height=&quot;242&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;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Demo02 : Use JavaScript in JSX&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;xquery&quot;&gt;&lt;code&gt;var names = ['Alice', 'Emily', 'Kate'];

ReactDOM.render(
  &amp;lt;div&amp;gt;
  {
    names.map(function (name) {
      return &amp;lt;div&amp;gt;Hello, {name}!&amp;lt;/div&amp;gt;
    })
  }
  &amp;lt;/div&amp;gt;,
  document.getElementById('example')
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;JSX에서 JavaScript를 사용할 수도 있습니다. HTML 구문의 시작으로 꺾쇠 괄호( &amp;lt; )를 사용하고 &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;JavaScript 구문의 시작으로 중괄호( { )를 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;실행결과&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-23 오후 9.58.33.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;226&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bipBji/btrl1KO4dNM/PSE7JGTcV466vY4JtKJLbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bipBji/btrl1KO4dNM/PSE7JGTcV466vY4JtKJLbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bipBji/btrl1KO4dNM/PSE7JGTcV466vY4JtKJLbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbipBji%2Fbtrl1KO4dNM%2FPSE7JGTcV466vY4JtKJLbK%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;300&quot; height=&quot;226&quot; data-filename=&quot;스크린샷 2021-11-23 오후 9.58.33.png&quot; data-origin-width=&quot;566&quot; data-origin-height=&quot;226&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Dem03 : Use array in JSX&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;xquery&quot;&gt;&lt;code&gt;var arr = [
  &amp;lt;h1&amp;gt;Hello world!&amp;lt;/h1&amp;gt;,
  &amp;lt;h2&amp;gt;React is awesome&amp;lt;/h2&amp;gt;,
];
ReactDOM.render(
  &amp;lt;div&amp;gt;{arr}&amp;lt;/div&amp;gt;,
  document.getElementById('example')
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;JavaScript 변수가 배열인 경우 JSX는 암시적으로 배열의 모든 구성원을 연결합니다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-23 오후 9.44.37.png&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEruUR/btrl1YfsUHz/owQYKeq6DEIOBEEDkeTee1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEruUR/btrl1YfsUHz/owQYKeq6DEIOBEEDkeTee1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEruUR/btrl1YfsUHz/owQYKeq6DEIOBEEDkeTee1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEruUR%2Fbtrl1YfsUHz%2FowQYKeq6DEIOBEEDkeTee1%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;300&quot; height=&quot;128&quot; data-filename=&quot;스크린샷 2021-11-23 오후 9.44.37.png&quot; data-origin-width=&quot;688&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Dem04 : Use array in JSX&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;scala&quot;&gt;&lt;code&gt;class HelloMessage extends React.Component {
  render() {
    return &amp;lt;h1&amp;gt;Hello {this.props.name}&amp;lt;/h1&amp;gt;;
  }
}

ReactDOM.render(
  &amp;lt;HelloMessage name=&quot;John&quot; /&amp;gt;,
  document.getElementById('example')
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Class에는 속성이 있으며 this.props.[속성]을 사용하여 HelloMessage name='John'의 this.props.name이 /인 것처럼 구성 요소에 액세스할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Class 이름의 첫 글자는 대문자여야 한다는 점을 기억하세요. 그렇지 않으면 React에서 오류가 발생합니다. 예를 들어 컴포넌트의 이름으로 HelloMessage는 괜찮지만 helloMessage는 허용되지 않습니다. 그리고 React 컴포넌트에는 최상위 자식 노드가 하나만 있어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;실행결과&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-23 오후 9.50.23.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DrM8m/btrlTWjXesQ/lPv7UvOOEkJrGNVJxtKfK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DrM8m/btrlTWjXesQ/lPv7UvOOEkJrGNVJxtKfK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DrM8m/btrlTWjXesQ/lPv7UvOOEkJrGNVJxtKfK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDrM8m%2FbtrlTWjXesQ%2FlPv7UvOOEkJrGNVJxtKfK0%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;300&quot; height=&quot;230&quot; data-filename=&quot;스크린샷 2021-11-23 오후 9.50.23.png&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Dem05 : this.props.children&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;class NotesList extends React.Component {
  render() {
    return (
      &amp;lt;ol&amp;gt;
      {
        React.Children.map(this.props.children, function (child) {
          return &amp;lt;li&amp;gt;{child}&amp;lt;/li&amp;gt;;
        })
      }
      &amp;lt;/ol&amp;gt;
    );
  }
}

ReactDOM.render(
  &amp;lt;NotesList&amp;gt;
    &amp;lt;span&amp;gt;hello&amp;lt;/span&amp;gt;
    &amp;lt;span&amp;gt;world&amp;lt;/span&amp;gt;
  &amp;lt;/NotesList&amp;gt;,
  document.getElementById('example')
);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;React는 컴포넌트의 자식 노드에 접근하기 위해 this.props.children을 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;this.props.children의 값에는 세 가지 가능성이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;1. 구성 요소에 자식 노드가 없으면 값이 정의되지 않습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;2. 단일 자식 노드인 경우 개체입니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;3. 자식 노드가 여러 개인 경우 배열입니다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;React는 this.props.children의 불투명한 데이터 구조를 처리하기 위해 React.Children 유틸리티를 제공했습니다. React.Children.map은 데이터 유형이 정의 되지 않으면 객체가 생성 되지 않고 반복할 수 있습니다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;실행결과&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-23 오후 10.30.01.png&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqlSTp/btrlXwxKVqB/IkksZy6M5fWtcZqVwBv6dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqlSTp/btrlXwxKVqB/IkksZy6M5fWtcZqVwBv6dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqlSTp/btrlXwxKVqB/IkksZy6M5fWtcZqVwBv6dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqlSTp%2FbtrlXwxKVqB%2FIkksZy6M5fWtcZqVwBv6dk%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;300&quot; height=&quot;232&quot; data-filename=&quot;스크린샷 2021-11-23 오후 10.30.01.png&quot; data-origin-width=&quot;536&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Dem06 : PropTypes&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;class MyTitle extends React.Component {
  static propTypes = {
    title: PropTypes.string.isRequired,
  }
  render() {
    return &amp;lt;h1&amp;gt; {this.props.title} &amp;lt;/h1&amp;gt;;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;컴포넌트에는 React에서 props라고 하는 많은 특정 속성이 있으며 모든 유형이 될 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;props를 검증하는 방법이 필요합니다. 사용자가 구성 요소에 아무 것도 입력할 수 있는 자유를 원하지 않습니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;이를 PropTypes라고 합니다. &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;위의 코드에서 PropTypes는 제목이 필수이고 값이 문자열이어야 한다고 React에 알려줍니다.&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-23 오후 10.47.43.png&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOnqbj/btrlUPx8iGN/1AmaiAS4NMzwYO45sLjdRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOnqbj/btrlUPx8iGN/1AmaiAS4NMzwYO45sLjdRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOnqbj/btrlUPx8iGN/1AmaiAS4NMzwYO45sLjdRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOnqbj%2FbtrlUPx8iGN%2F1AmaiAS4NMzwYO45sLjdRk%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;300&quot; height=&quot;272&quot; data-filename=&quot;스크린샷 2021-11-23 오후 10.47.43.png&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;Dem07 : 업데이트 중&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>FrontEnd/React</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/8</guid>
      <comments>https://iwannafullstack.tistory.com/entry/React-%EA%B8%B0%EC%B4%88-%EA%B3%B5%EB%B6%80%ED%95%98%EA%B8%B01#entry8comment</comments>
      <pubDate>Mon, 22 Nov 2021 13:55:35 +0900</pubDate>
    </item>
    <item>
      <title>구글 트렌드 차트 사용법</title>
      <link>https://iwannafullstack.tistory.com/entry/%EA%B5%AC%EA%B8%80-%ED%8A%B8%EB%A0%8C%EB%93%9C-%EC%B0%A8%ED%8A%B8-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;구글은 전세계의 동향을 사용자가 보고 싶은 형태로 보여줄 수 있는 트렌드 차트를 제공한다.&lt;/p&gt;
&lt;div style=&quot;border : 1px solid black&quot;&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-20 오후 7.58.24.png&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;935&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxLZLi/btrlEIkUrJC/ep1EoEDJR1UyRrVBHQcNH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxLZLi/btrlEIkUrJC/ep1EoEDJR1UyRrVBHQcNH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxLZLi/btrlEIkUrJC/ep1EoEDJR1UyRrVBHQcNH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxLZLi%2FbtrlEIkUrJC%2Fep1EoEDJR1UyRrVBHQcNH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1783&quot; height=&quot;935&quot; data-filename=&quot;스크린샷 2021-11-20 오후 7.58.24.png&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;935&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/div&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;간단 사용법&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;border : 1px solid black&quot;&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-20 오후 8.03.47.png&quot; data-origin-width=&quot;1773&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNSjq2/btrlD24ZOzC/je1AEXfLkZIv1HRrmzkOok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNSjq2/btrlD24ZOzC/je1AEXfLkZIv1HRrmzkOok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNSjq2/btrlD24ZOzC/je1AEXfLkZIv1HRrmzkOok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNSjq2%2FbtrlD24ZOzC%2Fje1AEXfLkZIv1HRrmzkOok%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;1773&quot; height=&quot;676&quot; data-filename=&quot;스크린샷 2021-11-20 오후 8.03.47.png&quot; data-origin-width=&quot;1773&quot; data-origin-height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/div&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;div style=&quot;border : 1px solid black&quot;&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-20 오후 8.05.51.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF604p/btrlGIYPJhr/SQ79ltmQUEJsosQnBjobIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF604p/btrlGIYPJhr/SQ79ltmQUEJsosQnBjobIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF604p/btrlGIYPJhr/SQ79ltmQUEJsosQnBjobIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF604p%2FbtrlGIYPJhr%2FSQ79ltmQUEJsosQnBjobIk%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;1146&quot; height=&quot;442&quot; data-filename=&quot;스크린샷 2021-11-20 오후 8.05.51.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/div&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;size18&quot;&gt;&lt;b&gt;활용법&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;요즘 투자 열풍인 만큼 자신이 관심 있는 주식이나, 코인들을 비교해볼 수도 있고 기업의 관심도도 비교해볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;구글 트렌드 차트를 잘 활용하면 나에게 많은 도움을 줄 수 있을 것이다.&lt;/p&gt;</description>
      <category>OpenSource/Google</category>
      <category>google</category>
      <category>Trend</category>
      <category>개발자</category>
      <category>구글</category>
      <category>동향</category>
      <category>트렌드차트</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/7</guid>
      <comments>https://iwannafullstack.tistory.com/entry/%EA%B5%AC%EA%B8%80-%ED%8A%B8%EB%A0%8C%EB%93%9C-%EC%B0%A8%ED%8A%B8-%EC%82%AC%EC%9A%A9%EB%B2%95#entry7comment</comments>
      <pubDate>Sat, 20 Nov 2021 20:11:08 +0900</pubDate>
    </item>
    <item>
      <title>React란?</title>
      <link>https://iwannafullstack.tistory.com/entry/React%EB%9E%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리액트(React, React.js, ReactJS)는 자바스크립트 라이브러리의 하나로서 &lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;&lt;b&gt;페이스북&lt;/b&gt;의 소프트웨어 엔지니어 &lt;b&gt;Jordan Walke&lt;/b&gt;가 개발하였다. PHP용 HTML 컴포넌트 프레임워크인 XHP에 영향을 받았다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;2011년 페이스북의 뉴스피드에 처음 적용되었다가 2012년 인스타그램에 적용 되었다고 한다. 2013년 5월 JSConf US에서 오픈 소스화되었다. 페이스북과 개별 개발자 및 기업들 공동체에 의해 유지보수 된다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #202122;&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;size18&quot;&gt;&lt;b&gt;React 장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;HTML과 JavaScript를 결합한 구문을 사용하여 간단한 JS 디자인을 제공하므로 배우기 쉽다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;React의 Virtual DOM 구현 및 렌더링 최적화로 인해 빠르다.&lt;/li&gt;
&lt;li&gt;특히 create-react-app템플릿 생성기 와 함께 최고 수준의 PWA (Progressive Web App) 지원 .&lt;/li&gt;
&lt;li&gt;&lt;span&gt;React는 재사용 가능한 코드를 허용하는 구성 요소로 함수형 프로그래밍을 구현하여 모듈화 된 디자인을 만든다. 이를 통해 앱을보다 쉽게 유지 관리하고 구축 할 수 있으므로 복잡한 인프라를보다 쉽게 개발하고 확장 할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;React 단점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아직 React는 지속적으로 문서가 업데이트 되고 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;React에 포함되어 있는&amp;nbsp;JSX 및 ES6은&amp;nbsp;입문자가 학습하기에 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;구글 트렌드 차트로 보는 전세계 자바스크립트 프레임워크 순위&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;border: 1px solid black;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-20 오후 7.13.10.png&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzXi4e/btrlEmbl9Fm/6wLUSXho72lIIQvl1gOkg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzXi4e/btrlEmbl9Fm/6wLUSXho72lIIQvl1gOkg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzXi4e/btrlEmbl9Fm/6wLUSXho72lIIQvl1gOkg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzXi4e%2FbtrlEmbl9Fm%2F6wLUSXho72lIIQvl1gOkg1%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;1150&quot; height=&quot;518&quot; data-filename=&quot;스크린샷 2021-11-20 오후 7.13.10.png&quot; data-origin-width=&quot;1150&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2021-11-20 오후 7.21.46.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;389&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqI51q/btrlDxdowW3/j87FL1oeeWiM3VMJ5ekbZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqI51q/btrlDxdowW3/j87FL1oeeWiM3VMJ5ekbZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqI51q/btrlDxdowW3/j87FL1oeeWiM3VMJ5ekbZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqI51q%2FbtrlDxdowW3%2Fj87FL1oeeWiM3VMJ5ekbZK%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;1146&quot; height=&quot;389&quot; data-filename=&quot;스크린샷 2021-11-20 오후 7.21.46.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;389&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;출처 :&amp;nbsp;&lt;a href=&quot;https://trends.google.co.kr/&quot;&gt;https://trends.google.co.kr/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;React는 아직까지 전세계에서 가장 인기가 많은 프레임워크라는 걸 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 현재 국내에서 IT정상급 기업들은 React 개발자를 선호한다. &lt;b&gt;당근&lt;/b&gt;, &lt;b&gt;비바리퍼블리카&lt;/b&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;size18&quot;&gt;&lt;b&gt;React를 공부 해야 하는 이유&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;React의 세계적인 관심도 중요하다. 협업은 개발자의 숙명과도 같다. 백엔드 개발자일지라도 프론트엔드 기술셋을 이해하는 것이 중요하다고 생각한다.&lt;/p&gt;</description>
      <category>FrontEnd/React</category>
      <category>React</category>
      <category>React.js</category>
      <category>개발자</category>
      <category>구글트렌드</category>
      <category>리액트</category>
      <category>백엔드</category>
      <category>자바스크립트</category>
      <category>프레임워크</category>
      <category>프론트엔드</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/6</guid>
      <comments>https://iwannafullstack.tistory.com/entry/React%EB%9E%80#entry6comment</comments>
      <pubDate>Sat, 20 Nov 2021 19:51:15 +0900</pubDate>
    </item>
    <item>
      <title>@Resource 어노테이션 이란?</title>
      <link>https://iwannafullstack.tistory.com/entry/Resource-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%9D%B4%EB%9E%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;@Resource과 @Autowired의 차이점을 설명하면 Resource 어노테이션의 의미를 이해하기 쉽다.&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;span&gt;&lt;b&gt;&lt;span&gt;@Autowired와 @Resource의 차이점&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. @Autowired : 타입(클래스)로 Bean을 지정한다.(생성자/필드/메서드에 모두 적용 가능)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. @Resource : Name으로 Bean을 지정한다.(필드/메서드에만 적용 가능)&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;background-color: #ffffff;&quot;&gt;@Autowired 어노테이션이 타입을 이용해서 의존성을 주입한다면, @Resource 어노테이션은 빈 이름을 이용해서 의존성을 주입한다.&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;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;예시 코드&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Repository
public class CommonDao {
    @Autowired
    private SqlSessionTemplate sqlSession;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Autowired를 사용한다면, sqlSession은 SqlSessionTemplate&amp;nbsp;클래스에 의존성을 가지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Repository
public class TestDao {
    @Resource(name=&quot;BlueSqlSessionTemplate&quot;)
    private SqlSessionTemplate sqlSession;
 }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 Resource를 사용한다면, sqlSession은 BlueSqlSessionTemplate의 이름을 가진 Bean 객체에 의존성을 가지게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;name 속성을 생략하면, @Resource 어노테이션이 적용된 필드나 설정 메서드의 타입을 사용한다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;@Resource 어노테이션의 적용 순서&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;1. name 속성에 지정한 빈 객체를 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;2. name 속성이 없을 경우, 동일한 타입을 갖는 빈 객체를 찾는다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;3. name 속성이 없고 동일한 타입을 갖는 빈 객체가 두 개 이상일 경우, 같은 이름을 가진 빈 객체를 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; letter-spacing: 0px;&quot;&gt;4. name 속성이 없고 동일한 타입을 갖는 빈 객체가 두 개 이상이고 같은 이름을 가진 빈 객체가 없는 경우 @Qualifier를 이용해서 주입할 빈 객체를 찾는다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>BackEnd/Spring</category>
      <category>annotation</category>
      <category>autowired</category>
      <category>bean</category>
      <category>resource</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>객체</category>
      <category>어노테이션</category>
      <category>의존성</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/5</guid>
      <comments>https://iwannafullstack.tistory.com/entry/Resource-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%9D%B4%EB%9E%80#entry5comment</comments>
      <pubDate>Fri, 19 Nov 2021 16:32:34 +0900</pubDate>
    </item>
    <item>
      <title>org.springframework.jdbc.BadSqlGrammarException:</title>
      <link>https://iwannafullstack.tistory.com/entry/orgspringframeworkjdbcBadSqlGrammarException</link>
      <description>&lt;pre id=&quot;code_1637220876377&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;### Error querying database.  Cause: java.sql.SQLException: Subquery returns more than 1 row
### The error may exist in file [ query 파일 위치 ]
### The error may involve UserSql.selectUserAccountInfoByUserId-Inline
### The error occurred while setting parameters&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서브쿼리가 1개 이상의 Row를 리턴할때 발생하는 에러 입니다.&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;해결 방법&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;public UserInfoModel selectUserId(UserModel reqModel) {
   return selectOne(&quot;UserSql.selectUserInfoByUserId&quot;, reqModel);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 위와 같이 selectOne으로 단일 Row를 리턴 받도록 코드를 짯다면, selectOne을 selectList로 변경 하여 다중 Row를 리턴 받도록 수정 하거나 단일 Row만 리턴 할 수 있도록 쿼리를 변경합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>BackEnd/Debug</category>
      <category>Debug</category>
      <category>error</category>
      <category>query</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>sql</category>
      <category>subquery</category>
      <category>다중Row</category>
      <category>단일Row</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/4</guid>
      <comments>https://iwannafullstack.tistory.com/entry/orgspringframeworkjdbcBadSqlGrammarException#entry4comment</comments>
      <pubDate>Thu, 18 Nov 2021 16:38:29 +0900</pubDate>
    </item>
    <item>
      <title>@RequiredArgsConstructor과 @Autowired 차이점</title>
      <link>https://iwannafullstack.tistory.com/entry/RequiredArgsConstructor%EA%B3%BC-Autowired-%EC%B0%A8%EC%9D%B4%EC%A0%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;의존성 주입할때 @&lt;span style=&quot;background-color: #ffffff; color: #555555;&quot;&gt;Autowired라는 어노테이션을 대게 많이 사용한다.&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;size18&quot;&gt;&lt;b&gt;의존성이란?&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;class HiWorld {
   private SayHi sayHi;

   public HelloWorld() {
      this.sayHi = new SayHi();
   }

   public startHelloWorld() {
      this.sayHi.hello();
   }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HiWorld 클래스에서 hello함수가 호출되기 위해서는 SayHi 클래스가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HiWorld 클래스는 SayHi 클래스의 의존성을 가진다고 말한다.&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;@Autowired 예시&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Service
public class UseService {

   @Autowired
   private UseDao dao;
   
   @Autowired
   private UseResourceService resource;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Autowired를 활용한 의존성 주입을 필드 주입이라고 한다.&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;size18&quot;&gt;&lt;b&gt;@RequiredArgsConstructor 권장&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Service
@RequiredArgsConstructor
public class UseService {

   private final UseDao dao;
  
   private final UseResourceService resource;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lombok에서 지원하는 @RequiredArgsConstructor 어노테이션을 사용하여 의존성을 주입 하는 것을 &lt;b&gt;생성자 주입&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;/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;④ 객체 변이 방지 (final 가능)&lt;/p&gt;</description>
      <category>BackEnd/Spring</category>
      <category>annotation</category>
      <category>autowired</category>
      <category>lombok</category>
      <category>RequiredArgsConstructor</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>어노테이션</category>
      <category>의존성</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/3</guid>
      <comments>https://iwannafullstack.tistory.com/entry/RequiredArgsConstructor%EA%B3%BC-Autowired-%EC%B0%A8%EC%9D%B4%EC%A0%90#entry3comment</comments>
      <pubDate>Thu, 18 Nov 2021 13:57:37 +0900</pubDate>
    </item>
    <item>
      <title>@SuppressWarnings 어노테이션 이란?</title>
      <link>https://iwannafullstack.tistory.com/entry/SuppressWarnings-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%9D%B4%EB%9E%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일러가 경고하는 내용 중 &lt;b&gt;&quot;이 내용은 경고하지마&quot;&lt;/b&gt;하고 제외 할때 사용 합니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot;&gt;&lt;code&gt;@SuppressWarnings(&quot;unchecked&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 처럼 ()안에 옵션을 줄 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;&lt;b&gt;all&amp;nbsp;&lt;/b&gt;: 모든 경고를 억제&lt;br /&gt;2.&amp;nbsp;&lt;b&gt;cast&amp;nbsp;&lt;/b&gt;: 캐스트 연산자 관련 경고 억제&lt;br /&gt;3.&amp;nbsp;&lt;b&gt;dep-ann&amp;nbsp;&lt;/b&gt;: 사용하지 말아야 할 주석 관련 경고 억제&lt;br /&gt;4.&amp;nbsp;&lt;b&gt;deprecation&amp;nbsp;&lt;/b&gt;: 사용하지 말아야 할 메소드 관련 경고 억제&lt;br /&gt;5.&amp;nbsp;&lt;b&gt;fallthrough&amp;nbsp;&lt;/b&gt;: switch문에서의 break 누락 관련 경고 억제&lt;br /&gt;6.&amp;nbsp;&lt;b&gt;finally&amp;nbsp;&lt;/b&gt;: 반환하지 않는 finally 블럭 관련 경고 억제&lt;br /&gt;7.&amp;nbsp;&lt;b&gt;null&amp;nbsp;&lt;/b&gt;: null 분석 관련 경고 억제&lt;br /&gt;8.&amp;nbsp;&lt;b&gt;rawtypes&amp;nbsp;&lt;/b&gt;: 제네릭을 사용하는 클래스 매개 변수가 불특정일 때의 경고 억제&lt;br /&gt;&lt;span&gt;&lt;/span&gt;9.&amp;nbsp;&lt;b&gt;unchecked&amp;nbsp;&lt;/b&gt;: 검증되지 않은 연산자 관련 경고 억제&lt;br /&gt;10.&amp;nbsp;&lt;b&gt;unused&amp;nbsp;&lt;/b&gt;: 사용하지 않는 코드 관련 경고 억제&lt;/p&gt;</description>
      <category>BackEnd/Spring</category>
      <category>annotation</category>
      <category>cron</category>
      <category>cronutil</category>
      <category>scheduler</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>어노테이션</category>
      <author>풀스택개발자</author>
      <guid isPermaLink="true">https://iwannafullstack.tistory.com/2</guid>
      <comments>https://iwannafullstack.tistory.com/entry/SuppressWarnings-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98-%EC%9D%B4%EB%9E%80#entry2comment</comments>
      <pubDate>Thu, 18 Nov 2021 11:18:49 +0900</pubDate>
    </item>
  </channel>
</rss>