<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>오라의 개발스토리  </title>
    <link>https://songeyes.tistory.com/</link>
    <description>안녕하세요, 프론트엔드 개발자 2차전직중인 오라입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 12 Apr 2026 17:45:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Orra.o</managingEditor>
    <image>
      <title>오라의 개발스토리  </title>
      <url>https://tistory1.daumcdn.net/tistory/7608725/attach/9993460ee2c64e02b21697bda50f8490</url>
      <link>https://songeyes.tistory.com</link>
    </image>
    <item>
      <title>DOM에서 흔적을 지워라! &amp;lt;React.Fragment&amp;gt;</title>
      <link>https://songeyes.tistory.com/5</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-filename=&quot;React.Fragment2.png&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d0wpoI/dJMcac23E6Z/SrGEV3949C7FldpkdLHLF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d0wpoI/dJMcac23E6Z/SrGEV3949C7FldpkdLHLF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d0wpoI/dJMcac23E6Z/SrGEV3949C7FldpkdLHLF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd0wpoI%2FdJMcac23E6Z%2FSrGEV3949C7FldpkdLHLF1%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;800&quot; height=&quot;293&quot; data-filename=&quot;React.Fragment2.png&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;알겠습니다! 저한테 맡겨주세요!&quot;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-02-09 오후 8.02.06.png&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdpd71/dJMcacotjef/tCgBS5GkTOE477fdOkvSR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdpd71/dJMcacotjef/tCgBS5GkTOE477fdOkvSR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdpd71/dJMcacotjef/tCgBS5GkTOE477fdOkvSR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdpd71%2FdJMcacotjef%2FtCgBS5GkTOE477fdOkvSR1%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;740&quot; height=&quot;436&quot; data-filename=&quot;스크린샷 2026-02-09 오후 8.02.06.png&quot; data-origin-width=&quot;1428&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헬리오스 탑은 리액트로 만들어졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트는 UI를 구성하는 최소 단위인&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt; 컴포넌트&lt;/b&gt;&lt;/span&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX5RHM/dJMcaac8AMK/cCBnUFaPIVPBS9eekE8BOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX5RHM/dJMcaac8AMK/cCBnUFaPIVPBS9eekE8BOk/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;628&quot; data-filename=&quot;스크린샷 2026-02-09 오후 8.10.20.png&quot; data-widthpercent=&quot;47.31&quot; style=&quot;width: 46.758%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX5RHM/dJMcaac8AMK/cCBnUFaPIVPBS9eekE8BOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX5RHM%2FdJMcaac8AMK%2FcCBnUFaPIVPBS9eekE8BOk%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;826&quot; height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl64xJ/dJMcacotjnb/dkblVfsthRo2yGnIdtuZC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl64xJ/dJMcacotjnb/dkblVfsthRo2yGnIdtuZC0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;920&quot; data-origin-height=&quot;628&quot; data-filename=&quot;스크린샷 2026-02-09 오후 8.11.05.png&quot; style=&quot;width: 52.0792%;&quot; data-widthpercent=&quot;52.69&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl64xJ/dJMcacotjnb/dkblVfsthRo2yGnIdtuZC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl64xJ%2FdJMcacotjnb%2FdkblVfsthRo2yGnIdtuZC0%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;920&quot; height=&quot;628&quot;/&gt;&lt;/span&gt;&lt;/div&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;위와 같이 여러개의 JSX 요소를 그대로 반환하려고 하면,&lt;br /&gt;리액트는&amp;nbsp;&lt;b&gt;하나의&amp;nbsp;부모&amp;nbsp;요소가&amp;nbsp;필요하다&lt;/b&gt;는&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;오류&lt;/span&gt;&lt;/b&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2I9hH/dJMb99ZCkrt/8hXrNJxfSAN7ChqwC3o72K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2I9hH/dJMb99ZCkrt/8hXrNJxfSAN7ChqwC3o72K/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;716&quot; data-filename=&quot;스크린샷 2026-02-09 오후 8.14.40.png&quot; style=&quot;width: 47.2385%; margin-right: 10px;&quot; data-widthpercent=&quot;47.79&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2I9hH/dJMb99ZCkrt/8hXrNJxfSAN7ChqwC3o72K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2I9hH%2FdJMb99ZCkrt%2F8hXrNJxfSAN7ChqwC3o72K%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;856&quot; height=&quot;716&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbZViy/dJMcafMiGEh/dfwHA1Nj2DMMTPIhoAwKCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbZViy/dJMcafMiGEh/dfwHA1Nj2DMMTPIhoAwKCK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;850&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;52.21&quot; style=&quot;width: 51.5987%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbZViy/dJMcafMiGEh/dfwHA1Nj2DMMTPIhoAwKCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbZViy%2FdJMcafMiGEh%2FdfwHA1Nj2DMMTPIhoAwKCK%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;1110&quot; height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;&amp;lt;div&amp;gt;&amp;nbsp;태그&lt;/b&gt;&lt;/span&gt;를&amp;nbsp;사용해&amp;nbsp;&lt;b&gt;부모&amp;nbsp;요소&lt;/b&gt;로&amp;nbsp;묶어주었더니,&lt;br /&gt;더&amp;nbsp;이상&amp;nbsp;오류가&amp;nbsp;발생하지&amp;nbsp;않습니다.&lt;br /&gt;&lt;br /&gt;이제&amp;nbsp;&lt;b&gt;HeliosTower.tsx&lt;/b&gt;&amp;nbsp;컴포넌트를&amp;nbsp;&lt;b&gt;App.tsx&lt;/b&gt;에서&amp;nbsp;불러오면,&lt;br /&gt;화면에&amp;nbsp;정상적으로&amp;nbsp;출력되는&amp;nbsp;것을&amp;nbsp;확인할&amp;nbsp;수&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de7UXA/dJMcaa5gTtp/LgfQ8DOzOMHJoJvvpbXxy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de7UXA/dJMcaa5gTtp/LgfQ8DOzOMHJoJvvpbXxy1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;788&quot; data-origin-height=&quot;714&quot; data-filename=&quot;스크린샷 2026-02-10 오전 11.57.35.png&quot; style=&quot;width: 49.2867%; margin-right: 10px;&quot; data-widthpercent=&quot;49.87&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de7UXA/dJMcaa5gTtp/LgfQ8DOzOMHJoJvvpbXxy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde7UXA%2FdJMcaa5gTtp%2FLgfQ8DOzOMHJoJvvpbXxy1%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;788&quot; height=&quot;714&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNsStB/dJMcahwzVAb/LaFmCzexdhIOWo5KXkqyy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNsStB/dJMcahwzVAb/LaFmCzexdhIOWo5KXkqyy0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;712&quot; data-filename=&quot;스크린샷 2026-02-10 오전 11.58.12.png&quot; style=&quot;width: 49.5505%;&quot; data-widthpercent=&quot;50.13&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNsStB/dJMcahwzVAb/LaFmCzexdhIOWo5KXkqyy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNsStB%2FdJMcahwzVAb%2FLaFmCzexdhIOWo5KXkqyy0%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;790&quot; height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앗, 그런데 누군가 부모 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;&amp;lt;div&amp;gt; 태그&lt;/b&gt;&lt;/span&gt;에 &lt;b&gt;css&lt;/b&gt;를 추가하는 장난을 쳐놨습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;&amp;lt;div&amp;gt; 태그&lt;/b&gt;&lt;/span&gt;에 빨간색 배경을 입혀서, 탑이 빨갛게 물들고 말았어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;심지어 black-wrapper라고 스타일 클래스 이름을 지었으면서 red색깔로 물들이는 농락까지... (절대내실수가아님)&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;778&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYsJlT/dJMcabXo8qX/zAzWrAJ6hx25sA3kvQuHZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYsJlT/dJMcabXo8qX/zAzWrAJ6hx25sA3kvQuHZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYsJlT/dJMcabXo8qX/zAzWrAJ6hx25sA3kvQuHZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYsJlT%2FdJMcabXo8qX%2FzAzWrAJ6hx25sA3kvQuHZ1%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;1818&quot; height=&quot;778&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;778&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;span style=&quot;color: #333333; text-align: start;&quot;&gt;DOM(Document Object Model) 구조를&lt;/span&gt; 확인해보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요소들을 감싸고 있는 부모 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;&amp;lt;div&amp;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;이렇게 계속 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&amp;lt;div&amp;gt; 태그&lt;/span&gt;&lt;/b&gt;로 요소들을 감싸게 된다면, 누군가 쉽게 &lt;b&gt;css&lt;/b&gt;를 추가해 탑의 모습과 구조를 엉망으로 만들거에요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 다행히도, 아예 &lt;b&gt;DOM에 흔적을 남기지 않는 방법&lt;/b&gt;이 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;바로, &lt;span style=&quot;color: #1a5490;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&amp;lt;Fragment&amp;gt;&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;를 사용하는 거예요!&lt;/h4&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;Fragment&lt;/b&gt;로 감싼 요소들은 실제 DOM 결과물에 아무런 영향을 주지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트에서 흔히 사용하는 &lt;b&gt;&amp;lt;&amp;gt; &amp;lt;/&amp;gt;&lt;/b&gt; 문법이 &lt;b&gt;&amp;lt;Fragment&amp;gt; &amp;lt;/Fragment&amp;gt;&lt;/b&gt;의 축약형입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Fragment&lt;/b&gt;로 엘리먼트를 그룹화하면 다른 컨테이너(&amp;lt;div&amp;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;Fragment 태그를 활용해 탑의 구조를 바꿔봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/O90K7/dJMcagxDaJX/KavG5p8u0XboLP7f7xk4R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/O90K7/dJMcagxDaJX/KavG5p8u0XboLP7f7xk4R0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;792&quot; data-filename=&quot;스크린샷 2026-02-10 오후 12.22.26.png&quot; style=&quot;width: 49.5574%; margin-right: 10px;&quot; data-widthpercent=&quot;50.14&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/O90K7/dJMcagxDaJX/KavG5p8u0XboLP7f7xk4R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FO90K7%2FdJMcagxDaJX%2FKavG5p8u0XboLP7f7xk4R0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;986&quot; height=&quot;792&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpFs0V/dJMcacWiKgB/ksJ3GJ6FyoPai8w6Nko4Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpFs0V/dJMcacWiKgB/ksJ3GJ6FyoPai8w6Nko4Ek/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;790&quot; data-filename=&quot;스크린샷 2026-02-10 오후 12.26.25.png&quot; style=&quot;width: 49.2798%;&quot; data-widthpercent=&quot;49.86&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpFs0V/dJMcacWiKgB/ksJ3GJ6FyoPai8w6Nko4Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpFs0V%2FdJMcacWiKgB%2FksJ3GJ6FyoPai8w6Nko4Ek%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;978&quot; height=&quot;790&quot;/&gt;&lt;/span&gt;&lt;/div&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;정식&amp;nbsp;문법인&amp;nbsp;&lt;b&gt;&amp;lt;React.Fragment&amp;gt;&lt;/b&gt;를,&lt;br /&gt;오른쪽은&amp;nbsp;축약&amp;nbsp;문법인&amp;nbsp;&lt;b&gt;&amp;lt;&amp;gt;&amp;nbsp;&amp;lt;/&amp;gt;&lt;/b&gt;를&amp;nbsp;사용해&amp;nbsp;태그를&amp;nbsp;감싸보았습니다.&lt;br /&gt;&lt;br /&gt;개발자&amp;nbsp;도구에서&amp;nbsp;DOM&amp;nbsp;구조를&amp;nbsp;확인해보면,&lt;br /&gt;두&amp;nbsp;경우&amp;nbsp;모두&amp;nbsp;실제&amp;nbsp;DOM에는&amp;nbsp;아무런&amp;nbsp;태그도&amp;nbsp;추가되지&amp;nbsp;않은&amp;nbsp;것을&amp;nbsp;볼&amp;nbsp;수&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-filename=&quot;blob&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;676&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ij8Uf/dJMcafetKGi/FmvXmUorsSCCLkpShTBeIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ij8Uf/dJMcafetKGi/FmvXmUorsSCCLkpShTBeIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ij8Uf/dJMcafetKGi/FmvXmUorsSCCLkpShTBeIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIj8Uf%2FdJMcafetKGi%2FFmvXmUorsSCCLkpShTBeIk%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;1596&quot; height=&quot;676&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;676&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;DOM에는&amp;nbsp;&lt;b&gt;Fragment&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-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;nbsp; &lt;b&gt;그럼 항상 편하게 Fragment 축약 문법 &amp;lt;&amp;gt; &amp;lt;/&amp;gt; 을 쓰면 되나요?&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;Fragment는 DOM에 흔적을 남기지 않기 때문에, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;오히려&lt;span style=&quot;color: #ef5369;&quot;&gt; &lt;b&gt;스타일을 남겨야 할 때&lt;/b&gt;&lt;/span&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;진짜 레이아웃이나 배경을 제대로 바꾸고 싶을 때는 아래 예시처럼 css를 적용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Ku8M/dJMcaaEdCiU/2KYl7GEZlZWpGJkDoYL8T1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Ku8M/dJMcaaEdCiU/2KYl7GEZlZWpGJkDoYL8T1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;754&quot; data-origin-height=&quot;618&quot; data-filename=&quot;스크린샷 2026-02-10 오후 1.03.31.png&quot; style=&quot;width: 50.9472%; margin-right: 10px;&quot; data-widthpercent=&quot;51.55&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Ku8M/dJMcaaEdCiU/2KYl7GEZlZWpGJkDoYL8T1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Ku8M%2FdJMcaaEdCiU%2F2KYl7GEZlZWpGJkDoYL8T1%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;754&quot; height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x1so4/dJMcadgCrnQ/E7kci6MlEo7wXtw56KTGD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x1so4/dJMcadgCrnQ/E7kci6MlEo7wXtw56KTGD1/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;572&quot; data-filename=&quot;스크린샷 2026-02-10 오후 1.03.42.png&quot; style=&quot;width: 47.89%;&quot; data-widthpercent=&quot;48.45&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x1so4/dJMcadgCrnQ/E7kci6MlEo7wXtw56KTGD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx1so4%2FdJMcadgCrnQ%2FE7kci6MlEo7wXtw56KTGD1%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;656&quot; height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 예쁘게 스타일이 적용된 것을 확인할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-02-10 오후 1.05.07.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uLwXJ/dJMcahQRtUj/Ksie5v5OcmFIpSjCpcN0Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uLwXJ/dJMcahQRtUj/Ksie5v5OcmFIpSjCpcN0Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uLwXJ/dJMcahQRtUj/Ksie5v5OcmFIpSjCpcN0Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuLwXJ%2FdJMcahQRtUj%2FKsie5v5OcmFIpSjCpcN0Q0%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;1430&quot; height=&quot;668&quot; data-filename=&quot;스크린샷 2026-02-10 오후 1.05.07.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째로, 축약형&lt;b&gt; &amp;lt;&amp;gt; &amp;lt;/&amp;gt;&lt;/b&gt; 말고 &lt;b&gt;&amp;lt;React.Fragment&amp;gt; &amp;lt;/React.Fragment&amp;gt;&lt;/b&gt;를 사용해야 하는 때가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;바로, &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;key를 사용해야 하는 경우&lt;/span&gt;&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리액트에서 반복을 통해 여러 요소들을 랜더링할 때는 각 요소에 key를 할당해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 &lt;b&gt;key 할당&lt;/b&gt;은 축약형 문법 &lt;b&gt;&amp;lt;&amp;gt; &amp;lt;/&amp;gt;&lt;/b&gt; 에서는 할 수 없고, 정식 문법인&amp;nbsp;&lt;b&gt;&amp;lt;Fragment&amp;gt; &amp;lt;/Fragment&amp;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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770697502987&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default function HeliosTower() {
    const floors = ['100층', '99층', '앨리베이터', '2층', '1층', '아랫마을 입구'];
    return (
        &amp;lt;&amp;gt;
            &amp;lt;h1&amp;gt;헬리오스 탑&amp;lt;/h1&amp;gt;
            {floors.map(floor =&amp;gt; (
                &amp;lt;&amp;gt;
                    &amp;lt;p&amp;gt;{floor}&amp;lt;/p&amp;gt;
                    &amp;lt;button&amp;gt;이동버튼&amp;lt;/button&amp;gt;
                &amp;lt;/&amp;gt;
            ))}
        &amp;lt;/&amp;gt;
    )
}&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;b&gt;map&lt;/b&gt; 메서드를 활용해&lt;b&gt; floors&lt;/b&gt; 배열 안에 있는 각각의 값들을 렌더링 하고 있는데요,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 반복 렌더링되는 각각의 최상위 요소에 &lt;b&gt;key&lt;/b&gt;값을 주지 않고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;key&lt;/b&gt;값이 없으면 아래와 같이 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Each child in a list should have a unique &quot;key&quot; prop&lt;/span&gt;&lt;/b&gt; 에러가 뜹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1838&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/enjIaD/dJMcahpNxzR/amcuQ6kXHb9mVoVqcRkJ5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/enjIaD/dJMcahpNxzR/amcuQ6kXHb9mVoVqcRkJ5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/enjIaD/dJMcahpNxzR/amcuQ6kXHb9mVoVqcRkJ5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FenjIaD%2FdJMcahpNxzR%2FamcuQ6kXHb9mVoVqcRkJ5K%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;1838&quot; height=&quot;1032&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1838&quot; data-origin-height=&quot;1032&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;map&lt;/b&gt;의 결과물로 Fragment 여러 개가 나올텐데, 이들을 서로 구분할 &lt;b&gt;key&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;key&lt;/b&gt;를 할당해야 하는데, Fragment 축약형 &lt;b&gt;&amp;lt;&amp;gt; &amp;lt;/&amp;gt;&lt;/b&gt; 을 썼을 경우 key를 할당하지 못합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우에는 정식 문법 &lt;b&gt;&amp;lt;React.Fragment&amp;gt; &amp;lt;/React.Fragment&amp;gt;&lt;/b&gt; 를 사용하거나, &lt;b&gt;&amp;lt;div&amp;gt; &amp;lt;/div&amp;gt;&lt;/b&gt; 태그를 사용하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;key&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770698153037&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import React from &quot;react&quot;;

export default function HeliosTower() {
    const floors = ['100층', '99층', '앨리베이터', '2층', '1층', '아랫마을 입구'];
    return (
        &amp;lt;&amp;gt;
            &amp;lt;h1&amp;gt;헬리오스 탑&amp;lt;/h1&amp;gt;
            {floors.map((floor) =&amp;gt; (
                &amp;lt;React.Fragment key={floor}&amp;gt;
                    &amp;lt;p&amp;gt;{floor}&amp;lt;/p&amp;gt;
                    &amp;lt;button&amp;gt;이동버튼&amp;lt;/button&amp;gt;
                &amp;lt;/React.Fragment&amp;gt;
            ))}
        &amp;lt;/&amp;gt;
    )
}&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;b&gt;&amp;lt;&lt;span style=&quot;color: #ef5369;&quot;&gt;React.Fragment&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #953b34;&quot;&gt;key&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;{floor}&lt;/span&gt;&lt;/span&gt;&amp;gt;&amp;nbsp;&lt;/b&gt; 이 부분을 보시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;축약형 태그 대신,&lt;b&gt; React.Fragment&lt;/b&gt; 정식 태그를 사용하여 각각의 요소에 임시로 &lt;b&gt;floor&lt;/b&gt; 값을 키로 넣어주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1994&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAsnbi/dJMcaaRLveu/jaY6FkfziHeztIT2LJfdv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAsnbi/dJMcaaRLveu/jaY6FkfziHeztIT2LJfdv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAsnbi/dJMcaaRLveu/jaY6FkfziHeztIT2LJfdv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAsnbi%2FdJMcaaRLveu%2FjaY6FkfziHeztIT2LJfdv0%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;1994&quot; height=&quot;1034&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1994&quot; data-origin-height=&quot;1034&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 에러 메세지가 나오지 않습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;&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;Fragment는&amp;nbsp;여러&amp;nbsp;요소를&amp;nbsp;하나로&amp;nbsp;묶어야&amp;nbsp;할&amp;nbsp;때,&lt;br /&gt;DOM에&amp;nbsp;불필요한&amp;nbsp;태그를&amp;nbsp;추가하지&amp;nbsp;않기&amp;nbsp;위한&amp;nbsp;도구입니다.&lt;br /&gt;&lt;br /&gt;Fragment에는&amp;nbsp;기본&amp;nbsp;문법과&amp;nbsp;축약&amp;nbsp;문법이&amp;nbsp;존재합니다.&lt;br /&gt;&lt;br /&gt;단순히&amp;nbsp;구조를&amp;nbsp;정리하는&amp;nbsp;용도라면&amp;nbsp;Fragment를,&lt;br /&gt;레이아웃이나&amp;nbsp;스타일의&amp;nbsp;기준이&amp;nbsp;필요하다면&lt;br /&gt;의미&amp;nbsp;있는&amp;nbsp;컨테이너&amp;nbsp;요소를&amp;nbsp;사용하는&amp;nbsp;것이&amp;nbsp;좋습니다.&lt;br /&gt;&lt;br /&gt;다만&amp;nbsp;key를&amp;nbsp;사용해야&amp;nbsp;하는&amp;nbsp;경우에는&lt;br /&gt;축약형&amp;nbsp;대신&amp;nbsp;정식&amp;nbsp;Fragment&amp;nbsp;문법이나&lt;br /&gt;다른&amp;nbsp;컨테이너&amp;nbsp;요소를&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;i&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;✨ 프론트엔드 경험치 10xp 를 얻었습니다.&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;✨&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;</description>
      <category> &amp;zwj;♀️ 프론트엔드 전직퀘스트/React &amp;amp; TypeScript</category>
      <category>React.Fragment</category>
      <category>리액트</category>
      <author>Orra.o</author>
      <guid isPermaLink="true">https://songeyes.tistory.com/5</guid>
      <comments>https://songeyes.tistory.com/5#entry5comment</comments>
      <pubDate>Tue, 10 Feb 2026 13:56:27 +0900</pubDate>
    </item>
    <item>
      <title>스코프 마을의 비밀 파헤치기 (var, let, const)</title>
      <link>https://songeyes.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;* 본 내용은 자바스크립트 딥다이브 13장, 15장을 학습한 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스코프마을의비밀.png&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;356&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8gIEP/dJMcagxAUvi/INOjyo8CQ3UefmKtoKhs6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8gIEP/dJMcagxAUvi/INOjyo8CQ3UefmKtoKhs6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8gIEP/dJMcagxAUvi/INOjyo8CQ3UefmKtoKhs6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8gIEP%2FdJMcagxAUvi%2FINOjyo8CQ3UefmKtoKhs6K%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;800&quot; height=&quot;289&quot; data-filename=&quot;스코프마을의비밀.png&quot; data-origin-width=&quot;985&quot; data-origin-height=&quot;356&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 style=&quot;text-align: center;&quot; 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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;브루스 박사가 정리해 놓은 문서를 읽어보면서&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;var 키워드에 어떤 문제가 있고, 새로운 키워드 let과 const가 문제를 어떻게 해결해주는지 살펴봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;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;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;  스코프와 스코프 체인  &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;스코프&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;는 곧 &lt;b&gt;'유효범위'&lt;/b&gt;입니다.&amp;nbsp;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 알아야 할 것은&lt;/span&gt; &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;'함수 스코프와' '블록 스코프'&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt; 입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이를 풀어서 생각하면 &lt;b&gt;함수 범위&lt;/b&gt; 그리고 &lt;b&gt;블록 범위&lt;/b&gt;가 되겠네요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770101163567&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function funcScope() {
  console.log('함수 스코프입니다.');
}

funcScope();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;uarr;&amp;nbsp; 위 코드는 &lt;b&gt;블록&amp;nbsp;{ }&lt;/b&gt; 이 &lt;b&gt;함수&lt;/b&gt;로 감싸져 있습니다. 즉 이는 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;함수 스코프&lt;/b&gt;&lt;/span&gt;입니다.&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770101224024&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    var myPostion = &quot;빨간포션&quot;;
}

if (true) {
    var monster = &quot;주황버섯&quot;;
    console.log(monster);
}

for (var i = 0; i &amp;lt; 3; i++) {
    console.log(&quot;현재 몬스터 번호:&quot;, i);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;uarr;&amp;nbsp; 그 밖의 함수로 감싸져 있지 않은 다른 모든 &lt;b&gt;블록 { }&lt;/b&gt; 으로 감싸져 있는 경우, 이는&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;블록 스코프&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;예를 들어 &lt;b&gt;if 문, for 문, while 문, try/catch 문 &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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;함수 스코프&lt;/b&gt;든, &lt;b&gt;블록 스코프&lt;/b&gt;든 스코프는 자신만의 지역을 만듭니다. 이를&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;지역 스코프&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&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;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;어느 지역에도 속하지 않는 코드 바깥쪽의 스코프는&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;전역 스코프&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;라고 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&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;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;바로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;변수를 참조할 수 있는 유효범위가 지역 스코프 내로 한정되기 때문&lt;/span&gt;&lt;/b&gt;입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; 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;pre id=&quot;code_1770103214929&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var a = &quot;global a&quot;;
var b = &quot;global b&quot;;

function outer() {
    var c = &quot;outer's local c&quot;;
    
    function inner() {
    	var d = &quot;inner's local d&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;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;변수 a&lt;/b&gt;, &lt;b&gt;b&lt;/b&gt;는 전역 스코프를 갖고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;변수 c&lt;/b&gt;는 outer 함수 스코프&lt;i&gt;(지역 스코프)&lt;/i&gt;를 갖고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;변수 d&lt;/b&gt;는 inner 함수 스코프&lt;i&gt;(지역 스코프)&lt;/i&gt;를 갖습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한, 위 코드에서는 현재 outer 함수 내에 inner 함수가 중첩되어 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;여기서 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;스코프 체인&lt;/b&gt;&lt;/span&gt;이라는 개념을 짚고 넘어갑시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;지역 스코프가 중첩될 때는 계층적으로 구조를 갖는데요, 쉽게 말해 여기서 &lt;b&gt;outer&lt;/b&gt; 함수는&lt;b&gt; inner&lt;/b&gt; 함수의 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;상위 스코프&lt;/b&gt;&lt;/span&gt;라고 합니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그리고 &lt;b&gt;outer 함수의 상위 스코프는 전역 스코프&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;&lt;span style=&quot;color: #333333;&quot;&gt;중요한 점은, &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;변수를 참조할 때 자바스크립트 엔진이&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;span style=&quot;color: #ef5369;&quot;&gt;스코프 체인&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;을 통해&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;상위 스코프 방향으로 이동&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하면서 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;변수를 찾는다는 것이에요. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그럼&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;inner&lt;/b&gt; 스코프 안에서 변수 &lt;b&gt;c&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;978&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HeeJt/dJMcafMgmjl/BBrzvNEmwKIBKJcqYjC7K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HeeJt/dJMcafMgmjl/BBrzvNEmwKIBKJcqYjC7K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HeeJt/dJMcafMgmjl/BBrzvNEmwKIBKJcqYjC7K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHeeJt%2FdJMcafMgmjl%2FBBrzvNEmwKIBKJcqYjC7K0%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;1546&quot; height=&quot;978&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1546&quot; data-origin-height=&quot;978&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;span style=&quot;color: #ef5369;&quot;&gt; 올라갈 수밖에 없는 구조&lt;/span&gt;&lt;/b&gt;예요....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;&lt;b&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; outer&lt;/b&gt; 스코프 안의&lt;b&gt; c&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp; 지역 스코프와 렉시컬 환경&lt;/span&gt;&amp;nbsp; &lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;지역 스코프가 중요한 이유,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;바로 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;변수를 참조할 수 있는 유효범위가 지역 스코프 내로 한정되기 때문&lt;/span&gt;&lt;/b&gt;이었죠?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예시를 더 살펴봅시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;다음 코드에서 각각 어떤 몬스터가 출력될까요?&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770104150780&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x = 'global monster';

function myFunc() {
    var x = 'local monster';
    console.log(x); // ① 어떤 몬스터가 출력될까요?
}

myFunc();

console.log(x); // ② 어떤 몬스터가 출력될까요?&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&lt;b&gt;&lt;i&gt;console.log(x)&lt;/i&gt;&lt;/b&gt;를 맞딱뜨렸을 때, &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;자바스크립트 엔진은 &lt;b&gt;두 개의 변수 x 중 어느 x를 참조해야 할 것인지&lt;/b&gt;를 결정하게 되는데요, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;이를 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;식별자 결정&lt;/b&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;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&lt;b&gt;자바스크립트 엔진&lt;/b&gt;이 식별자 결정을 할 때면, &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&lt;i&gt;현재 코드가 어디서 실행되며, 주변에 어떤 코드가 있는지 &lt;/i&gt;&lt;i&gt;...&lt;/i&gt;를 파악하는데요, 이를 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;렉시컬 환경&lt;/b&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;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;즉, 위 예제에서 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;렉시컬 환경&lt;/span&gt;&lt;/b&gt;에 따라 &lt;b&gt;&lt;i&gt;myFunc()&lt;/i&gt;&lt;/b&gt; 함수 내부에서 선언된 &lt;b&gt;x 변수&lt;/b&gt;는 &lt;b&gt;&lt;i&gt;myFunc()&lt;/i&gt;&lt;/b&gt; 함수 내부에서만 참조할 수 있고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&lt;i&gt;&lt;b&gt;myFunc()&lt;/b&gt;&lt;/i&gt; 함수 외부에서는 참조할 수 없습니다. 따라서&amp;nbsp;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #006dd7; text-align: center;&quot;&gt;①번 콘솔에서는 local monster가 출력됩니다.&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;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;그럼 외부에서는 &lt;i&gt;&lt;b&gt;myFunc()&lt;/b&gt;&lt;/i&gt; 함수 안의 &lt;b&gt;x 변수&lt;/b&gt;를 참조할 수 없으니 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #006dd7; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;②&lt;/span&gt;번 콘솔에서는 전역에 선언된 x 변수인 global monster가 출력되겠군요!&amp;nbsp;&lt;/span&gt;&lt;/span&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;그렇지만 &lt;b&gt;같은 스코프 내에서는 절대 같은 변수 이름을 사용하면 안되겠지요?&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;s&gt;평행세계엔 또 다른 내가 있을수도 있겠지만 같은 세계에서는 도플갱어를 마주치면 죽잖아요..&lt;/s&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;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;오류&lt;/span&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;pre id=&quot;code_1770105766145&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function myFunc() {
    var x = 1;
    var x = 2;
    console.log(x); // 멀쩡하게 2 출력!
}
myFunc();&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;아하, 이것이 &lt;b&gt;var 변수의 문제점&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;좋아요, var 변수의 문제점을 정리해 봅시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &amp;nbsp; var 키워드로 선언한 변수의 문제점  &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;우선 방금 발견한 첫번째 문제점은&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&quot;var 키워드로 선언한 변수는 중복 선언이 가능하다&quot; &lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;입니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이때 나중에 선언한 변수로 인해, 이전 선언된 변수의 값이 변경되는 부작용이 발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770106694346&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var x = 1;
var x = 100;

console.log(x); // 100 출력&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;아까 함수 스코프와 블록 스코프 모두 지역 스코프이기 때문에 &lt;span style=&quot;color: #333333;&quot;&gt;변수를 참조할 수 있는 유효범위가 지역 스코프 내로 한정된다고 했죠?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770106867497&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var monster = '주황버섯';

if (true) {
    var monster = '초록버섯';
    console.log(monster); // 초록버섯 (오케이)
}

console.log(monster); // 초록버섯 (오잉???)&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;b&gt;if문&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;그럼 마지막 줄 콘솔에서 &lt;b&gt;monster&lt;/b&gt;를 출력했을 때&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;if문&lt;/b&gt; 안에서의 &lt;b&gt;monster 변수&lt;/b&gt;를 참조할 수가 없을텐데 말이죠  &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;지역 스코프 안의&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;초록버섯&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이 아니라&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;전역 스코프의&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;주황버섯&lt;/span&gt;&lt;/b&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;아하, 이것이 두번째 문제점이군요. var은 함수 레벨의 스코프는 잘 먹히지만, 블록 레벨의 스코프는 먹히지 않아요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;아무래도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;말썽꾸러기 var 키워드는 함수로 묶어진 지역 스코프인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;function myFunc ( ) { ... }&lt;/i&gt;&lt;/b&gt;&amp;nbsp; &amp;rarr; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;이러한 형태&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;두번째 문제점 정리 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&quot;var 키워드로 선언한 변수는 오직 함수 스코프만을 지역 스코프로 인정한다.&quot;&lt;/span&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;우리에게는 1. 중복 선언이 되지 않으면서 2. 모든 지역 스코프에서 얌전히 가둬둘 수 있는 새로운 변수가 필요해요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브루스 박사님이 새롭게 연구한 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;let, const 변수&lt;/b&gt;&lt;/span&gt;가 이를 해결해줄거에요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; &amp;nbsp; let, const 키워드로 var 키워드의 문제를 해결하자!  &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정말 문제가 해결이 되는지&lt;b&gt; let&lt;/b&gt; 키워드로 중복 선언을 해봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1770108347831&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let monster = &quot;주황버섯&quot;
let monster = &quot;초록버섯&quot; //   SyntaxError: Identifier 'monster' has already been declared&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;b&gt;var&lt;/b&gt; 키워드로 중복선언했을 때는 에러가 나지 않고 새롭게 덮어씌워졌었는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;let&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;var&lt;/b&gt; 키워드의 문제도 &lt;b&gt;let&lt;/b&gt; 키워드가 해결하는지 한번 테스트 해봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1770108466636&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let monster = '주황버섯';

{
    let monster = '초록버섯';
    let postion = '빨간물약';
}

console.log(monster); // 주황버섯
console.log(postion); //   ReferenceError: postion is not defined&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;b&gt; let&lt;/b&gt; 키워드로 선언된 변수는 블록 레벨 스코프가 잘 먹히는군요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전역에서 코드 블록 내의 &lt;b&gt;postion&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;b&gt;const&lt;/b&gt; 키워드가 있었죠. 그럼&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt; let 키워드와 const 키워드의 차이&lt;/span&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;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt; 선언&lt;/b&gt;&lt;/span&gt;과 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;초기화&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;의&lt;/span&gt;&amp;nbsp;&lt;/span&gt;개념을 간단하게 알아둡시다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽게 말해 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;선언&lt;/b&gt;&lt;/span&gt;은 변수를 등록하는 것, &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;초기화&lt;/span&gt;&lt;/b&gt;는 변수에 값을 할당하는 것입니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770193460612&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 선언
let monster;

// 초기화
monster = '주황버섯'

// 한번에 선언과 초기화하기
let monster = '주황버섯'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쉽죠? 선언과 초기화는 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&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;&lt;span style=&quot;color: #7e98b1;&quot;&gt;⬇️ 자세한 내용은 변수 호이스팅 글에서 다뤄볼게요!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #7e98b1;&quot;&gt;&amp;lt;아직 안씀&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;nbsp; let 키워드와 const 키워드의 차이를 알아보자!  &lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 각각의 키워드로 변수를 선언해 봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1770192913328&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var monster;
let postion;
const skill; //  SyntaxError: Missing initializer in const declaration&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;오잉! const 키워드에서만 에러가 납니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770193991214&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const skill = '여제의축복';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;선언과 동시에 초기화&lt;/b&gt;&lt;/span&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;&lt;span style=&quot;color: #ef5369;&quot;&gt;&amp;nbsp;1. const 키워드로 선언한 변수는 반드시 선언과 동시에 초기화해야 한다.&lt;/span&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;저는 &lt;span style=&quot;color: #409d00;&quot;&gt;여제의축복&lt;/span&gt;에서 &lt;span style=&quot;color: #409d00;&quot;&gt;스피드듀얼샷&lt;/span&gt;으로 바꿀래요.&lt;/p&gt;
&lt;pre id=&quot;code_1770194547850&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const skill = '여제의축복';
skill = '스피드듀얼샷'; //  TypeError: Assignment to constant variable.&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;그렇군요. &lt;b&gt;const&lt;/b&gt; 키워드로 선언한 변수는&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt; 재할당&lt;/span&gt;&lt;/b&gt;을 할 수 없어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;var&lt;/b&gt; 키워드, &lt;b&gt;let&lt;/b&gt; 키워드는 재할당이 가능하지만, &lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;const&lt;/span&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;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;2. const 키워드로 선언한 변수는 재할당이 금지된다.&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;&lt;span style=&quot;color: #333333;&quot;&gt;그렇지만 재할당이 안될 뿐, 원래 선언된 변수가 &lt;b&gt;값을 변경할 수 있는 값&lt;/b&gt;이라면 (객체같이)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;재할당 없이 접근하여 값을 변경할 수 있어요.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1770195166158&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const monster = {
    name: '주황버섯',
    level: 8,
    damage: 42
};

monster.damage = 100;&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;위 예제 코드의 경우, 몬스터의 damage가 42 &amp;rarr; 100으로 잘 바뀐답니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇지만 몬스터 변수에 &lt;b&gt;새로운 객체를 할당했다면 &lt;span style=&quot;color: #ef5369;&quot;&gt;에러&lt;/span&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt; &amp;nbsp; 자바스크립트는 렉시컬 스코프를 따른다!&amp;nbsp;  &lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 짚고 넘어갈 개념은 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;렉시컬 스코프(정적 스코프)&lt;/b&gt;&lt;/span&gt;예요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 코드를 한번 살펴봅시다.&lt;/p&gt;
&lt;pre id=&quot;code_1770203271045&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let monster = '주황버섯';

const myFuncOne = () =&amp;gt; {
    let monster = '초록버섯';
    myFuncTwo();
}

const myFuncTwo = () =&amp;gt; {
    console.log(monster);
}

myFuncOne(); // 초록버섯일까요 주황버섯일까요&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;b&gt; myFuncOne&lt;/b&gt; 안에서 &lt;b&gt;myFuncTwo&lt;/b&gt; 함수를 호출하고 있어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼&amp;nbsp;&lt;b&gt;myFuncOne&lt;/b&gt; 함수 호출 시에(마지막줄 코드 참고) &lt;b&gt;myFuncTwo&lt;/b&gt; 함수가 실행되고, 변수 monster의 할당된 값을 출력해야 합니다.&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;myFuncTwo&lt;/b&gt; 함수의 상위 스코프는&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;myFuncOne 함수 스코프&lt;/b&gt;&lt;/span&gt;일까요 아니면 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;전역 스코프&lt;/span&gt;&lt;/b&gt;일까요?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상위 스코프가 myFuncOne 함수 스코프라면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;초록버섯&lt;/span&gt;을,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상위 스코프가 전역 스코프라면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;주황버섯&lt;/span&gt;을 출력할거에요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이때, 두 가지의 결정 방법이 있어요.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;1. 함수 호출 위치에 따라 결정한다면?&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;--&amp;gt; myFuncOne 안에서 호출했으니 상위 스코프는 myFuncOne이겠네요.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 방식을 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;동적 스코프&lt;/span&gt;&lt;/b&gt;라고 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;함수가 호출되는 시점에 동적으로 상위 스코프를 결정합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. 함수 정의 위치에 따라 결정한다면?&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;--&amp;gt; myFuncTwo 함수는 전역에 정의되어 있으니 상위 스코프는 전역이겠네요.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째 방식은 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;렉시컬 스코프&lt;/span&gt;&lt;/b&gt; 또는 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;정적 스코프&lt;/span&gt;&lt;/b&gt;라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수 정의가 평가되는 시점에 이미 상위 스코프가 결정됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 방법 중, &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;자바스크립트는 렉시컬 스코프를 따릅니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&amp;nbsp; &lt;b&gt;함수의 호출 위치가 아닌!!!&amp;nbsp; &lt;span style=&quot;color: #ef5369;&quot;&gt;함수를 어디서 정의했는지&lt;/span&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;함수가 정의될 때 생성된 함수 객체는 자신의 상위 스코프를 기억해 두고, 함수가 호출될 때 그 상위 스코프를 참조하는 것이죠.&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;.&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;마무리를 해볼까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 스코프와 스코프 체인이 어떻게 동작하는지 알아보았고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중복 선언이 된다든지, 함수 스코프만 지역 스코프로 인정하는 var 키워드의 문제점을 파악했어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이 문제점을 해결하기 위한 새로운 키워드 let과 const의 차이까지 알아보았어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 자바스크립트가 렉시컬 스코프를 따른다는 것까지 알았네요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;휴.. 이렇게 브루스 박사님의 부탁을 무사히 마친거 같네요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;✨ 프론트엔드 경험치 30xp 를 얻었습니다.&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;✨&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category> &amp;zwj;♀️ 프론트엔드 전직퀘스트/자바스크립트 딥다이브</category>
      <category>렉시컬스코프</category>
      <category>스코프</category>
      <category>스코프체인</category>
      <category>자바스크립트</category>
      <author>Orra.o</author>
      <guid isPermaLink="true">https://songeyes.tistory.com/4</guid>
      <comments>https://songeyes.tistory.com/4#entry4comment</comments>
      <pubDate>Wed, 4 Feb 2026 22:11:42 +0900</pubDate>
    </item>
    <item>
      <title>독서는 마음의 양식</title>
      <link>https://songeyes.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;고작 만원, 이만원 남짓으로 다른 세계를 경험할 수 있다는 것은 얼마나 값싼 값어치인가.&lt;br /&gt;올해도 더욱 다양한 세계들에, 그리고 깊게 빠질 수 있는 내가 되길 바라며.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘 개발 티스토리를 만들었는데, 소소하게 독서 카테고리도 하나 만들었다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;읽은 책들 한권 한권을 짧게라도 여기에 기록해 두어야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 빠졌던 세계를 기록하는 것은 모험가로서의 본분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;개발을 하더라도, 혹은 어떠한 다른 일을 하더라도&lt;span&gt;&amp;nbsp;독서는 중요하다고 생각한다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;독서는 인간 영혼의 깊이를 만들어 준다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;아무리 자신의 분야에서 똑똑해도, 영혼의 깊이가 얕다면 사람들을 깊이 끌어당기기 어렵다.&lt;/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;나는 똑똑한 사람보다도 깊이 있는 사람이 되고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>  차원의 도서관/오라의 2026 독서기록</category>
      <author>Orra.o</author>
      <guid isPermaLink="true">https://songeyes.tistory.com/3</guid>
      <comments>https://songeyes.tistory.com/3#entry3comment</comments>
      <pubDate>Mon, 2 Feb 2026 00:15:05 +0900</pubDate>
    </item>
  </channel>
</rss>