<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>study</title>
    <link>https://fullstack-eun.tistory.com/</link>
    <description>수업진행에  필요한 참고 자료 입니다. ( 보조교재 ) 
** 백문이 불여일타! ** </description>
    <language>ko</language>
    <pubDate>Tue, 7 Jul 2026 13:02:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>변쌤 (❁&amp;acute;◡`❁)</managingEditor>
    <image>
      <title>study</title>
      <url>https://tistory1.daumcdn.net/tistory/6368366/attach/e868b105013742efae8e3ac99253c1a2</url>
      <link>https://fullstack-eun.tistory.com</link>
    </image>
    <item>
      <title>[Photoshop] 01 - 화면구조, 설정, 새파일, 열기, 저장, 확장자</title>
      <link>https://fullstack-eun.tistory.com/217</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #c0d1e7;&quot;&gt;화면구조,&amp;nbsp;설정,&amp;nbsp;새파일,&amp;nbsp;열기,&amp;nbsp;저장,&amp;nbsp;확장자&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1. 새파일만들기&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Create new&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKUcvz/dJMcaax2pgJ/wkT6HToxrwef9hWwcNwQZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKUcvz/dJMcaax2pgJ/wkT6HToxrwef9hWwcNwQZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKUcvz/dJMcaax2pgJ/wkT6HToxrwef9hWwcNwQZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKUcvz%2FdJMcaax2pgJ%2FwkT6HToxrwef9hWwcNwQZk%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;934&quot; height=&quot;807&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F3SkE/dJMcaaY45oh/pl7bTwWIenbI0eUzftt0I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F3SkE/dJMcaaY45oh/pl7bTwWIenbI0eUzftt0I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F3SkE/dJMcaaY45oh/pl7bTwWIenbI0eUzftt0I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF3SkE%2FdJMcaaY45oh%2Fpl7bTwWIenbI0eUzftt0I0%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;1029&quot; height=&quot;684&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;684&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;01 = Width / Height (가로 / 세로, 문서 크기) - 단위는 &lt;b&gt;Pixels(픽셀)&lt;/b&gt; 사용 &lt;/b&gt;&lt;br /&gt;&lt;b&gt;02 = Resolution (해상도)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;03 = Color Mode (색상 모드)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;04 = Background Contents (배경 )&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-end=&quot;60&quot; data-start=&quot;38&quot; data-section-id=&quot;sipybn&quot; data-ke-size=&quot;size26&quot;&gt;1. 인쇄물/웹용 이미지에 적합한 해상도 ( &lt;b&gt;Resolution )&lt;/b&gt;&lt;/h2&gt;
&lt;p data-end=&quot;140&quot; data-start=&quot;62&quot; data-ke-size=&quot;size16&quot;&gt;해상도는 이미지의 &lt;b&gt;선명한 정도&lt;/b&gt;를 뜻&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;246&quot; data-start=&quot;142&quot; data-ke-size=&quot;size16&quot;&gt;해상도의 단위인 &lt;b&gt;Pixels/Inch&lt;/b&gt;를 보면 알 수 있듯이, &lt;b&gt;1인치당 픽셀의 개수&lt;/b&gt;로 해상도를 설정&amp;nbsp;&lt;br /&gt;일반적으로 해상도가 높을수록 이미지가 더 선명하게 보임&lt;/p&gt;
&lt;h3 data-end=&quot;259&quot; data-start=&quot;248&quot; data-section-id=&quot;1uo07v&quot; data-ke-size=&quot;size23&quot;&gt;구분별 해상도&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;구분인쇄물웹
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;395&quot; data-start=&quot;261&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;395&quot; data-start=&quot;292&quot;&gt;
&lt;tr data-end=&quot;356&quot; data-start=&quot;292&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;297&quot; data-start=&quot;292&quot;&gt;단위&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;325&quot; data-start=&quot;297&quot;&gt;&lt;b&gt;dpi&lt;/b&gt; (dots per inch)&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;356&quot; data-start=&quot;325&quot;&gt;&lt;b&gt;ppi&lt;/b&gt; (pixels per inch)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;395&quot; data-start=&quot;357&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;366&quot; data-start=&quot;357&quot;&gt;적정 해상도&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;379&quot; data-start=&quot;366&quot;&gt;&lt;b&gt;300dpi&lt;/b&gt;&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;395&quot; data-start=&quot;379&quot;&gt;&lt;b&gt;72~96ppi&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;650&quot; data-start=&quot;573&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;459&quot; data-start=&quot;404&quot; data-section-id=&quot;h3ili1&quot;&gt;&lt;b&gt;인쇄물 작업&lt;/b&gt;은 사진이 깨져 보이지 않도록 &lt;b&gt;300dpi&lt;/b&gt;로 설정하는 것이 적절&lt;/li&gt;
&lt;li data-end=&quot;561&quot; data-start=&quot;460&quot; data-section-id=&quot;11ia057&quot;&gt;반면 &lt;b&gt;웹용 이미지 작업&lt;/b&gt;은 해상도를 너무 높게 설정하면 파일 용량이 커져 웹사이트 로딩 속도가 느려질 수 있으므로, &lt;b&gt;72~96ppi&lt;/b&gt; 정도로 설정하는 것이 적절&lt;/li&gt;
&lt;li data-end=&quot;590&quot; data-start=&quot;573&quot; data-section-id=&quot;n27gm4&quot;&gt;&lt;b&gt;인쇄물:&lt;/b&gt; 300dpi&lt;/li&gt;
&lt;li data-end=&quot;608&quot; data-start=&quot;591&quot; data-section-id=&quot;16492wm&quot;&gt;&lt;b&gt;웹:&lt;/b&gt; 72~96ppi&lt;/li&gt;
&lt;li data-end=&quot;650&quot; data-start=&quot;609&quot; data-section-id=&quot;ufcvwo&quot;&gt;&lt;b&gt;웹에서는 해상도보다 이미지의 픽셀 크기와 용량 관리가 더 중요함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;495&quot; data-start=&quot;470&quot; data-section-id=&quot;1lvswrd&quot; data-ke-size=&quot;size23&quot;&gt;2. Color mode (색상 모드)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;630&quot; data-start=&quot;496&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;564&quot; data-start=&quot;496&quot; data-section-id=&quot;h3m1hr&quot;&gt;&lt;b&gt;RGB&lt;/b&gt; : 빛으로 표현하는 색상 체계&lt;br /&gt;&amp;rarr; 모니터, 모바일, 웹사이트, 영상 등 &lt;b&gt;디지털 화면용 작업&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CMYK&lt;/b&gt; : 잉크로 표현하는 색상 체계&lt;br /&gt;&amp;rarr; 전단지, 포스터, 명함, 브로슈어 등 &lt;b&gt;인쇄용 작업&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;769&quot; data-start=&quot;707&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;666&quot; data-start=&quot;645&quot; data-section-id=&quot;1hcdhnx&quot;&gt;&lt;b&gt;화면에서 보는 것 = RGB&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;690&quot; data-start=&quot;667&quot; data-section-id=&quot;1huk2da&quot;&gt;&lt;b&gt;종이에 출력하는 것 = CMYK&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;738&quot; data-start=&quot;707&quot; data-section-id=&quot;19iizu9&quot;&gt;&lt;b&gt;화면용 이미지 = RGB + 72~96 ppi&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;769&quot; data-start=&quot;739&quot; data-section-id=&quot;19bnrn9&quot;&gt;&lt;b&gt;인쇄용 이미지 = CMYK + 300 dpi&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;# 단위설정 &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[ Edit ] - [ Preferences ]&amp;nbsp; :&amp;nbsp; &lt;/b&gt;&lt;b&gt;Ctrl + K&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1OBw7/dJMcad2w0Y1/heDFeXeD9VMnECkcSSk8rK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1OBw7/dJMcad2w0Y1/heDFeXeD9VMnECkcSSk8rK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1OBw7/dJMcad2w0Y1/heDFeXeD9VMnECkcSSk8rK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1OBw7%2FdJMcad2w0Y1%2FheDFeXeD9VMnECkcSSk8rK%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;441&quot; height=&quot;405&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;405&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;Rulers/Type : pixels&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BJ9S8/dJMcad2w0W7/foBzWZSikicJkbcbGMVSR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BJ9S8/dJMcad2w0W7/foBzWZSikicJkbcbGMVSR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BJ9S8/dJMcad2w0W7/foBzWZSikicJkbcbGMVSR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBJ9S8%2FdJMcad2w0W7%2FfoBzWZSikicJkbcbGMVSR0%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;1015&quot; height=&quot;597&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;597&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;[Units &amp;amp; Rulers]를 선택하고 Rulers(눈금자)는 [Pixels], Type(글자 크기)는 [Points]&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 탭 파일열기 해제&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0DsYf/dJMcab4LnfW/SjrFncok2QWQWbOUp1N3d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0DsYf/dJMcab4LnfW/SjrFncok2QWQWbOUp1N3d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0DsYf/dJMcab4LnfW/SjrFncok2QWQWbOUp1N3d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0DsYf%2FdJMcab4LnfW%2FSjrFncok2QWQWbOUp1N3d0%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;443&quot; height=&quot;419&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pmUmg/dJMcahYdfq2/1hkqTIgYojS2PDEMEqGOx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pmUmg/dJMcahYdfq2/1hkqTIgYojS2PDEMEqGOx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pmUmg/dJMcahYdfq2/1hkqTIgYojS2PDEMEqGOx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpmUmg%2FdJMcahYdfq2%2F1hkqTIgYojS2PDEMEqGOx1%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;1017&quot; height=&quot;598&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[Workspace] 에서 [Open Documents as Taps](탭으로 문서 열기)를 체크 해제&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 폰트 한글로 보이게 설정&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKOXmn/dJMcaaSlGRE/dEyOdAx3kwvQqexs4ON3F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKOXmn/dJMcaaSlGRE/dEyOdAx3kwvQqexs4ON3F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKOXmn/dJMcaaSlGRE/dEyOdAx3kwvQqexs4ON3F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKOXmn%2FdJMcaaSlGRE%2FdEyOdAx3kwvQqexs4ON3F0%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;434&quot; height=&quot;392&quot; data-origin-width=&quot;434&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;611&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vexZw/dJMcag55jd2/Qp1UwlwWauJtsZYvgk6ub0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vexZw/dJMcag55jd2/Qp1UwlwWauJtsZYvgk6ub0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vexZw/dJMcag55jd2/Qp1UwlwWauJtsZYvgk6ub0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvexZw%2FdJMcag55jd2%2FQp1UwlwWauJtsZYvgk6ub0%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;1017&quot; height=&quot;611&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;611&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;글꼴&amp;nbsp; 한글로 보이도록 [Type]에서 [Show Font Names in English](글꼴 이름을 영어로 표시)를 체크 해제&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2. 저장 : Ctrl + S&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FW6so/dJMcah40YN2/LqBs6euVNzEBb7HmYhRff1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FW6so/dJMcah40YN2/LqBs6euVNzEBb7HmYhRff1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FW6so/dJMcah40YN2/LqBs6euVNzEBb7HmYhRff1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFW6so%2FdJMcah40YN2%2FLqBs6euVNzEBb7HmYhRff1%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;506&quot; height=&quot;319&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;3. 확장자&amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;# 이미지 파일 형식 확장자&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.7907%;&quot;&gt;&lt;b&gt; 형식 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%;&quot;&gt;확장자&lt;/td&gt;
&lt;td style=&quot;width: 63.1395%;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;주요 용도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.7907%;&quot;&gt;&lt;b&gt;PSD&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%;&quot;&gt;&lt;b&gt;.psd&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 63.1395%;&quot;&gt;포토샵 작업 내용을 그대로 보존하는 원본 파일. 레이어 등 모든 편집 정보 유지&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;포토샵에서 수정&amp;middot;편집할 때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.7907%;&quot;&gt;&lt;b&gt;JPEG&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%;&quot;&gt;&lt;b&gt;.jpg&lt;/b&gt; / .jpeg&lt;/td&gt;
&lt;td style=&quot;width: 63.1395%;&quot;&gt;가장 대중적인 사진 형식. 압축률 조절 가능하나 압축할수록 화질 저하&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;사진 저장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.7907%;&quot;&gt;&lt;b&gt;PNG&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%;&quot;&gt;&lt;b&gt;.png&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 63.1395%;&quot;&gt;투명 배경 지원. 색상&amp;middot;투명&amp;middot;반투명 처리 가능. 용량 가볍고 웹 최적화&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;웹 이미지, 로고, 아이콘&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.7907%;&quot;&gt;&lt;b&gt;GIF&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%;&quot;&gt;.gif&lt;/td&gt;
&lt;td style=&quot;width: 63.1395%;&quot;&gt;짧은 애니메이션 제작 가능. 투명 지원하나 반투명 불가. 256색 제한으로 화질 한계&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;움직이는 이미지(움짤)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.7907%;&quot;&gt;&lt;b&gt;WebP&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10.4651%;&quot;&gt;.webp&lt;/td&gt;
&lt;td style=&quot;width: 63.1395%;&quot;&gt;구글이 개발한 차세대 이미지 형식. JPEG보다 화질은 유지하면서 용량은 더 작음. 투명&amp;middot;애니메이션 모두 지원&lt;/td&gt;
&lt;td style=&quot;width: 18.3721%;&quot;&gt;웹 페이지 로딩 속도 최적화&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;편집 보존 &amp;rarr; &lt;b&gt;.psd&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;사진 저장 &amp;rarr; &lt;b&gt;.jpg&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;투명 배경 &amp;rarr; &lt;b&gt;.png&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;움짤 &amp;rarr; &lt;b&gt;.gif&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;웹 최적화 (고화질 + 작은 용량) &amp;rarr; &lt;b&gt;.webp&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. 열기 : Ctrl + O&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eBNceH/dJMcaiJzepV/CBkeCa9pHJq7aIKfQd5ax1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eBNceH/dJMcaiJzepV/CBkeCa9pHJq7aIKfQd5ax1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eBNceH/dJMcaiJzepV/CBkeCa9pHJq7aIKfQd5ax1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeBNceH%2FdJMcaiJzepV%2FCBkeCa9pHJq7aIKfQd5ax1%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;379&quot; height=&quot;166&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;166&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;5. 단축키&lt;/b&gt;&amp;nbsp;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 273px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;단축키 (Windows)&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;단축키 (Mac)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;확대&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + [ + ]&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + [ + ]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;축소&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + [ - ]&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + [ - ]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;100% 보기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + 1&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + 1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;화면에 맞게&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + 0&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;이동 도구 선택&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;V&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;손 도구 (임시 이동)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Space + 드래그(마우스왼쪽)&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Space + 드래그 &lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;(마우스왼쪽)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;복사&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + C&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;붙여넣기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + V&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;제자리 붙여넣기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + Shift + V&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + Shift + V&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;잘라내기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + X&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + X&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;레이어 복사 붙여넣기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + J&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + J&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;&lt;b&gt;잘라서 새 레이어로&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Ctrl + Shift + J&lt;/td&gt;
&lt;td style=&quot;height: 21px;&quot;&gt;Cmd + Shift + J&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;돋보기 도구 없이도 Alt + 스크롤(Win) / Option + 스크롤(Mac)로 빠르게 확대/축소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ct1Au/dJMcaibNlMC/3gtfmJuURgezbCuOP3s1iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ct1Au/dJMcaibNlMC/3gtfmJuURgezbCuOP3s1iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ct1Au/dJMcaibNlMC/3gtfmJuURgezbCuOP3s1iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCt1Au%2FdJMcaibNlMC%2F3gtfmJuURgezbCuOP3s1iK%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;358&quot; height=&quot;243&quot; data-origin-width=&quot;358&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;228&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bP2pgE/dJMcabjryd0/TA0M1ctFSupMBofphQtwd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bP2pgE/dJMcabjryd0/TA0M1ctFSupMBofphQtwd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bP2pgE/dJMcabjryd0/TA0M1ctFSupMBofphQtwd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbP2pgE%2FdJMcabjryd0%2FTA0M1ctFSupMBofphQtwd1%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;395&quot; height=&quot;228&quot; data-origin-width=&quot;395&quot; data-origin-height=&quot;228&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Photoshop</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/217</guid>
      <comments>https://fullstack-eun.tistory.com/217#entry217comment</comments>
      <pubDate>Thu, 2 Apr 2026 17:00:07 +0900</pubDate>
    </item>
    <item>
      <title>[ CSS3 ] BEM(Block&amp;ndash;Element&amp;ndash;Modifier)</title>
      <link>https://fullstack-eun.tistory.com/216</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; BEM이란? &lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;BEM&lt;/b&gt;은 CSS 클래스 네이밍 규칙으로, UI를 &lt;b&gt;독립적인 블록 단위로 분리&lt;/b&gt;하고 &lt;b&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;194&quot; data-start=&quot;181&quot;&gt;&lt;b&gt;유지보수성 &amp;uarr;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;209&quot; data-start=&quot;195&quot;&gt;&lt;b&gt;스타일 충돌 &amp;darr;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;227&quot; data-start=&quot;210&quot;&gt;&lt;b&gt;컴포넌트 재사용성 &amp;uarr;&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;245&quot; data-start=&quot;228&quot;&gt;대규모 프로젝트에 특히 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;이 요소가 어떤 컴포넌트인지 / 그 안의 어떤 부분인지 / 어떤 상태인지&lt;/b&gt;를 이름에 드러내는 방법&lt;br /&gt;BEM은 &lt;b&gt;Block, Element, Modifier&lt;/b&gt;의 약자이고, UI를 독립적인 블록 단위로 나눠 재사용성과 유지보수성을 높이려는 네이밍 규칙입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;2360&quot; data-start=&quot;2325&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;클래스 이름만 봐도 구조와 상태가 보이게 만드는 규칙&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2435&quot; data-start=&quot;2362&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2384&quot; data-start=&quot;2362&quot;&gt;구조: Block__Element&lt;/li&gt;
&lt;li data-end=&quot;2406&quot; data-start=&quot;2385&quot;&gt;상태/변형: --Modifier&lt;/li&gt;
&lt;li data-end=&quot;2435&quot; data-start=&quot;2407&quot;&gt;CSS를 &lt;b&gt;설계 관점&lt;/b&gt;에서 작성하게 만들어줌&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;296&quot; data-start=&quot;235&quot; data-section-id=&quot;1uwvncr&quot;&gt;&lt;b&gt;Block&lt;/b&gt;: 독립적으로 의미 있는 컴포넌트&lt;br /&gt;예: card, button, menu&lt;/li&gt;
&lt;li data-end=&quot;363&quot; data-start=&quot;297&quot; data-section-id=&quot;120yekr&quot;&gt;&lt;b&gt;Element&lt;/b&gt;: 블록 안에 속한 구성 요소&lt;br /&gt;예: card__title, card__button&lt;/li&gt;
&lt;li data-end=&quot;444&quot; data-start=&quot;364&quot; data-section-id=&quot;ec0a05&quot;&gt;&lt;b&gt;Modifier&lt;/b&gt;: 블록이나 요소의 상태/변형&lt;br /&gt;예: card--featured, card__button--disabled&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;block, block__element, block--modifier, block__element--modifier 형태를 씁니다.&lt;br /&gt;그리고 modifier는 보통 &lt;b&gt;기본 클래스와 함께&lt;/b&gt; 붙입니다. 예를 들어 class=&quot;card card--featured&quot;처럼 씁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://getbem.com/naming/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://getbem.com/naming/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770656136941&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;BEM &amp;mdash; Naming&quot; data-og-description=&quot;Modifier names may consist of lowecase Latin letters, digits, dashes and underscores. CSS class is formed as block&amp;rsquo;s or element&amp;rsquo;s name plus two dashes: .block--mod or .block__elem--mod and .block--color-black with .block--color-red. Spaces in complicat&quot; data-og-host=&quot;getbem.com&quot; data-og-source-url=&quot;https://getbem.com/naming/&quot; data-og-url=&quot;https://getbem.com/naming/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://getbem.com/naming/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://getbem.com/naming/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;BEM &amp;mdash; Naming&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Modifier names may consist of lowecase Latin letters, digits, dashes and underscores. CSS class is formed as block&amp;rsquo;s or element&amp;rsquo;s name plus two dashes: .block--mod or .block__elem--mod and .block--color-black with .block--color-red. Spaces in complicat&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;getbem.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://en.bem.info/methodology/quick-start/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://en.bem.info/methodology/quick-start/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770657150562&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;Quick start / Methodology / BEM&quot; data-og-description=&quot;Quick start&quot; data-og-host=&quot;en.bem.info&quot; data-og-source-url=&quot;https://en.bem.info/methodology/quick-start/&quot; data-og-url=&quot;https://en.bem.info/methodology/quick-start/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FazYn/dJMb8SXtBiM/tkDrl09xvcuE30fR86Lvh1/img.png?width=128&amp;amp;height=95&amp;amp;face=0_0_128_95&quot;&gt;&lt;a href=&quot;https://en.bem.info/methodology/quick-start/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://en.bem.info/methodology/quick-start/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FazYn/dJMb8SXtBiM/tkDrl09xvcuE30fR86Lvh1/img.png?width=128&amp;amp;height=95&amp;amp;face=0_0_128_95');&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;Quick start / Methodology / BEM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Quick start&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;en.bem.info&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; BEM 구성 요소&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;306&quot; data-start=&quot;295&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Block&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;327&quot; data-start=&quot;307&quot; data-ke-size=&quot;size18&quot;&gt;독립적인 UI 컴포넌트의 최상위 단위&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;359&quot; data-start=&quot;329&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;342&quot; data-start=&quot;329&quot;&gt;단독으로 의미를 가짐&lt;/li&gt;
&lt;li data-end=&quot;359&quot; data-start=&quot;343&quot;&gt;다른 블록에 의존하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1770656239881&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;header
card
button
modal


.card {}
.button {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;449&quot; data-start=&quot;436&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Element&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;469&quot; data-start=&quot;450&quot; data-ke-size=&quot;size18&quot;&gt;Block 내부에 포함된 구성 요소&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;525&quot; data-start=&quot;471&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;490&quot; data-start=&quot;471&quot;&gt;반드시 &lt;b&gt;Block에 종속&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;504&quot; data-start=&quot;491&quot;&gt;혼자서는 의미가 없음&lt;/li&gt;
&lt;li data-end=&quot;525&quot; data-start=&quot;505&quot;&gt;__ (언더스코어 2개) 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1770656283321&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;block__element


.card__title {}
.card__image {}
.card__description {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;잘못된 예&lt;/p&gt;
&lt;pre id=&quot;code_1770656311342&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.title {}        /* 어떤 블록의 title인지 알 수 없음 */&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;705&quot; data-start=&quot;691&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. Modifier&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;740&quot; data-start=&quot;706&quot; data-ke-size=&quot;size18&quot;&gt;Block 또는 Element의 &lt;b&gt;상태 / 변형 / 버전&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;782&quot; data-start=&quot;742&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;760&quot; data-start=&quot;742&quot;&gt;-- (하이픈 2개) 사용&lt;/li&gt;
&lt;li data-end=&quot;782&quot; data-start=&quot;761&quot;&gt;크기, 색상, 활성화 상태 등 표현&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1770656331353&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;block--modifier
block__element--modifier&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1770656354160&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.button--primary {}
.button--disabled {}

.card__title--large {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;상태로 분리&lt;/p&gt;
&lt;pre id=&quot;code_1770656564162&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.card__title--error {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;역할 기반 네이밍&lt;/p&gt;
&lt;pre id=&quot;code_1770656543102&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.card__title {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;기본문법 규칙&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;✔ 항상 &lt;b&gt;class 하나 = 역할 하나&lt;/b&gt;&lt;br /&gt;✔ 태그 이름, 위치, 스타일 의미를 클래스에 섞지 않음&lt;/p&gt;
&lt;pre id=&quot;code_1770656374194&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.block {}
.block__element {}
.block--modifier {}
.block__element--modifier {}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;HTML&lt;/p&gt;
&lt;pre id=&quot;code_1770656415773&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;card card--featured&quot;&amp;gt;
  &amp;lt;img class=&quot;card__image&quot; src=&quot;img.jpg&quot; alt=&quot;&quot; /&amp;gt;
  &amp;lt;h3 class=&quot;card__title&quot;&amp;gt;Title&amp;lt;/h3&amp;gt;
  &amp;lt;p class=&quot;card__desc&quot;&amp;gt;Description text&amp;lt;/p&amp;gt;
  &amp;lt;button class=&quot;card__button card__button--primary&quot;&amp;gt;
    Read more
  &amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;CSS&lt;/p&gt;
&lt;pre id=&quot;code_1770656441395&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.card {
  padding: 20px;
  border: 1px solid #ddd;
}

.card--featured {
  border-color: gold;
}

.card__image {
  width: 100%;
}

.card__title {
  font-size: 1.2rem;
}

.card__desc {
  color: #666;
}

.card__button {
  padding: 8px 12px;
}

.card__button--primary {
  background: black;
  color: white;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예)&lt;/p&gt;
&lt;pre id=&quot;code_1773891407651&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;card card--featured&quot;&amp;gt;
  &amp;lt;h2 class=&quot;card__title&quot;&amp;gt;상품 제목&amp;lt;/h2&amp;gt;
  &amp;lt;p class=&quot;card__desc&quot;&amp;gt;상품 설명입니다.&amp;lt;/p&amp;gt;
  &amp;lt;button class=&quot;card__button card__button--disabled&quot; disabled&amp;gt;
    구매하기
  &amp;lt;/button&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;SCSS&lt;/p&gt;
&lt;pre id=&quot;code_1773891425153&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.card {
  padding: 16px;
  border: 1px solid #ddd;
}

.card--featured {
  border-width: 2px;
}

.card__title {
  font-size: 20px;
  margin-bottom: 8px;
}

.card__desc {
  font-size: 14px;
  margin-bottom: 12px;
}

.card__button {
  padding: 8px 12px;
}

.card__button--disabled {
  opacity: 0.5;
  cursor: not-allowed;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1255&quot; data-start=&quot;1234&quot; data-section-id=&quot;ton966&quot;&gt;card &amp;rarr; 카드 컴포넌트 자체&lt;/li&gt;
&lt;li data-end=&quot;1282&quot; data-start=&quot;1256&quot; data-section-id=&quot;1f5jrs3&quot;&gt;card__title &amp;rarr; 카드 안의 제목&lt;/li&gt;
&lt;li data-end=&quot;1310&quot; data-start=&quot;1283&quot; data-section-id=&quot;ria61k&quot;&gt;card__button &amp;rarr; 카드 안의 버튼&lt;/li&gt;
&lt;li data-end=&quot;1341&quot; data-start=&quot;1311&quot; data-section-id=&quot;1pmwtde&quot;&gt;card--featured &amp;rarr; 강조된 카드 상태&lt;/li&gt;
&lt;li data-end=&quot;1382&quot; data-start=&quot;1342&quot; data-section-id=&quot;1fqrs0c&quot;&gt;card__button--disabled &amp;rarr; 비활성화된 버튼 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1773892651696&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.block {
  &amp;amp;__element {}
  &amp;amp;--modifier {}
}&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;pre id=&quot;code_1773892663354&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.button {
  &amp;amp;__icon {}
  &amp;amp;--primary {}
  &amp;amp;--large {}
}&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이름만 보고 구조와 역할이 바로 보여야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예&lt;/p&gt;
&lt;pre id=&quot;code_1770656635534&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;con con1&quot;&amp;gt;
                    &amp;lt;div class=&quot;inner&quot;&amp;gt;
                        &amp;lt;ul&amp;gt;
                            &amp;lt;li&amp;gt;
                                &amp;lt;a href=&quot;#&quot;&amp;gt;
                                    &amp;lt;div&amp;gt;&amp;lt;img src=&quot;images/cat-women.jpg&quot; alt=&quot;Women&quot; /&amp;gt;&amp;lt;/div&amp;gt;
                                    &amp;lt;strong&amp;gt;Women&amp;lt;/strong&amp;gt;
                                &amp;lt;/a&amp;gt;
                            &amp;lt;/li&amp;gt;
                            &amp;lt;li&amp;gt;
                                &amp;lt;a href=&quot;#&quot;&amp;gt;
                                    &amp;lt;div&amp;gt;&amp;lt;img src=&quot;images/cat-men.jpg&quot; alt=&quot;Men&quot; /&amp;gt;&amp;lt;/div&amp;gt;
                                    &amp;lt;strong&amp;gt;Men&amp;lt;/strong&amp;gt;
                                &amp;lt;/a&amp;gt;
                            &amp;lt;/li&amp;gt;
                            &amp;lt;li&amp;gt;
                                &amp;lt;a href=&quot;#&quot;&amp;gt;
                                    &amp;lt;div&amp;gt;&amp;lt;img src=&quot;images/cat-acc.jpg&quot; alt=&quot;Accessories&quot; /&amp;gt;&amp;lt;/div&amp;gt;
                                    &amp;lt;strong&amp;gt;Accessories&amp;lt;/strong&amp;gt;
                                &amp;lt;/a&amp;gt;
                            &amp;lt;/li&amp;gt;
                        &amp;lt;/ul&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;변경&lt;/p&gt;
&lt;pre id=&quot;code_1770656654577&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;section class=&quot;category&quot;&amp;gt;
    &amp;lt;div class=&quot;category__inner&quot;&amp;gt;
        &amp;lt;ul class=&quot;category__list&quot;&amp;gt;
            &amp;lt;li class=&quot;category__item&quot;&amp;gt;
                &amp;lt;a href=&quot;#&quot; class=&quot;category__link&quot;&amp;gt;
                    &amp;lt;div class=&quot;category__image&quot;&amp;gt;
                        &amp;lt;img src=&quot;images/cat-women.jpg&quot; alt=&quot;Women&quot; /&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;strong class=&quot;category__title&quot;&amp;gt;Women&amp;lt;/strong&amp;gt;
                &amp;lt;/a&amp;gt;
            &amp;lt;/li&amp;gt;

            &amp;lt;li class=&quot;category__item&quot;&amp;gt;
                &amp;lt;a href=&quot;#&quot; class=&quot;category__link&quot;&amp;gt;
                    &amp;lt;div class=&quot;category__image&quot;&amp;gt;
                        &amp;lt;img src=&quot;images/cat-men.jpg&quot; alt=&quot;Men&quot; /&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;strong class=&quot;category__title&quot;&amp;gt;Men&amp;lt;/strong&amp;gt;
                &amp;lt;/a&amp;gt;
            &amp;lt;/li&amp;gt;

            &amp;lt;li class=&quot;category__item&quot;&amp;gt;
                &amp;lt;a href=&quot;#&quot; class=&quot;category__link&quot;&amp;gt;
                    &amp;lt;div class=&quot;category__image&quot;&amp;gt;
                        &amp;lt;img src=&quot;images/cat-acc.jpg&quot; alt=&quot;Accessories&quot; /&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;strong class=&quot;category__title&quot;&amp;gt;Accessories&amp;lt;/strong&amp;gt;
                &amp;lt;/a&amp;gt;
            &amp;lt;/li&amp;gt;
        &amp;lt;/ul&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/section&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CSS3</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/216</guid>
      <comments>https://fullstack-eun.tistory.com/216#entry216comment</comments>
      <pubDate>Tue, 10 Feb 2026 02:10:03 +0900</pubDate>
    </item>
    <item>
      <title>[ React ] 카카오 로그인</title>
      <link>https://fullstack-eun.tistory.com/175</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;카카오&amp;nbsp;로그인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://developers.kakao.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.kakao.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741520949622&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Kakao Developers&quot; data-og-description=&quot;카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.&quot; data-og-host=&quot;developers.kakao.com&quot; data-og-source-url=&quot;https://developers.kakao.com/&quot; data-og-url=&quot;https://developers.kakao.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b7whEe/hyYqbVvJU1/56aFtDrZT9nZ4ddG2QKCX0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/bNqxNl/hyYm1GOdeF/wQuaT6COl3dkyndWdol4z1/img.png?width=3840&amp;amp;height=1000&amp;amp;face=0_0_3840_1000,https://scrap.kakaocdn.net/dn/diix8J/hyYmVfw5oo/i9Ey3IKShJ1qSUO8Wmg2tk/img.png?width=3840&amp;amp;height=1000&amp;amp;face=0_0_3840_1000&quot;&gt;&lt;a href=&quot;https://developers.kakao.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.kakao.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b7whEe/hyYqbVvJU1/56aFtDrZT9nZ4ddG2QKCX0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/bNqxNl/hyYm1GOdeF/wQuaT6COl3dkyndWdol4z1/img.png?width=3840&amp;amp;height=1000&amp;amp;face=0_0_3840_1000,https://scrap.kakaocdn.net/dn/diix8J/hyYmVfw5oo/i9Ey3IKShJ1qSUO8Wmg2tk/img.png?width=3840&amp;amp;height=1000&amp;amp;face=0_0_3840_1000');&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;Kakao Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.kakao.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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;1. 카카오 로그인 &amp;gt; 문서보&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZesXe/btsMD4WCrF6/DUKaNk4R9jkRizHVV2hmeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZesXe/btsMD4WCrF6/DUKaNk4R9jkRizHVV2hmeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZesXe/btsMD4WCrF6/DUKaNk4R9jkRizHVV2hmeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZesXe%2FbtsMD4WCrF6%2FDUKaNk4R9jkRizHVV2hmeK%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;256&quot; height=&quot;289&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. 내 애플리케이션 &amp;gt; 애플리케이션 추가&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk0eqs/btsMDONfofP/3lw9EoaEKcYm7gzdhaUkiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk0eqs/btsMDONfofP/3lw9EoaEKcYm7gzdhaUkiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk0eqs/btsMDONfofP/3lw9EoaEKcYm7gzdhaUkiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk0eqs%2FbtsMDONfofP%2F3lw9EoaEKcYm7gzdhaUkiK%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;687&quot; height=&quot;329&quot; data-origin-width=&quot;687&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3. 앱키&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tRsbB/btsMEVYVbTF/PnGWwxX7fVuYEv4eHyziL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tRsbB/btsMEVYVbTF/PnGWwxX7fVuYEv4eHyziL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tRsbB/btsMEVYVbTF/PnGWwxX7fVuYEv4eHyziL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtRsbB%2FbtsMEVYVbTF%2FPnGWwxX7fVuYEv4eHyziL0%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;1172&quot; height=&quot;421&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 플랫폼 &amp;gt; web 플랫폼 등록&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ydLKr/btsMF2WZj9x/aRK0UDmKaWX1iBVSBBZVP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ydLKr/btsMF2WZj9x/aRK0UDmKaWX1iBVSBBZVP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ydLKr/btsMF2WZj9x/aRK0UDmKaWX1iBVSBBZVP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FydLKr%2FbtsMF2WZj9x%2FaRK0UDmKaWX1iBVSBBZVP0%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;537&quot; height=&quot;492&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFlcmM/btsMHosojhm/cfZrTjbq0Dbikc8ruen2AK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFlcmM/btsMHosojhm/cfZrTjbq0Dbikc8ruen2AK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFlcmM/btsMHosojhm/cfZrTjbq0Dbikc8ruen2AK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFlcmM%2FbtsMHosojhm%2FcfZrTjbq0Dbikc8ruen2AK%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;890&quot; height=&quot;196&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqUnrs/btsMEDK9L4t/1Iaxo47WlTAe7GkguDmJ4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqUnrs/btsMEDK9L4t/1Iaxo47WlTAe7GkguDmJ4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqUnrs/btsMEDK9L4t/1Iaxo47WlTAe7GkguDmJ4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqUnrs%2FbtsMEDK9L4t%2F1Iaxo47WlTAe7GkguDmJ4k%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;717&quot; height=&quot;517&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u2xPY/btsMFECZkDD/4SsWfX7gRY16KQjwtpugnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u2xPY/btsMFECZkDD/4SsWfX7gRY16KQjwtpugnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u2xPY/btsMFECZkDD/4SsWfX7gRY16KQjwtpugnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu2xPY%2FbtsMFECZkDD%2F4SsWfX7gRY16KQjwtpugnK%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;927&quot; height=&quot;243&quot; data-origin-width=&quot;927&quot; data-origin-height=&quot;243&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6. : .env&lt;/p&gt;
&lt;pre id=&quot;code_1741625604029&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;VITE_KAKAO_JAVASCRIPT_KEY=????
VITE_KAKAO_REST_API_KEY=????
VITE_KAKAO_REDIRECT_URI=https://xxx.vercel.app/oauth/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7. config.js&lt;/p&gt;
&lt;pre id=&quot;code_1741625658623&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const isLocal = window.location.hostname === 'localhost';
console.log(isLocal);
export const KAKAO_REDIRECT_URI = isLocal
    ? 'http://localhost:5173/oauth/'
    : 'https://xxx.vercel.app/oauth/';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>React</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/175</guid>
      <comments>https://fullstack-eun.tistory.com/175#entry175comment</comments>
      <pubDate>Thu, 27 Feb 2025 05:26:28 +0900</pubDate>
    </item>
    <item>
      <title>[ React ] TMDB api , spinner</title>
      <link>https://fullstack-eun.tistory.com/174</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;TMDB API&lt;/span&gt;&lt;/b&gt;&lt;/h2&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;1. 가입&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.themoviedb.org/?language=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.themoviedb.org/?language=ko&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738597462478&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;The Movie Database (TMDB)&quot; data-og-description=&quot;찾으시는 영화나 TV 프로그램이 없나요? 로그인 하셔서 직접 만들어주세요.&quot; data-og-host=&quot;www.themoviedb.org&quot; data-og-source-url=&quot;https://www.themoviedb.org/?language=ko&quot; data-og-url=&quot;https://www.themoviedb.org/?language=ko&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.themoviedb.org/?language=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.themoviedb.org/?language=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;The Movie Database (TMDB)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;찾으시는 영화나 TV 프로그램이 없나요? 로그인 하셔서 직접 만들어주세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.themoviedb.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;2. More &amp;gt; API&amp;nbsp; 또는&amp;nbsp; 프로필 &amp;gt; 설정 &amp;gt; API&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;252&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAhjKo/btsL6pMo5tC/R1vjxzgdtrsa9xMpkJSsxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAhjKo/btsL6pMo5tC/R1vjxzgdtrsa9xMpkJSsxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAhjKo/btsL6pMo5tC/R1vjxzgdtrsa9xMpkJSsxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAhjKo%2FbtsL6pMo5tC%2FR1vjxzgdtrsa9xMpkJSsxK%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;524&quot; height=&quot;252&quot; data-origin-width=&quot;524&quot; data-origin-height=&quot;252&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;3.&amp;nbsp; API&amp;nbsp; &amp;gt;&amp;nbsp; 생성 &amp;gt; Developer&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xgjv4/btsL5qZz6DN/lmhKoLlzy9hS7j4FbQEjd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xgjv4/btsL5qZz6DN/lmhKoLlzy9hS7j4FbQEjd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xgjv4/btsL5qZz6DN/lmhKoLlzy9hS7j4FbQEjd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXgjv4%2FbtsL5qZz6DN%2FlmhKoLlzy9hS7j4FbQEjd0%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;886&quot; height=&quot;538&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;4. 사용약관 스크롤&amp;nbsp; 맨아래 동의&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W3C6v/btsL4zQHD5B/2ZdeoSEkMQMkuxQBKpfD7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W3C6v/btsL4zQHD5B/2ZdeoSEkMQMkuxQBKpfD7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W3C6v/btsL4zQHD5B/2ZdeoSEkMQMkuxQBKpfD7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW3C6v%2FbtsL4zQHD5B%2F2ZdeoSEkMQMkuxQBKpfD7K%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;1049&quot; height=&quot;468&quot; data-origin-width=&quot;1049&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;5.&amp;nbsp; 작성&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;391&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BwNU1/btsL5Z8uDie/WD2EDMotyWsBlME40abHIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BwNU1/btsL5Z8uDie/WD2EDMotyWsBlME40abHIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BwNU1/btsL5Z8uDie/WD2EDMotyWsBlME40abHIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBwNU1%2FbtsL5Z8uDie%2FWD2EDMotyWsBlME40abHIk%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;1066&quot; height=&quot;391&quot; data-origin-width=&quot;1066&quot; data-origin-height=&quot;391&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R2NPy/btsL4YWPFjy/qsIJP41BWE62a6b5whxDh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R2NPy/btsL4YWPFjy/qsIJP41BWE62a6b5whxDh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R2NPy/btsL4YWPFjy/qsIJP41BWE62a6b5whxDh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR2NPy%2FbtsL4YWPFjy%2FqsIJP41BWE62a6b5whxDh0%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;1068&quot; height=&quot;245&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;6. API 페이지 이동 ( API, 액세스토큰&amp;nbsp; 사용 )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NQuA0/btsL4O7Kj1x/LfiwGGDnhFoGd7zDdDHdE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NQuA0/btsL4O7Kj1x/LfiwGGDnhFoGd7zDdDHdE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NQuA0/btsL4O7Kj1x/LfiwGGDnhFoGd7zDdDHdE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNQuA0%2FbtsL4O7Kj1x%2FLfiwGGDnhFoGd7zDdDHdE1%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;1023&quot; height=&quot;598&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;7.&amp;nbsp; More &amp;gt; API&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZPhLT/btsL6zVzmNm/MvK1THyQ8owK1FOIuxevBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZPhLT/btsL6zVzmNm/MvK1THyQ8owK1FOIuxevBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZPhLT/btsL6zVzmNm/MvK1THyQ8owK1FOIuxevBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZPhLT%2FbtsL6zVzmNm%2FMvK1THyQ8owK1FOIuxevBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;389&quot; height=&quot;239&quot; data-origin-width=&quot;389&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;8.&amp;nbsp; API Reference&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2AO7s/btsL5t9Xp9M/qZuYFZSQFznaYudwVVVi00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2AO7s/btsL5t9Xp9M/qZuYFZSQFznaYudwVVVi00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2AO7s/btsL5t9Xp9M/qZuYFZSQFznaYudwVVVi00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2AO7s%2FbtsL5t9Xp9M%2FqZuYFZSQFznaYudwVVVi00%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;994&quot; height=&quot;337&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;9. Movie List &amp;gt; Now Playing &amp;gt; Try it &amp;gt; JSON 생성&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BadSG/btsL6R2KaBQ/9qQ42JLSY9jgKW7PL7k7p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BadSG/btsL6R2KaBQ/9qQ42JLSY9jgKW7PL7k7p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BadSG/btsL6R2KaBQ/9qQ42JLSY9jgKW7PL7k7p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBadSG%2FbtsL6R2KaBQ%2F9qQ42JLSY9jgKW7PL7k7p1%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;1259&quot; height=&quot;574&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;10.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biaZkm/btsL4Mh0DZo/XTynbnhbfVP1hEf2GpbojK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biaZkm/btsL4Mh0DZo/XTynbnhbfVP1hEf2GpbojK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biaZkm/btsL4Mh0DZo/XTynbnhbfVP1hEf2GpbojK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiaZkm%2FbtsL4Mh0DZo%2FXTynbnhbfVP1hEf2GpbojK%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;1214&quot; height=&quot;564&quot; data-origin-width=&quot;1214&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;11.&amp;nbsp; 이미지 기본 경로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://developer.themoviedb.org/docs/image-basics&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.themoviedb.org/docs/image-basics&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738600764031&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Basics&quot; data-og-description=&quot;How to build an image URL.&quot; data-og-host=&quot;developer.themoviedb.org&quot; data-og-source-url=&quot;https://developer.themoviedb.org/docs/image-basics&quot; data-og-url=&quot;https://developer.themoviedb.org/docs/image-basics&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.themoviedb.org/docs/image-basics&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.themoviedb.org/docs/image-basics&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Basics&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;How to build an image URL.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.themoviedb.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/thOGD/btsL5CyYfkL/QbKihh3AHSRTI4VKF3bzTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/thOGD/btsL5CyYfkL/QbKihh3AHSRTI4VKF3bzTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/thOGD/btsL5CyYfkL/QbKihh3AHSRTI4VKF3bzTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FthOGD%2FbtsL5CyYfkL%2FQbKihh3AHSRTI4VKF3bzTK%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;818&quot; height=&quot;103&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1738600851892&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &quot;backdrop_path&quot;: &quot;/zOpe0eHsq0A2NvNyBbtT6sj53qV.jpg&quot;,
 
 ///////////////////
 
 https://image.tmdb.org/t/p/w500/
 
 ////////////////////
 
&quot;https://image.tmdb.org/t/p/w500/zOpe0eHsq0A2NvNyBbtT6sj53qV.jpg&quot;,
  
  ------------------------------------
  https://image.tmdb.org/t/p/w500/ +  backdrop_path&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;12.&amp;nbsp; 현재 상영작 axios&lt;/p&gt;
&lt;pre id=&quot;code_1738604579417&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;https://api.themoviedb.org/3/movie/now_playing&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1738604600960&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import axios from 'axios';

const apiKey = 'YOUR_API_KEY';  // 본인의 TMDB API 키 입력

axios.get('https://api.themoviedb.org/3/movie/now_playing', {
  params: {
    api_key: apiKey,
    language: 'ko-KR',   // 결과를 한국어로 받기
    region: 'KR'         // 한국에서 상영 중인 영화 필터링
  }
})
.then(response =&amp;gt; {
  console.log(response.data.results);  // 현재 상영작 목록 출력
})
.catch(error =&amp;gt; {
  console.error('Error movies:', error);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;영화 장르 ID 목록&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;장르&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;액션&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;모험&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;애니메이션&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;코미디&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;범죄&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;다큐멘터리&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;드라마&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;가족&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;10751&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;판타지&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;14&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;역사&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;36&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;공포&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;음악&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;10402&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;미스터리&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;9648&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;로맨스&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;10749&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;SF (공상과학)&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;878&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;TV 영화&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;10770&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;스릴러&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;53&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;전쟁&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;10752&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 46.5116%;&quot;&gt;서부&lt;/td&gt;
&lt;td style=&quot;width: 53.3721%;&quot;&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; TV 프로그램 장르 ID&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;장르&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;액션 &amp;amp; 모험&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10759&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;애니메이션&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;코미디&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;범죄&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;80&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;다큐멘터리&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;드라마&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;18&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;가족&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10751&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;키즈&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10762&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;미스터리&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;9648&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;뉴스&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10763&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;리얼리티&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10764&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;SF &amp;amp; 판타지&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10765&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;토크쇼&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10767&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;스릴러&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10766&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;전쟁 &amp;amp; 정치&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;10768&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 47.907%;&quot;&gt;서부&lt;/td&gt;
&lt;td style=&quot;width: 51.9767%;&quot;&gt;37&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;API 파라미터 설명&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;파라미터&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;api_key&lt;/td&gt;
&lt;td&gt;TMDB API 키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;language=ko-KR&lt;/td&gt;
&lt;td&gt;한국어로 결과 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;region=KR&lt;/td&gt;
&lt;td&gt;&lt;b&gt;한국&lt;/b&gt;에서 상영 중인 영화만 필터링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;page=1&lt;/td&gt;
&lt;td&gt;페이지네이션 (결과가 많을 경우 페이지 이동)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예)&amp;nbsp; &lt;b&gt;discover 엔드포인트&lt;/b&gt;로 현재 상영 중이면서 액션 장르인 영화만 직접 요청.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; now_playing 엔드포인트&lt;/b&gt;로 현재 상영작을 가져온 후, 액션 장르(ID: 28)로 필터링.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;영화&lt;/p&gt;
&lt;pre id=&quot;code_1738604454249&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import axios from 'axios';

const apiKey = 'YOUR_API_KEY';  // 본인의 TMDB API 키 입력

//https://api.themoviedb.org/3/movie/now_playing
axios.get('https://api.themoviedb.org/3/discover/movie', {
  params: {
    api_key: apiKey,
    language: 'ko-KR',   // 한국어로 결과 받기
    with_genres: 28      // 액션 장르 ID
  }
})
.then(response =&amp;gt; {
  console.log(response.data.results);  // 액션 영화 목록 출력
})
.catch(error =&amp;gt; {
  console.error('Error movies:', error);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;tv&lt;/p&gt;
&lt;pre id=&quot;code_1738605403393&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import axios from 'axios';

const apiKey = 'YOUR_API_KEY';

axios.get('https://api.themoviedb.org/3/discover/tv', {
  params: {
    api_key: apiKey,
    language: 'ko-KR',
    with_genres: 18  // 드라마 장르 ID
  }
})
.then(response =&amp;gt; {
  console.log(response.data.results);  // 드라마 목록 출력
})
.catch(error =&amp;gt; {
  console.error('Error fetching drama TV shows:', error);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;코미디(35)&lt;/b&gt; + &lt;b&gt;로맨스(10749)&lt;/b&gt; 영화 가져오기&lt;/p&gt;
&lt;pre id=&quot;code_1738604532984&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;axios.get('https://api.themoviedb.org/3/discover/movie', {
  params: {
    api_key: apiKey,
    language: 'ko-KR',
    with_genres: '35,10749'  // 코미디 + 로맨스
  }
})
.then(response =&amp;gt; {
  console.log(response.data.results);  // 코미디 로맨스 영화 목록 출력
})
.catch(error =&amp;gt; {
  console.error('Error movies:', error);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;json 예시&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1738604910209&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[
  {
    &quot;title&quot;: &quot;존 윅 4&quot;,
    &quot;overview&quot;: &quot;존 윅의 마지막 복수극이 시작된다.&quot;,
    &quot;release_date&quot;: &quot;2024-01-20&quot;,
    &quot;genre_ids&quot;: [28, 53],  // 액션, 스릴러
    &quot;poster_path&quot;: &quot;/path_to_poster.jpg&quot;
  },
  {
    &quot;title&quot;: &quot;분노의 질주 10&quot;,
    &quot;overview&quot;: &quot;가족과 함께하는 스릴 넘치는 질주.&quot;,
    &quot;release_date&quot;: &quot;2024-01-05&quot;,
    &quot;genre_ids&quot;: [28, 80],  // 액션, 범죄
    &quot;poster_path&quot;: &quot;/path_to_poster2.jpg&quot;
  }
]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# Spinners&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.davidhu.io/react-spinners/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.davidhu.io/react-spinners/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737572311499&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;React Spinners&quot; data-og-description=&quot;yarn add react-spinners&quot; data-og-host=&quot;www.davidhu.io&quot; data-og-source-url=&quot;https://www.davidhu.io/react-spinners/&quot; data-og-url=&quot;https://www.davidhu.io/react-spinners/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.davidhu.io/react-spinners/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.davidhu.io/react-spinners/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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 Spinners&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;yarn add react-spinners&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.davidhu.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://www.davidhu.io/react-spinners/storybook/?path=/docs/barloader--docs&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.davidhu.io/react-spinners/storybook/?path=/docs/barloader--docs&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737572366529&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;@storybook/cli - Storybook&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.davidhu.io&quot; data-og-source-url=&quot;https://www.davidhu.io/react-spinners/storybook/?path=/docs/barloader--docs&quot; data-og-url=&quot;https://www.davidhu.io/react-spinners/storybook/?path=%2Fdocs%2Fbarloader--docs&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.davidhu.io/react-spinners/storybook/?path=/docs/barloader--docs&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.davidhu.io/react-spinners/storybook/?path=/docs/barloader--docs&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;@storybook/cli - Storybook&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.davidhu.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;예)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dW2LbX/btsLV3X1eGu/2B1uL7D71lMR6B6gSGY8bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dW2LbX/btsLV3X1eGu/2B1uL7D71lMR6B6gSGY8bK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dW2LbX/btsLV3X1eGu/2B1uL7D71lMR6B6gSGY8bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdW2LbX%2FbtsLV3X1eGu%2F2B1uL7D71lMR6B6gSGY8bK%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;1055&quot; height=&quot;485&quot; data-origin-width=&quot;1055&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1737572576051&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;PacmanLoader
  color=&quot;#ad5555&quot;
  speedMultiplier={1}
/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&lt;a href=&quot;https://mhnpd.github.io/react-loader-spinner/&quot;&gt;https://mhnpd.github.io/react-loader-spinner/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;figure id=&quot;og_1737572329530&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Hello from React Spinners | React Spinners&quot; data-og-description=&quot;Description will go into a meta tag in &amp;lt;head /&amp;gt;&quot; data-og-host=&quot;mhnpd.github.io&quot; data-og-source-url=&quot;https://mhnpd.github.io/react-loader-spinner/&quot; data-og-url=&quot;https://github.com/react-loader-spinner/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://mhnpd.github.io/react-loader-spinner/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mhnpd.github.io/react-loader-spinner/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Hello from React Spinners | React Spinners&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Description will go into a meta tag in &amp;lt;head /&amp;gt;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mhnpd.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>React</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/174</guid>
      <comments>https://fullstack-eun.tistory.com/174#entry174comment</comments>
      <pubDate>Thu, 19 Dec 2024 18:44:35 +0900</pubDate>
    </item>
    <item>
      <title>[React] react  배포</title>
      <link>https://fullstack-eun.tistory.com/173</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;vercel 배포&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;17&quot; data-start=&quot;0&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;vercel이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;204&quot; data-start=&quot;18&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Vercel&lt;/b&gt;은 &lt;b&gt;프론트엔드 개발자&lt;/b&gt;를 위한 &lt;b&gt;클라우드 플랫폼&lt;/b&gt;으로, 빠르고 간편하게 웹 애플리케이션을 배포할 수 있도록 도와주는 서비스입니다. &lt;b&gt;Next.js&lt;/b&gt;의 개발사이기도 하며, Next.js를 최적화하여 지원하지만, React, Vue, Svelte, Angular 등 다양한 프레임워크를 사용할 수 있습니다.&lt;/p&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;a href=&quot;https://vercel.com/&quot; data-end=&quot;835&quot; data-start=&quot;799&quot;&gt;Vercel 공식 사이트&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;공식 사이트에서 GitHub, GitLab, Bitbucket 계정으로 가입&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d9f1PF/btsOVcSi4gg/kkkR8hguz6pLA5C0TkrCU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d9f1PF/btsOVcSi4gg/kkkR8hguz6pLA5C0TkrCU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d9f1PF/btsOVcSi4gg/kkkR8hguz6pLA5C0TkrCU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd9f1PF%2FbtsOVcSi4gg%2FkkkR8hguz6pLA5C0TkrCU0%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;620&quot; height=&quot;383&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;vs 터미널에서&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;설치 - 1번만&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #f8f9fa; text-align: start;&quot;&gt;npm i -g vercel&lt;/span&gt; &lt;/b&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. &amp;nbsp;npm run build 또는 yarn build&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. vercel login&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;gt;&amp;gt; 로그인 선택&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;105&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dd1LWI/btsMn1qTZBw/qbIhDzpshF5l250LKbAhTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dd1LWI/btsMn1qTZBw/qbIhDzpshF5l250LKbAhTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dd1LWI/btsMn1qTZBw/qbIhDzpshF5l250LKbAhTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdd1LWI%2FbtsMn1qTZBw%2FqbIhDzpshF5l250LKbAhTk%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;321&quot; height=&quot;105&quot; data-origin-width=&quot;321&quot; data-origin-height=&quot;105&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;gt;&amp;gt; 이 메일로 로그인했을경우 이메일 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bug50J/btsMnq5Whzh/9s0l2gEqUlJ4m4NWKZHs8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bug50J/btsMnq5Whzh/9s0l2gEqUlJ4m4NWKZHs8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bug50J/btsMnq5Whzh/9s0l2gEqUlJ4m4NWKZHs8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbug50J%2FbtsMnq5Whzh%2F9s0l2gEqUlJ4m4NWKZHs8k%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;879&quot; height=&quot;54&quot; data-origin-width=&quot;879&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&amp;gt;&amp;gt; 이메일 &amp;gt; 코드 인증&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dE3xii/btsMnkdA6qK/HVkO531fMAopAxFK6LWiw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dE3xii/btsMnkdA6qK/HVkO531fMAopAxFK6LWiw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dE3xii/btsMnkdA6qK/HVkO531fMAopAxFK6LWiw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdE3xii%2FbtsMnkdA6qK%2FHVkO531fMAopAxFK6LWiw1%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;445&quot; height=&quot;50&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKJwic/btsMmlEhpVk/HUifcZNdnB9NEBJxQDw9g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKJwic/btsMmlEhpVk/HUifcZNdnB9NEBJxQDw9g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKJwic/btsMmlEhpVk/HUifcZNdnB9NEBJxQDw9g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKJwic%2FbtsMmlEhpVk%2FHUifcZNdnB9NEBJxQDw9g1%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;437&quot; height=&quot;162&quot; data-origin-width=&quot;437&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;이메일 인증 완료후&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;vercel 입력 &lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;? Set up and develop &amp;ldquo;c:\react\project0&amp;rdquo;? (Y/n)&amp;nbsp; ( 배포할것이 맞는지 확인 )&amp;nbsp; y&lt;br /&gt;? Which scope should contain your project? xxx projects =&amp;gt; 엔터&lt;br /&gt;? Link to existing project? (y/N) : N&amp;nbsp; 프로젝트에 연결할것인지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;What&amp;rsquo;s your project&amp;rsquo;s name?&amp;nbsp; 프로젝트 이름 ( 기본 폴더와 같은이름으로 자동생성 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;In which directory is your code located? ./ 위치 - 엔터&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;Want to modify these settings? 설정변경할것지 N&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;vercel 사이트 확인&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IuwWT/btsMnXPyUT3/EDQk9kKIsq7kwMUDSaNnK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IuwWT/btsMnXPyUT3/EDQk9kKIsq7kwMUDSaNnK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IuwWT/btsMnXPyUT3/EDQk9kKIsq7kwMUDSaNnK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIuwWT%2FbtsMnXPyUT3%2FEDQk9kKIsq7kwMUDSaNnK1%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;633&quot; height=&quot;60&quot; data-origin-width=&quot;633&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://fullstack-eun.tistory.com/133&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;github 설명&amp;nbsp;&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPkQjz/btsMmpmlwGX/MkY1ZFSjYNzt3ao7kp5QO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPkQjz/btsMmpmlwGX/MkY1ZFSjYNzt3ao7kp5QO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPkQjz/btsMmpmlwGX/MkY1ZFSjYNzt3ao7kp5QO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPkQjz%2FbtsMmpmlwGX%2FMkY1ZFSjYNzt3ao7kp5QO0%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;344&quot; height=&quot;176&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4jJrS/btsMmmJYJaQ/I4bTXd2tKK0RcIyr1bkwa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4jJrS/btsMmmJYJaQ/I4bTXd2tKK0RcIyr1bkwa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4jJrS/btsMmmJYJaQ/I4bTXd2tKK0RcIyr1bkwa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4jJrS%2FbtsMmmJYJaQ%2FI4bTXd2tKK0RcIyr1bkwa0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;632&quot; height=&quot;487&quot; data-origin-width=&quot;632&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;github에 올릴경우&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1 &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;BrowerRouter&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; 를 HashRouter 로 변경&lt;/p&gt;
&lt;p id=&quot;SE-7b105712-d6ff-43f5-82db-d4c088f48cf0&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. 빌드후 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b6c82d46-1f55-4a13-9776-d261de88c680&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; index.html =&amp;gt; ./ 상대경로 변경 -&amp;gt; 라이브서버 확인 가능&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5d14e553-781b-4686-b77f-efa3d14cdf85&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. 기존 작업에 -&amp;gt; dist 폴더 넣기 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c9d29e05-543e-473a-ad78-e43485426744&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4. 깃이그노 파일에 dist 삭제 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c7a5362a-39e1-4990-b10e-20a8b17898bd&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;5. 깃에 올리고 페이지 연결 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9c037c14-dc30-4988-90d4-6975284c44c7&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1739901288505&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { HashRouter  as Router }   from &quot;react-router-dom&quot;;
&amp;lt;&amp;gt;
     &amp;lt;Router&amp;gt;

     &amp;lt;/Router&amp;gt;
&amp;lt;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;25&quot; data-start=&quot;0&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;25&quot; data-start=&quot;0&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-end=&quot;25&quot; data-start=&quot;0&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드(Cloud)란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;170&quot; data-start=&quot;26&quot; data-ke-size=&quot;size16&quot;&gt;클라우드(Cloud)는 &lt;b&gt;인터넷을 통해 제공되는 컴퓨팅 서비스&lt;/b&gt;를 의미합니다.&lt;br /&gt;과거에는 소프트웨어와 데이터를 &lt;b&gt;로컬 컴퓨터(PC) 또는 서버에 직접 저장&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;h3 data-end=&quot;197&quot; data-start=&quot;177&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클라우드의 특징&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;375&quot; data-start=&quot;198&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;인터넷 기반 서비스&lt;/b&gt; &amp;rarr; 인터넷만 있으면 어디서든 접근 가능&lt;br /&gt;&lt;b&gt;유지보수 불필요&lt;/b&gt; &amp;rarr; 사용자는 인프라 관리 없이 서비스 이용 가능&lt;br /&gt;&lt;b&gt;확장성(Scalability)&lt;/b&gt; &amp;rarr; 사용량에 따라 자동으로 리소스 확장 가능&lt;br /&gt;&lt;b&gt;비용 절감&lt;/b&gt; &amp;rarr; 직접 서버를 운영하는 것보다 저렴하게 사용 가능&lt;/p&gt;
&lt;p data-end=&quot;375&quot; data-start=&quot;198&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;375&quot; data-start=&quot;198&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 클라우드 서비스&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;588&quot; data-start=&quot;283&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;클라우드&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;특징&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;385&quot; data-start=&quot;318&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt;Vercel&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;Next.js 및 React 최적화, 서버리스 API 지원, Git 연동 자동 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;442&quot; data-start=&quot;386&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt;Netlify&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;정적 사이트 호스팅 최적화, 서버리스 함수 제공, 간단한 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;511&quot; data-start=&quot;443&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt;GitHub Pages&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;React SPA 정적 배포 가능, GitHub에 연동하여 무료 사용 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;588&quot; data-start=&quot;512&quot;&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt;Firebase Hosting&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;Google 클라우드 기반, 빠른 정적 파일 배포 및 Firebase 백엔드 연동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt; AWS Amplify&lt;/b&gt; &lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;AWS 기반, 백엔드 및 정적 사이트 배포, 강력한 확장성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.7209%;&quot;&gt;&lt;b&gt; Cloudflare Pages &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.1628%;&quot;&gt;글로벌 CDN 최적화, 빠른 정적 사이트 배포&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-end=&quot;601&quot; data-start=&quot;590&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;735&quot; data-start=&quot;602&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;642&quot; data-start=&quot;602&quot;&gt;&lt;b&gt;Next.js + React 프로젝트&lt;/b&gt;: &lt;b&gt;Vercel&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;690&quot; data-start=&quot;643&quot;&gt;&lt;b&gt;React SPA 배포&lt;/b&gt;: &lt;b&gt;Netlify, GitHub Pages&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;735&quot; data-start=&quot;691&quot;&gt;&lt;b&gt;Firebase 연동 필요&lt;/b&gt;: &lt;b&gt;Firebase Hosting&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Error: Could not retrieve Project Settings. To link your Project, remove the .vercel directory and deploy again.&lt;/p&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;rm&amp;nbsp;-rf&amp;nbsp;.vercel&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.vercel 폴더 삭제&lt;/p&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;Vercel 다시 연결&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vercel&amp;nbsp;link&lt;/p&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;vercel&lt;/p&gt;</description>
      <category>React</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/173</guid>
      <comments>https://fullstack-eun.tistory.com/173#entry173comment</comments>
      <pubDate>Thu, 19 Dec 2024 18:23:25 +0900</pubDate>
    </item>
    <item>
      <title>[ CSS3 ] Grid 설명과 예</title>
      <link>https://fullstack-eun.tistory.com/172</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; Grid&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CSS Grid&lt;/b&gt;는 &lt;b&gt;웹 페이지의 레이아웃을 구성하기 위한 2차원 레이아웃 시스템&lt;/b&gt;입니다.&lt;br /&gt;기존의 float, flexbox 등이 1차원(가로 또는 세로) 정렬에 초점을 뒀다면,&lt;br /&gt;&lt;b&gt;CSS Grid는 가로(Row)와 세로(Column)를 동시에&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;size16&quot;&gt;특징 설명&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2차원 레이아웃&lt;/td&gt;
&lt;td&gt;행과 열 모두를 기반으로 배치 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;레이아웃 정의&lt;/td&gt;
&lt;td&gt;부모 요소에서 전체 레이아웃 정의 후 자식 요소 배치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;간결한 문법&lt;/td&gt;
&lt;td&gt;반복, 영역 지정 등 다양한 기능 제공&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;반응형 디자인&lt;/td&gt;
&lt;td&gt;미디어 쿼리와 함께 유연한 디자인 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;mdm&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/CSS/CSS_grid_layout&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;바로가기&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;w3shools&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;a href=&quot;https://www.w3schools.com/css/css_grid.asp&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;바로가기&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sjcJv/btsLiZhgTYa/lF6g7Wl923Rnza647tRDFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sjcJv/btsLiZhgTYa/lF6g7Wl923Rnza647tRDFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sjcJv/btsLiZhgTYa/lF6g7Wl923Rnza647tRDFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsjcJv%2FbtsLiZhgTYa%2FlF6g7Wl923Rnza647tRDFK%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;629&quot; height=&quot;780&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1367&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLXU5z/btsLjmi0NpV/j1NJimnbQfeKH0Mvhop3j1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLXU5z/btsLjmi0NpV/j1NJimnbQfeKH0Mvhop3j1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLXU5z/btsLjmi0NpV/j1NJimnbQfeKH0Mvhop3j1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLXU5z%2FbtsLjmi0NpV%2Fj1NJimnbQfeKH0Mvhop3j1%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;1367&quot; height=&quot;765&quot; data-origin-width=&quot;1367&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;grid_columns.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mycJU/btsPIdiftgx/cPGDIgjA362A11mskD1vek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mycJU/btsPIdiftgx/cPGDIgjA362A11mskD1vek/img.png&quot; data-alt=&quot;출처 : https://www.w3schools.com/css/css_grid_columns_rows.asp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mycJU/btsPIdiftgx/cPGDIgjA362A11mskD1vek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmycJU%2FbtsPIdiftgx%2FcPGDIgjA362A11mskD1vek%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;467&quot; height=&quot;461&quot; data-filename=&quot;grid_columns.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.w3schools.com/css/css_grid_columns_rows.asp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;grid_rows.png&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xw4kI/btsPJw9d01a/9yON0vDogvnbF5QUqSOOsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xw4kI/btsPJw9d01a/9yON0vDogvnbF5QUqSOOsK/img.png&quot; data-alt=&quot;출처:https://www.w3schools.com/css/css_grid_columns_rows.asp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xw4kI/btsPJw9d01a/9yON0vDogvnbF5QUqSOOsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxw4kI%2FbtsPJw9d01a%2F9yON0vDogvnbF5QUqSOOsK%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;531&quot; height=&quot;399&quot; data-filename=&quot;grid_rows.png&quot; data-origin-width=&quot;531&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:https://www.w3schools.com/css/css_grid_columns_rows.asp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;grid_gaps.png&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yaod3/btsPIE7KCNM/ErjMvy5S3MlgME2knJvk5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yaod3/btsPIE7KCNM/ErjMvy5S3MlgME2knJvk5k/img.png&quot; data-alt=&quot;출처 : https://www.w3schools.com/css/css_grid_columns_rows.asp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yaod3/btsPIE7KCNM/ErjMvy5S3MlgME2knJvk5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyaod3%2FbtsPIE7KCNM%2FErjMvy5S3MlgME2knJvk5k%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;565&quot; height=&quot;461&quot; data-filename=&quot;grid_gaps.png&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://www.w3schools.com/css/css_grid_columns_rows.asp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. Container 속성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grid 컨테이너는 부모 요소에 적용되며, 그 내부의 레이아웃을 정의합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;속성&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;display&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;Grid 레이아웃 활성화 (grid 또는 inline-grid 설정).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-template-columns&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;열의 크기와 개수를 정의.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-template-rows&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;행의 크기와 개수를 정의.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-template-areas&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;Grid의 영역 이름을 정의.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-template&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;grid-template-rows, grid-template-columns, grid-template-areas를 한 번에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;gap (또는 grid-gap)&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;열과 행 간의 간격 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;row-gap&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;행 간의 간격 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;column-gap&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;열 간의 간격 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;justify-items&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;모든 아이템의 가로 정렬 방식 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;align-items&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;모든 아이템의 세로 정렬 방식 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;place-items&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;justify-items와 align-items를 동시에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;justify-content&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;Grid 전체의 가로 정렬 방식 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;align-content&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;Grid 전체의 세로 정렬 방식 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;place-content&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;justify-content와 align-content를 동시에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-auto-columns&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;자동 생성 열의 크기 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-auto-rows&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;자동 생성 행의 크기 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid-auto-flow&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;아이템 배치 방향 설정 (row, column, dense).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.6977%;&quot;&gt;grid&lt;/td&gt;
&lt;td style=&quot;width: 52.4419%;&quot;&gt;grid-template, grid-auto-flow, gap 등을 한 번에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. Item 속성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grid 아이템은 컨테이너 내부의 자식 요소에 적용되며, 각 아이템의 위치와 정렬을 정의합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 231px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;속성&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-column-start&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;아이템이 시작할 열 번호를 지정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-column-end&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;아이템이 끝날 열 번호를 지정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-row-start&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;아이템이 시작할 행 번호를 지정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-row-end&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;아이템이 끝날 행 번호를 지정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-column&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;아이템의 시작 열과 끝 열 번호를 한 번에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-row&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;아이템의 시작 행과 끝 행 번호를 한 번에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;grid-area&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;grid-template-areas에서 정의한 영역 이름 또는 위치를 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;justify-self&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;개별 아이템의 가로 정렬 방식 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;align-self&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;개별 아이템의 세로 정렬 방식 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; width: 24.6512%;&quot;&gt;place-self&lt;/td&gt;
&lt;td style=&quot;height: 21px; width: 75.2326%;&quot;&gt;justify-self와 align-self를 동시에 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;# fr&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Fractional Unit&lt;/b&gt;의 약자로, Grid 레이아웃에서 사용 가능한 공간의 비율을 나눌 때 사용하는 단위입니다.&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;fr은 유연한 단위&lt;/b&gt;로, 고정된 픽셀(px)이나 비율(%)과 달리 남은 공간을 나눠서 배치합니다.&lt;/li&gt;
&lt;li&gt;Grid의 &lt;b&gt;여유 공간을 나누는 방식&lt;/b&gt;이므로, 다른 고정 크기 요소를 제외하고 남은 공간만 계산합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. &lt;b&gt;균등 분할&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734060182447&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-columns: 1fr 1fr 1fr;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3개의 열을 동일한 크기로 나눔.&lt;/li&gt;
&lt;li&gt;가용 공간을 3등분하여 각 열이 동일한 비율(1:1:1)로 크기를 가집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;b&gt;비율 기반 분할&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734060210686&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-columns: 2fr 1fr;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 열은 두 번째 열보다 2배 넓게 설정.&lt;/li&gt;
&lt;li&gt;가용 공간을 3등분하여 2/3은 첫 번째 열, 1/3은 두 번째 열이 차지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. &lt;b&gt;고정 크기와 함께 사용&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734060231400&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-columns: 200px 1fr 2fr;&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 열은 고정 크기(200px).&lt;/li&gt;
&lt;li&gt;두 번째 열과 세 번째 열은 남은 공간을 1:2의 비율로 나눕니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. &lt;b&gt;반응형 설계&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1734060254080&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-columns: repeat(3, 1fr);&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3개의 열을 균등하게 배치.&lt;/li&gt;
&lt;li&gt;repeat 함수와 fr 단위를 함께 사용하면 가변적인 Grid를 쉽게 설계할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;전체 크기 계산&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fr은 고정 크기 요소(픽셀, 퍼센트 등)를 제외한 나머지 가용 공간을 기준으로 계산합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가중치 배분&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 fr 값의 합을 기준으로 각각의 비율을 계산합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734060319255&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-columns: 100px 2fr 3fr;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;총 너비&lt;/b&gt;: 600px (예: 컨테이너의 너비)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;남은 공간&lt;/b&gt;: 500px (100px 고정 크기를 제외한 나머지)&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;2fr = (2 / 5) &amp;times; 500px = 200px&lt;/li&gt;
&lt;li&gt;3fr = (3 / 5) &amp;times; 500px = 300px&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;첫 번째 열: 100px (고정 크기)&lt;/li&gt;
&lt;li&gt;두 번째 열: 200px&lt;/li&gt;
&lt;li&gt;세 번째 열: 300px&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# display&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1734169938200&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.container {
  display: grid;
  display: grid | inline-grid;
}&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1)&amp;nbsp; grid-template-rows / grid-template-columns &lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;행(row)/ 열(column) 의 크기를 정의하는 속성&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_1734170069115&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: &amp;lt;track-size&amp;gt; ...;
grid-template-columns: &amp;lt;track-size&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;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;lt;track-size&amp;gt;&lt;/b&gt;: 각 행의 크기를 지정합니다. px, %, fr, auto, minmax()와 같은 값들을 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;여러 값을 공백으로 구분&lt;/b&gt;하여 각 행의 높이를 정의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;속성&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;track-size&amp;gt;&lt;/td&gt;
&lt;td&gt;그리드 트랙(열 또는 행)의 크기를 정의. 고정 크기, 비율(fr), 자동(auto), 또는 유동적 크기(minmax())로 설정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;line-name&amp;gt;&lt;/td&gt;
&lt;td&gt;그리드 라인의 이름을 정의. 특정 라인을 참조하여 그리드 아이템을 배치하거나 스타일을 적용할 때 사용.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;track-size&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;track-size&amp;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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;값&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;length&lt;/td&gt;
&lt;td&gt;고정된 길이 값 (예: px, em, rem).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;percentage&lt;/td&gt;
&lt;td&gt;부모 요소 크기의 비율로 설정 (예: 50%).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fr&lt;/td&gt;
&lt;td&gt;가용 공간을 비율로 나눔. (fr 단위는 &quot;fraction&quot;을 의미).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;auto&lt;/td&gt;
&lt;td&gt;콘텐츠 크기에 따라 자동 조정.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;minmax()&lt;/td&gt;
&lt;td&gt;최소 크기와 최대 크기를 지정하여, 콘텐츠와 가용 공간에 따라 유동적으로 크기 변경.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&amp;lt;line-name&amp;gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;line-name&amp;gt;는 &lt;b&gt;그리드 라인의 이름&lt;/b&gt;을 정의합니다. &lt;b&gt;임의의 이름&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;&amp;lt;line-name&amp;gt;은 각 그리드 라인(열 또는 행의 경계선)에 적용됩니다.&lt;/li&gt;
&lt;li&gt;하나 이상의 이름을 공백으로 구분하여 지정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;아이템 배치 시 &lt;b&gt;grid-column&lt;/b&gt; 또는 &lt;b&gt;grid-row&lt;/b&gt; 속성에서 참조합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1734226347775&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-columns: [line1] 1fr [line2] 2fr [line3];
grid-template-rows: [row1] auto [row2] 200px [row3];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734226359272&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.grid-container {
  display: grid;
  grid-template-columns: [start] 100px [middle] 1fr [end];
  grid-template-rows: [top] auto [bottom];
}

.item {
  grid-column: start / middle; /* 'start'부터 'middle'까지 차지 */
  grid-row: top / bottom; /* 'top'부터 'bottom'까지 차지 */
}&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;grid-template-columns&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;start &amp;rarr; 첫 번째 열의 시작 라인.&lt;/li&gt;
&lt;li&gt;middle &amp;rarr; 첫 번째 열의 끝과 두 번째 열의 시작 라인.&lt;/li&gt;
&lt;li&gt;end &amp;rarr; 두 번째 열의 끝 라인.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;grid-template-rows&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;top &amp;rarr; 첫 번째 행의 시작 라인.&lt;/li&gt;
&lt;li&gt;bottom &amp;rarr; 두 번째 행의 끝 라인.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 고정 크기 행&lt;/h4&gt;
&lt;pre id=&quot;code_1734170108069&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: 100px 200px 300px;
grid-template-columns: 100px 200px 300px;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 행의 높이: 100px&lt;/li&gt;
&lt;li&gt;두 번째 행의 높이: 200px&lt;/li&gt;
&lt;li&gt;세 번째 행의 높이: 300px&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 비율로&amp;nbsp; 설정 (fr 단위)&lt;/h4&gt;
&lt;pre id=&quot;code_1734170166660&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: 1fr 2fr 1fr;
grid-template-columns: 1fr 2fr 1fr;&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;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;첫 번째 행: 1/4의 높이&lt;/li&gt;
&lt;li&gt;두 번째 행: 2/4의 높이&lt;/li&gt;
&lt;li&gt;세 번째 행: 1/4의 높이&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;fr(fraction)&lt;/b&gt; 단위는 가용 공간의 비율로 행 높이를 지정합니다&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 자동 크기 조정&lt;/h4&gt;
&lt;pre id=&quot;code_1734170222348&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: auto auto auto;
grid-template-columns: auto auto auto;&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;h4 data-ke-size=&quot;size20&quot;&gt;4. 최소 및 최대 크기&lt;/h4&gt;
&lt;pre id=&quot;code_1734170247573&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: minmax(100px, 1fr) 200px;
grid-template-columns: minmax(100px, 1fr) 200px;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 행:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최소 높이: 100px&lt;/li&gt;
&lt;li&gt;최대 높이: 가용 공간 중 비율(1fr)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;두 번째 행: 고정 높이 200px&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. 반복적인 행 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1734170271969&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: repeat(3, 1fr);
grid-template-columns: repeat(3, 1fr);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 3개의 행을 생성하며, 각 행은 동일한 비율(1fr)로 나눕니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734170301767&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-rows: repeat(2, 100px 1fr);
grid-template-columns: repeat(2, 100px 1fr);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;100px 고정 높이와 1fr 비율로 구성된 행을 2번 반복.&lt;/p&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# grid-template-areas&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CSS Grid Layout&lt;/b&gt;에서 그리드 아이템의 배치 영역(layout area)을 이름으로 정의하는 데 사용됩니다. 이 속성은 텍스트 기반의 &lt;b&gt;그리드 레이아웃&lt;/b&gt;을 직관적으로 설계할 수 있게 해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1734171169832&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-areas: 
  &quot;&amp;lt;area-name&amp;gt; &amp;lt;area-name&amp;gt; ...&quot;
  &quot;&amp;lt;area-name&amp;gt; &amp;lt;area-name&amp;gt; ...&quot;
  ...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&amp;lt;area-name&amp;gt;&lt;/b&gt;: 각 그리드 영역에 이름을 지정.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이름은 반드시 따옴표(&quot; &quot;) 안에 작성.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;.&lt;/b&gt;: 비어 있는 공간(아이템이 없는 그리드 셀)을 나타냄.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;행은 줄바꿈(\n)으로 구분됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;pre id=&quot;code_1734171231228&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-areas: 
  &quot;header header header&quot;
  &quot;menu content content&quot;
  &quot;menu footer footer&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;첫 번째 행: header가 3칸(전체 열) 차지.&lt;/li&gt;
&lt;li&gt;두 번째 행: menu가 첫 번째 열, content가 나머지 2열 차지.&lt;/li&gt;
&lt;li&gt;세 번째 행: menu가 첫 번째 열, footer가 나머지 2열 차지.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734171251216&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;grid-container&quot;&amp;gt;
  &amp;lt;div class=&quot;header&quot;&amp;gt;Header&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;menu&quot;&amp;gt;Menu&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;content&quot;&amp;gt;Content&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;footer&quot;&amp;gt;Footer&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734171261467&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.grid-container {
  display: grid;
  grid-template-areas: 
    &quot;header header header&quot;
    &quot;menu content content&quot;
    &quot;menu footer footer&quot;;
  grid-template-columns: 1fr 2fr 2fr; /* 3개의 열 */
  grid-template-rows: 100px 200px 100px; /* 3개의 행 */
  gap: 10px; /* 셀 간의 간격 */
  height: 100%;
  width: 100%;
}

/* 각 영역의 위치를 정의 */
.header {
  grid-area: header;
  background-color: orange;
}

.menu {
  grid-area: menu;
  background-color: lightblue;
}

.content {
  grid-area: content;
  background-color: lightgreen;
}

.footer {
  grid-area: footer;
  background-color: lightpink;
}

/* 공통 스타일 */
.grid-container &amp;gt; div {
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 20px;
  color: white;
  border: 1px solid black;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tx2cq/btsLjoOCDJF/km9gNBAbwdeWoagNmznHWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tx2cq/btsLjoOCDJF/km9gNBAbwdeWoagNmznHWk/img.png&quot; data-alt=&quot;grid layout&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tx2cq/btsLjoOCDJF/km9gNBAbwdeWoagNmznHWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftx2cq%2FbtsLjoOCDJF%2Fkm9gNBAbwdeWoagNmznHWk%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;626&quot; height=&quot;446&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;grid layout&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1734171291700&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;header header header
menu   content content
menu   footer  footer&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;첫 번째 행&lt;/b&gt;: header가 3열 전체를 차지.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;두 번째 행&lt;/b&gt;: menu는 첫 번째 열, content는 두 번째와 세 번째 열을 차지.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;세 번째 행&lt;/b&gt;: menu는 첫 번째 열, footer는 두 번째와 세 번째 열을 차지.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;비어 있는 셀 표현 (.)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비어 있는 셀은&amp;nbsp; ( . ) 으로 표현할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1734171443000&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;grid-template-areas: 
  &quot;header header .&quot;
  &quot;menu content content&quot;
  &quot;menu footer .&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1734171473016&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;header | header | (빈 칸)
menu   | content | content
menu   | footer  | (빈 칸)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734171523768&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div class=&quot;grid-container&quot;&amp;gt;
  &amp;lt;div class=&quot;header&quot;&amp;gt;Header&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;content&quot;&amp;gt;Content&amp;lt;/div&amp;gt;
  &amp;lt;div class=&quot;footer&quot;&amp;gt;Footer&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734171533338&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.grid-container {
  display: grid;
  grid-template-areas: 
    &quot;header header&quot;
    &quot;content content&quot;
    &quot;footer footer&quot;;
  grid-template-columns: repeat(2, 1fr); /* 2개의 동일한 열 */
  grid-template-rows: auto; /* 행 높이는 콘텐츠에 맞게 조정 */
  gap: 10px;
}&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;row-gap , column-gap , gap&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;row-gap : &lt;/b&gt;&lt;b&gt;행(row) 간의 간격&lt;/b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;을 설정하는 속성.&lt;br /&gt;&lt;/span&gt;&lt;b&gt;column-gap : &lt;/b&gt;&lt;b&gt;열(column) 간의 간격&lt;/b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;을 설정하는 속성&lt;br /&gt;&lt;/span&gt;&lt;b&gt;gap (단축 속성) : &lt;/b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;row-gap 과&amp;nbsp; column-gap을 동시에 설정하는 단축 속성.&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734173577131&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;row-gap: &amp;lt;length&amp;gt;;

column-gap: &amp;lt;length&amp;gt;;

gap: &amp;lt;row-gap&amp;gt; &amp;lt;column-gap&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;grid_lines.png&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIDgCp/btsPI8ncFrp/TduHK1itmedV6XXsUS4yN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIDgCp/btsPI8ncFrp/TduHK1itmedV6XXsUS4yN0/img.png&quot; data-alt=&quot;출처 :https://www.w3schools.com/css/css_grid_columns_rows.asp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIDgCp/btsPI8ncFrp/TduHK1itmedV6XXsUS4yN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIDgCp%2FbtsPI8ncFrp%2FTduHK1itmedV6XXsUS4yN0%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;595&quot; height=&quot;505&quot; data-filename=&quot;grid_lines.png&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :https://www.w3schools.com/css/css_grid_columns_rows.asp&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&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;&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)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEPHYq/btsLinpCGOg/EAfqvSC7Pe2nLQtMvzorc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEPHYq/btsLinpCGOg/EAfqvSC7Pe2nLQtMvzorc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEPHYq/btsLinpCGOg/EAfqvSC7Pe2nLQtMvzorc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEPHYq%2FbtsLinpCGOg%2FEAfqvSC7Pe2nLQtMvzorc0%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;907&quot; height=&quot;605&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;605&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;pre id=&quot;code_1734151115750&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;css/reset.css&quot; /&amp;gt;
        &amp;lt;style&amp;gt;
            body {
                margin: 30px;
            }
            .container {
                width: 500px;
                display: grid;
                grid-template-columns: auto auto auto;
                background-color: skyblue;
                padding: 20px;
            }
            .item {
                background-color: pink;
                border: 3px solid #fff;
                padding: 30px;
                text-align: center;
            }
        &amp;lt;/style&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div class=&quot;container&quot;&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;1&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;2&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;3&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;4&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;5&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;6&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;7&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;8&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;9&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;10&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예2)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;789&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/leVxl/btsLjkSUokh/SfepCW3q5PojalIt5CDan0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/leVxl/btsLjkSUokh/SfepCW3q5PojalIt5CDan0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/leVxl/btsLjkSUokh/SfepCW3q5PojalIt5CDan0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FleVxl%2FbtsLjkSUokh%2FSfepCW3q5PojalIt5CDan0%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;1111&quot; height=&quot;789&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;789&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;pre id=&quot;code_1734151290418&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;css/reset.css&quot; /&amp;gt;
        &amp;lt;style&amp;gt;
            body {
                margin: 30px;
            }
            .container {
                width: 500px;
                display: grid;
                grid-template: 80px 300px / auto auto 190px;
                background-color: blue;
                padding: 10px;
            }
            .item {
                background-color: pink;
                border: 3px solid #fff;
                padding: 30px;
                text-align: center;
            }
        &amp;lt;/style&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div class=&quot;container&quot;&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;1&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;2&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;3&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;4&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;5&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;6&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;7&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;8&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;9&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예3)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6GIN5/btsLg1mtClS/4b0RIr07vCZLZAosvdQLE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6GIN5/btsLg1mtClS/4b0RIr07vCZLZAosvdQLE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6GIN5/btsLg1mtClS/4b0RIr07vCZLZAosvdQLE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6GIN5%2FbtsLg1mtClS%2F4b0RIr07vCZLZAosvdQLE1%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;1120&quot; height=&quot;680&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;680&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;pre id=&quot;code_1734151147077&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;css/reset.css&quot; /&amp;gt;
        &amp;lt;style&amp;gt;
            body {
                margin: 30px;
            }
            .container {
                display: grid;
                grid-template-columns: 200px 500px;
                grid-template-rows: 200px 300px 100px;
                grid-gap: 20px;
            }
            .item {
                background: pink;
            }
        &amp;lt;/style&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div class=&quot;container&quot;&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;1&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;2&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;3&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;4&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;5&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;6&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;7&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;8&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;9&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;10&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1734065748835&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.container {
  display: grid; /* Grid 레이아웃을 활성화 */
  
  grid-template-columns: 200px 500px; /* 열의 크기 정의
                                        - 첫 번째 열: 너비 200px
                                        - 두 번째 열: 너비 500px */
  
  grid-template-rows: 200px 300px 100px; /* 행의 크기 정의
                                           - 첫 번째 행: 높이 200px
                                           - 두 번째 행: 높이 300px
                                           - 세 번째 행: 높이 100px */
  
  grid-gap: 20px; /* 셀 간의 간격 설정
                    - 열과 열 사이의 간격: 20px
                    - 행과 행 사이의 간격: 20px */
}&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;예4)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;843&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8jH18/btsLjonr468/ULolD7mtgyqJhi0ubKI120/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8jH18/btsLjonr468/ULolD7mtgyqJhi0ubKI120/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8jH18/btsLjonr468/ULolD7mtgyqJhi0ubKI120/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8jH18%2FbtsLjonr468%2FULolD7mtgyqJhi0ubKI120%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;1028&quot; height=&quot;843&quot; data-origin-width=&quot;1028&quot; data-origin-height=&quot;843&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;pre id=&quot;code_1734157630799&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot;&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;UTF-8&quot; /&amp;gt;
        &amp;lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot; /&amp;gt;
        &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;css/reset.css&quot; /&amp;gt;
        &amp;lt;style&amp;gt;
            body {
                margin: 30px;
            }
            .container {
                width: 500px;
                display: grid;
                grid-template-columns: auto auto auto;
                background-color: blue;
                padding: 10px;
            }
            .item {
                background-color: pink;
                border: 3px solid #fff;
                padding: 30px;
                text-align: center;
            }
            .item:nth-child(2) {
                grid-row-start: 2;
                background: hotpink;
            }
        &amp;lt;/style&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
        &amp;lt;div class=&quot;container&quot;&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;1&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;2&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;3&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;4&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;5&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;6&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;7&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;8&amp;lt;/div&amp;gt;
            &amp;lt;div class=&quot;item&quot;&amp;gt;9&amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>CSS3</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/172</guid>
      <comments>https://fullstack-eun.tistory.com/172#entry172comment</comments>
      <pubDate>Fri, 13 Dec 2024 15:20:01 +0900</pubDate>
    </item>
    <item>
      <title>[ figma ] 16. variables prototype 베리어블 프로토타입</title>
      <link>https://fullstack-eun.tistory.com/164</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;베리어블&amp;nbsp;프로토타입&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lGV67/btsKR8TbGY4/IPQh8cO1F3vOQNm8XTiD20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lGV67/btsKR8TbGY4/IPQh8cO1F3vOQNm8XTiD20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lGV67/btsKR8TbGY4/IPQh8cO1F3vOQNm8XTiD20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlGV67%2FbtsKR8TbGY4%2FIPQh8cO1F3vOQNm8XTiD20%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;609&quot; height=&quot;102&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# number&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5spJC/btsKQGQT78k/zC9lvHVDVTBaepClKuHC70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5spJC/btsKQGQT78k/zC9lvHVDVTBaepClKuHC70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5spJC/btsKQGQT78k/zC9lvHVDVTBaepClKuHC70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5spJC%2FbtsKQGQT78k%2FzC9lvHVDVTBaepClKuHC70%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;854&quot; height=&quot;470&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;470&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;figma1.gif&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;877&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQeSZc/btsKQNia9NH/i6VeTvwZjtFRP2P5E9Reok/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQeSZc/btsKQNia9NH/i6VeTvwZjtFRP2P5E9Reok/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQeSZc/btsKQNia9NH/i6VeTvwZjtFRP2P5E9Reok/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bQeSZc/btsKQNia9NH/i6VeTvwZjtFRP2P5E9Reok/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;302&quot; height=&quot;657&quot; data-filename=&quot;figma1.gif&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;877&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# String&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAnWKh/btsKQ9eivl6/HYODDKfZH5WOZ5UxrBwp81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAnWKh/btsKQ9eivl6/HYODDKfZH5WOZ5UxrBwp81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAnWKh/btsKQ9eivl6/HYODDKfZH5WOZ5UxrBwp81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAnWKh%2FbtsKQ9eivl6%2FHYODDKfZH5WOZ5UxrBwp81%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;1299&quot; height=&quot;566&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Honeycam 2024-11-22 08-51-17.gif&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csFOjw/btsKRQyvDcs/JKN3WWyQD2cJ9k5mEkL8u0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csFOjw/btsKRQyvDcs/JKN3WWyQD2cJ9k5mEkL8u0/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csFOjw/btsKRQyvDcs/JKN3WWyQD2cJ9k5mEkL8u0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/csFOjw/btsKRQyvDcs/JKN3WWyQD2cJ9k5mEkL8u0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;336&quot; height=&quot;579&quot; data-filename=&quot;Honeycam 2024-11-22 08-51-17.gif&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;694&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;</description>
      <category>figma</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/164</guid>
      <comments>https://fullstack-eun.tistory.com/164#entry164comment</comments>
      <pubDate>Fri, 22 Nov 2024 08:49:07 +0900</pubDate>
    </item>
    <item>
      <title>[ TypeScript ] 기본 타입</title>
      <link>https://fullstack-eun.tistory.com/162</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기본 타입&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;843&quot; data-start=&quot;811&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;unknown&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 타입의 &lt;b&gt;슈퍼 타입&lt;/b&gt;으로, 모든 값이 할당될 수 있습니다.&lt;/li&gt;
&lt;li&gt;타입이 명확하지 않을 때 사용하지만, any와 달리 제한적입니다. 사용하기 전 명확한 타입으로 좁히는 타입 가드가 필요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;any&lt;/b&gt;&lt;/h3&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;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;기본 타입들&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;null&lt;/b&gt;: null 값만 가질 수 있는 타입입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;void&lt;/b&gt;: 함수가 값을 반환하지 않을 때 주로 사용되는 타입입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;number&lt;/b&gt;: 숫자 타입이며, Number Enum을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;bigint&lt;/b&gt;: 큰 정수를 표현하는 타입으로, 일반 숫자보다 큰 정수를 다룰 때 사용됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;boolean&lt;/b&gt;: true 또는 false의 불리언 값을 가지는 타입입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;string&lt;/b&gt;: 문자열 타입으로, String Enum을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;symbol&lt;/b&gt;: 심볼 타입으로, Unique Symbol을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;object&lt;/b&gt;: 객체 타입을 나타내며, &lt;b&gt;Array&lt;/b&gt;, &lt;b&gt;Function&lt;/b&gt;, &lt;b&gt;Constructor&lt;/b&gt;와 같은 구체적인 타입을 포함합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;br /&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot; data-start=&quot;845&quot; data-end=&quot;1709&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;타입&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;설명&lt;/td&gt;
&lt;td style=&quot;background-color: #9b9b9b; color: #ffffff;&quot;&gt;예시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;966&quot; data-end=&quot;1036&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;number&lt;/td&gt;
&lt;td&gt;숫자형 (정수, 소수 포함)&lt;/td&gt;
&lt;td&gt;let age: number = 30;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1037&quot; data-end=&quot;1119&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;string&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;문자열&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;let name: string = &quot;Alice&quot;;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1120&quot; data-end=&quot;1204&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;boolean&lt;/td&gt;
&lt;td&gt;참/거짓 값&lt;/td&gt;
&lt;td&gt;let isStudent: boolean = true;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1205&quot; data-end=&quot;1287&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;any&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;모든 타입 허용 (가능한 한 사용 지양)&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;let value: any = &quot;hello&quot;; value = 100;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1288&quot; data-end=&quot;1353&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;unknown&lt;/td&gt;
&lt;td&gt;타입을 확정할 수 없는 경우&lt;/td&gt;
&lt;td&gt;let data: unknown;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1354&quot; data-end=&quot;1425&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;null&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;값이 없음 (null 값만 할당 가능)&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;let empty: null = null;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1426&quot; data-end=&quot;1517&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;undefined&lt;/td&gt;
&lt;td&gt;정의되지 않음&lt;/td&gt;
&lt;td&gt;let notDefined: undefined = undefined;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1518&quot; data-end=&quot;1618&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;object&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;객체 타입&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9;&quot;&gt;let person: object = { name: &quot;Tom&quot;, age: 25 };&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-start=&quot;1619&quot; data-end=&quot;1709&quot;&gt;
&lt;td style=&quot;background-color: #efefef;&quot;&gt;array&lt;/td&gt;
&lt;td&gt;배열&lt;/td&gt;
&lt;td&gt;let numbers: number[] = [1, 2, 3];&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;유형별 세부 타입&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;undefined&lt;/b&gt;: 정의되지 않은 상태를 나타내며, void나 null 타입과 함께 사용됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Number Enum&lt;/b&gt; / &lt;b&gt;String Enum&lt;/b&gt;: 각각 숫자 또는 문자열 열거형을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Unique Symbol&lt;/b&gt;: 고유한 심볼 값을 나타냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Array&lt;/b&gt;: 배열 타입입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Function&lt;/b&gt;: 함수 타입입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Constructor&lt;/b&gt;: 생성자 함수 타입을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. &lt;b&gt;never&lt;/b&gt;&lt;/h3&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1393&quot; data-origin-height=&quot;769&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQWiF2/btsKHW6GtMo/uc8QWCI42K7IzNzRoFMsW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQWiF2/btsKHW6GtMo/uc8QWCI42K7IzNzRoFMsW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQWiF2/btsKHW6GtMo/uc8QWCI42K7IzNzRoFMsW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQWiF2%2FbtsKHW6GtMo%2Fuc8QWCI42K7IzNzRoFMsW0%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;1393&quot; height=&quot;769&quot; data-origin-width=&quot;1393&quot; data-origin-height=&quot;769&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;unknown&lt;/b&gt;은 모든 타입의 최상위에 위치하며 모든 값을 포함할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;any&lt;/b&gt;는 unknown 바로 아래에 있으며, 타입 검사를 우회하는 타입입니다.&lt;/li&gt;
&lt;li&gt;기본 타입들인 &lt;b&gt;null&lt;/b&gt;, &lt;b&gt;void&lt;/b&gt;, &lt;b&gt;number&lt;/b&gt;, &lt;b&gt;bigint&lt;/b&gt;, &lt;b&gt;boolean&lt;/b&gt;, &lt;b&gt;string&lt;/b&gt;, &lt;b&gt;symbol&lt;/b&gt;, &lt;b&gt;object&lt;/b&gt;가 각각의 하위 타입을 가집니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;never&lt;/b&gt;는 undefined와 null의 하위 타입으로, 도달할 수 없는 값을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 원시타입과 리터널 타입&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;원시 타입&lt;/b&gt;은 기본적인 데이터 타입으로 number, string, boolean 등 JavaScript와 동일한 타입을 포함합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리터럴 타입&lt;/b&gt;은 고정된 값을 가지도록 제한하는 타입으로, 유니온 타입과 결합하여 특정 값들 중 하나만 가질 수 있도록 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 원시 타입 (Primitive Type)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원시 타입은 JavaScript와 TypeScript에서 기본적으로 제공하는 &lt;b&gt;가장 작은 단위의 데이터 타입&lt;/b&gt;입니다. 원시 타입은 그 자체로 값을 가지며, 주로 불변(immutable)합니다.&lt;/p&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;number&lt;/b&gt;: 숫자 타입을 나타내며, 정수와 소수를 포함합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731551382346&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let age: number = 30;&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;b&gt;string&lt;/b&gt;: 문자열 타입을 나타냅니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731551396422&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let name: string = &quot;John&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;b&gt;boolean&lt;/b&gt;: 불리언 타입으로, true 또는 false 값을 가집니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1731551417214&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let isStudent: boolean = false;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;b&gt;bigint&lt;/b&gt;: 매우 큰 정수를 표현할 수 있는 타입입니다. BigInt 객체를 사용하거나 숫자 뒤에 n을 붙여 선언할 수 있습니다. (ES2020부터 지원)&lt;/p&gt;
&lt;pre id=&quot;code_1731551434652&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let largeNumber: bigint = 9007199254740991n;&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;b&gt;symbol&lt;/b&gt;: 고유한 심볼 값을 가지는 타입입니다. 객체의 고유한 속성 키를 만들 때 유용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731551452130&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let uniqueKey: symbol = Symbol(&quot;key&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;undefined&lt;/b&gt;: 변수는 선언되었으나 값이 할당되지 않았을 때 기본적으로 가지는 타입입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1731551469065&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let notAssigned: undefined = undefined;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;b&gt;null&lt;/b&gt;: 값이 없음을 명시적으로 나타내는 타입입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731551483576&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let empty: null = null;&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;void&lt;/b&gt;: 주로 함수에서 &lt;b&gt;반환 값이 없음을 나타낼 때&lt;/b&gt; 사용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731551497891&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function logMessage(): void {
    console.log(&quot;Hello, TypeScript&quot;);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;never&lt;/b&gt;: &lt;b&gt;절대 도달할 수 없는 값을 나타내는 타입&lt;/b&gt;으로, 항상 오류를 발생시키거나 영원히 실행되는 함수에서 사용됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731551513776&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function throwError(message: string): never {
    throw new Error(message);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 리터럴 타입 (Literal Type)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리터럴 타입은 변수가 가질 수 있는 &lt;b&gt;고정된 값을 특정&lt;/b&gt;할 때 사용됩니다. 예를 들어, 문자열 &quot;hello&quot;를 리터럴 타입으로 지정하면, 그 변수는 &quot;hello&quot; 외의 값으로 변경할 수 없습니다. 리터럴 타입은 주로 &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;size16&quot;&gt;문자열 리터럴 타입&lt;/p&gt;
&lt;pre id=&quot;code_1731551550129&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let direction: &quot;left&quot; | &quot;right&quot; | &quot;up&quot; | &quot;down&quot;;
direction = &quot;left&quot;;  // 가능
direction = &quot;right&quot;; // 가능
direction = &quot;forward&quot;; // 오류 발생, 지정된 값이 아님&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자 리터럴 타입&lt;/p&gt;
&lt;pre id=&quot;code_1731551559948&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let statusCode: 200 | 404 | 500;
statusCode = 200; // 가능
statusCode = 300; // 오류 발생, 지정된 값이 아님&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;/p&gt;
&lt;pre id=&quot;code_1731551572712&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let isCompleted: true | false;
isCompleted = true; // 가능
isCompleted = false; // 가능&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731551591658&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type TrafficLight = &quot;red&quot; | &quot;yellow&quot; | &quot;green&quot;;

function getTrafficLightAction(light: TrafficLight) {
    switch (light) {
        case &quot;red&quot;:
            return &quot;stop&quot;;
        case &quot;yellow&quot;:
            return &quot;slow down&quot;;
        case &quot;green&quot;:
            return &quot;go&quot;;
    }
}

console.log(getTrafficLightAction(&quot;red&quot;)); // &quot;stop&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 배열과 튜플&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;ee33815a-f799-4b83-846b-ef24f00dc9da&quot; data-message-author-role=&quot;assistant&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;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;배열(Array)&lt;/b&gt;: 동일한 타입의 값을 여러 개 가질 수 있는 구조. number[] 또는 Array&amp;lt;number&amp;gt; 형태로 선언.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;튜플(Tuple)&lt;/b&gt;: 고정된 개수와 타입의 값을 가질 수 있는 구조. [string, number] 형태로 선언.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 배열 (Array)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배열은 동일한 타입의 값들을 한 변수에 저장할 수 있는 데이터 구조입니다. JavaScript의 배열과 유사하며, TypeScript에서는 배열에 &lt;b&gt;타입을 지정&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;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대괄호([]) 표기법&lt;/b&gt;을 사용하여 배열 타입을 지정&lt;/p&gt;
&lt;pre id=&quot;code_1731551995952&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let numbers: number[] = [1, 2, 3, 4, 5];
let fruits: string[] = [&quot;apple&quot;, &quot;banana&quot;, &quot;orange&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Array&amp;lt;&amp;gt; 제네릭 표기법&lt;/b&gt;을 사용하여 배열 타입을 지정&lt;/p&gt;
&lt;pre id=&quot;code_1731552014668&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let numbers: Array&amp;lt;number&amp;gt; = [1, 2, 3, 4, 5];
let fruits: Array&amp;lt;string&amp;gt; = [&quot;apple&quot;, &quot;banana&quot;, &quot;orange&quot;];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;배열의 타입 검사&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 배열 요소의 타입을 체크하기 때문에, 배열에 잘못된 타입의 값을 추가하려고 하면 오류가 발생합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552039261&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let names: string[] = [&quot;Alice&quot;, &quot;Bob&quot;];
names.push(&quot;Charlie&quot;);  // 가능
names.push(123);        // 오류 발생, 숫자는 허용되지 않음&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 튜플 (Tuple)&lt;/h3&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;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;튜플 선언 방법&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;튜플은 대괄호([]) 안에 &lt;b&gt;각 요소의 타입을 순서대로&lt;/b&gt; 나열하여 선언합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552069254&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let person: [string, number] = [&quot;Alice&quot;, 30];&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1731552094214&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let person: [string, number] = [&quot;Alice&quot;, 30];   // 가능
let person2: [string, number] = [30, &quot;Alice&quot;];  // 오류 발생, 순서가 다름
let person3: [string, number] = [&quot;Alice&quot;, &quot;30&quot;]; // 오류 발생, 타입이 다름&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;pre id=&quot;code_1731552124822&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function fetchData(): [boolean, string] {
    return [true, &quot;Data fetched successfully&quot;];
}

let result = fetchData();
console.log(result[0]); // true
console.log(result[1]); // &quot;Data fetched successfully&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;튜플과 배열의 차이점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징배열(Array)튜플(Tuple)&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;특징&lt;/td&gt;
&lt;td&gt;배열(Array)&lt;/td&gt;
&lt;td&gt;튜플(Tuple)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;타입 일관성&lt;/td&gt;
&lt;td&gt;배열의 모든 요소가 동일한 타입이어야 함&lt;/td&gt;
&lt;td&gt;요소마다 서로 다른 타입을 가질 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;길이 고정 여부&lt;/td&gt;
&lt;td&gt;길이 제한이 없음&lt;/td&gt;
&lt;td&gt;길이와 각 요소의 타입이 고정됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;사용 목적&lt;/td&gt;
&lt;td&gt;동일한 타입의 값 집합&lt;/td&gt;
&lt;td&gt;고정된 구조와 순서가 필요한 데이터 그룹&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 튜플에 선택적 요소와 나머지 요소 지정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript에서는 튜플에 선택적 요소(?)나 나머지 요소(...)를 사용할 수도 있습니다.&lt;/p&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;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1731552189124&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let tupleWithOptional: [string, number?] = [&quot;Alice&quot;];      // 가능
tupleWithOptional = [&quot;Alice&quot;, 30]; // 가능&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;b&gt;나머지 요소&lt;/b&gt;: 나머지 요소를 특정 타입의 배열로 받을 수 있음&lt;/p&gt;
&lt;pre id=&quot;code_1731552202098&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let tupleWithRest: [string, ...number[]] = [&quot;Alice&quot;, 10, 20, 30];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 객체&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;객체 타입&lt;/b&gt;: { 속성: 타입; } 형식으로 객체의 속성 타입을 정의합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선택적 속성&lt;/b&gt;: 속성 뒤에 ?를 붙여 선택적으로 설정할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;읽기 전용 속성&lt;/b&gt;: readonly 키워드로 설정하여 값을 변경하지 못하게 할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인덱스 시그니처&lt;/b&gt;: [key: string]: 타입으로 여러 동적 속성을 가질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인터페이스&lt;/b&gt;: 객체 타입을 정의하고, 확장할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;타입 별칭&lt;/b&gt;: 타입을 정의하고 확장할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 객체 타입 선언 방법&lt;/h3&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;pre id=&quot;code_1731552604162&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let person: { name: string; age: number; isStudent: boolean } = {
  name: &quot;Alice&quot;,
  age: 30,
  isStudent: true
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;person 객체는 name, age, isStudent라는 속성을 가지며, 각각 string, number, boolean 타입을 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 선택적 속성(Optional Properties)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체의 속성 중 일부는 **선택적(optional)**으로 지정할 수 있습니다. 선택적 속성은 있어도 되고 없어도 되는 속성을 의미하며, 타입 선언에서 속성 이름 뒤에 ?를 붙여서 표시합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1731552633790&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let person: { name: string; age?: number } = {
  name: &quot;Alice&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;age 속성은 선택적이므로 person 객체에 age가 없어도 오류가 발생하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 읽기 전용 속성(Readonly Properties)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체의 속성에 &lt;b&gt;읽기 전용(readonly)&lt;/b&gt; 제약을 추가하여, 초기화 이후에는 속성의 값을 변경할 수 없도록 할 수 있습니다. readonly 키워드를 속성 앞에 붙여서 사용합니다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1731552665223&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let person: { readonly name: string; age: number } = {
  name: &quot;Alice&quot;,
  age: 30
};

person.age = 31;      // 가능
person.name = &quot;Bob&quot;;  // 오류 발생, name은 읽기 전용 속성&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 인덱스 시그니처 (Index Signature)&lt;/h3&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;pre id=&quot;code_1731552682966&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let dictionary: { [key: string]: string } = {};
dictionary[&quot;hello&quot;] = &quot;안녕하세요&quot;;
dictionary[&quot;goodbye&quot;] = &quot;안녕히 가세요&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dictionary 객체가 문자열을 키로 하고, 문자열을 값으로 가지는 여러 속성을 가질 수 있음을 나타냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 객체 타입을 위한 인터페이스 (Interface)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 타입이 복잡하거나 여러 곳에서 재사용할 때는 **인터페이스(interface)**를 사용하여 타입을 정의할 수 있습니다. 인터페이스는 객체의 구조를 명확하게 정의해주며, 확장이 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552704653&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Person {
  name: string;
  age: number;
  isStudent?: boolean; // 선택적 속성
}

let alice: Person = {
  name: &quot;Alice&quot;,
  age: 30
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. 객체 타입을 위한 타입 별칭 (Type Alias)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스와 비슷하게 타입 별칭(type alias)도 객체 타입을 정의하는 데 사용됩니다. 인터페이스와의 차이점은 주로 유니온 타입이나 복합 타입을 정의할 때 유용하다는 점입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552734896&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type Person = {
  name: string;
  age: number;
  isStudent?: boolean;
};

let bob: Person = {
  name: &quot;Bob&quot;,
  age: 25
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. 객체 타입을 확장 (Interface &amp;amp; Type Alias Extension)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객체 타입을 확장해서 다른 타입의 기반으로 사용할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인터페이스 확장&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스는 상속이 가능하여 다른 인터페이스를 확장할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552750244&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Person {
  name: string;
  age: number;
}

interface Employee extends Person {
  jobTitle: string;
}

let employee: Employee = {
  name: &quot;Charlie&quot;,
  age: 40,
  jobTitle: &quot;Developer&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;타입 별칭 확장&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타입 별칭은 &amp;amp; 연산자를 사용하여 여러 타입을 합칠 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552781092&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;type Person = {
  name: string;
  age: number;
};

type Employee = Person &amp;amp; {
  jobTitle: string;
};

let employee: Employee = {
  name: &quot;Daisy&quot;,
  age: 35,
  jobTitle: &quot;Designer&quot;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 열거형&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;숫자형 열거형&lt;/b&gt;: 자동으로 1씩 증가된 숫자 값을 할당받으며, 값과 이름 간 양방향 매핑이 가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문자열 열거형&lt;/b&gt;: 각 멤버에 명시적으로 문자열 값을 할당해야 하며, 양방향 매핑은 불가능합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이종 열거형&lt;/b&gt;: 숫자와 문자열을 혼합하여 사용할 수 있지만, 특별한 경우가 아니면 권장되지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;const 열거형&lt;/b&gt;: 컴파일 타임에 상수 값으로 대체되며, 성능 최적화를 위해 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 숫자형 열거형 (Numeric Enum)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자형 열거형은 기본적으로 &lt;b&gt;숫자 값을 자동으로 할당&lt;/b&gt;하는 열거형입니다. 첫 번째 값에만 숫자를 지정하면, 나머지는 1씩 증가된 값을 자동으로 할당받습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552866715&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Direction {
    Up,       // 0
    Down,     // 1
    Left,     // 2
    Right     // 3
}

let move: Direction = Direction.Up;
console.log(move);  // 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Direction.Up의 값은 0이고, Down은 1, Left는 2, Right는 3으로 자동 할당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731552885712&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Status {
    Success = 1,
    InProgress,    // 2
    Failed         // 3
}

console.log(Status.Success);     // 1
console.log(Status.InProgress);  // 2
console.log(Status.Failed);      // 3&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;h4 data-ke-size=&quot;size20&quot;&gt;숫자형 열거형의 양방향 매핑&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;숫자형 열거형은 값과 이름 모두로 접근할 수 있어 &lt;b&gt;양방향 매핑&lt;/b&gt;이 가능&lt;/p&gt;
&lt;pre id=&quot;code_1731552903238&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Status {
    Success = 1,
    InProgress,
    Failed
}

console.log(Status.Success);       // 1
console.log(Status[1]);            // Success&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 문자열 열거형 (String Enum)&lt;/h3&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;pre id=&quot;code_1731552919141&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Direction {
    Up = &quot;UP&quot;,
    Down = &quot;DOWN&quot;,
    Left = &quot;LEFT&quot;,
    Right = &quot;RIGHT&quot;
}

let move: Direction = Direction.Up;
console.log(move);  // &quot;UP&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 열거형은 특정 문자열 값만 가질 수 있으므로, 값과 이름 간의 &lt;b&gt;양방향 매핑이 불가능&lt;/b&gt;합니다. 즉, Direction[&quot;UP&quot;]처럼 값을 통해 열거형 이름을 가져올 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 이종 열거형 (Heterogeneous Enum)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;숫자형&lt;/b&gt;과 &lt;b&gt;문자열형&lt;/b&gt;을 혼합하여 사용할 수도 있습니다. 이를&amp;nbsp; 이종 열거형(Heterogeneous Enum)이라고 합니다. 그러나 실제로 이종 열거형은 특수한 경우가 아니면 잘 사용되지 않습니다. 타입 안전성을 저해할 수 있기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731552946864&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum Result {
    Success = 1,
    Failure = &quot;FAILURE&quot;
}

console.log(Result.Success);  // 1
console.log(Result.Failure);  // &quot;FAILURE&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 열거형의 활용 예시&lt;/h3&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;pre id=&quot;code_1731552974186&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;enum HttpStatus {
    OK = 200,
    BadRequest = 400,
    Unauthorized = 401,
    NotFound = 404,
    InternalServerError = 500
}

function handleRequest(status: HttpStatus) {
    switch (status) {
        case HttpStatus.OK:
            console.log(&quot;Request was successful.&quot;);
            break;
        case HttpStatus.NotFound:
            console.log(&quot;Resource not found.&quot;);
            break;
        case HttpStatus.InternalServerError:
            console.log(&quot;Server encountered an error.&quot;);
            break;
        default:
            console.log(&quot;Unhandled status code:&quot;, status);
    }
}

handleRequest(HttpStatus.OK);            // &quot;Request was successful.&quot;
handleRequest(HttpStatus.NotFound);       // &quot;Resource not found.&quot;
handleRequest(HttpStatus.InternalServerError); // &quot;Server encountered an error.&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. const 열거형 (Const Enum)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const 열거형은 &lt;b&gt;컴파일 타임에 인라인&lt;/b&gt; 처리되는 열거형입니다. 즉, 자바스크립트 코드로 컴파일될 때 실제 열거형 객체를 생성하지 않고 상수 값으로 대체됩니다. 성능 최적화가 필요할 때 사용됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1731552989659&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const enum Direction {
    Up,
    Down,
    Left,
    Right
}

let move = Direction.Up;
console.log(move);  // 0 (컴파일된 JavaScript에서는 단순히 상수 값으로 대체)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;const enum은 TypeScript에서만 인식 가능하며, 열거형 값이 자바스크립트 코드에서 직접 상수 값으로 변환되어 성능을 최적화할 수 있습니다.&lt;/p&gt;</description>
      <category>TypeScript</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/162</guid>
      <comments>https://fullstack-eun.tistory.com/162#entry162comment</comments>
      <pubDate>Thu, 14 Nov 2024 11:34:43 +0900</pubDate>
    </item>
    <item>
      <title>[ TypeScript ] 개념 , 컴파일 옵션 설정</title>
      <link>https://fullstack-eun.tistory.com/161</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; TypeScript란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 Microsoft에서 개발한 &lt;b&gt;오픈 소스 프로그래밍 언어&lt;/b&gt;로, &lt;b&gt;JavaScript의 상위 집합(Superset)&lt;/b&gt; 입니다. TypeScript는 JavaScript의 모든 기능을 포함하며, 여기에 &lt;b&gt;정적 타입 지정&lt;/b&gt;(Static Typing)과 &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;h3 data-end=&quot;112&quot; data-start=&quot;81&quot; data-ke-size=&quot;size23&quot;&gt;타입스크립트를 배워야 하는 이유&amp;nbsp;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;1002&quot; data-start=&quot;114&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;235&quot; data-start=&quot;114&quot;&gt;&lt;b&gt;타입 안정성 &amp;rarr; 버그 감소&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;235&quot; data-start=&quot;139&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;174&quot; data-start=&quot;139&quot;&gt;JS의 동적 타입 특성으로 생기는 예기치 못한 에러 방지&lt;/li&gt;
&lt;li data-end=&quot;207&quot; data-start=&quot;178&quot;&gt;타입이 명확하니 주니어 개발자의 실수도 줄어듦&lt;/li&gt;
&lt;li data-end=&quot;235&quot; data-start=&quot;211&quot;&gt;안정된 코드 작성이 가능 &amp;rarr; 생산성 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;361&quot; data-start=&quot;237&quot;&gt;&lt;b&gt;협업에 유리&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;361&quot; data-start=&quot;254&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;288&quot; data-start=&quot;254&quot;&gt;자동 완성, 타입 추론, 문서화 없이도 코드 이해 가능&lt;/li&gt;
&lt;li data-end=&quot;325&quot; data-start=&quot;292&quot;&gt;VSCode에서 호버만 해도 함수/컴포넌트 정보 확인&lt;/li&gt;
&lt;li data-end=&quot;361&quot; data-start=&quot;329&quot;&gt;팀 작업 시 커뮤니케이션 비용 감소 &amp;rarr; 개발 속도 향상&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;488&quot; data-start=&quot;363&quot;&gt;&lt;b&gt;JS와 100% 호환 + 점진적 도입 가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;488&quot; data-start=&quot;397&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;424&quot; data-start=&quot;397&quot;&gt;기존 JS 프로젝트에 점진적으로 도입 가능&lt;/li&gt;
&lt;li data-end=&quot;458&quot; data-start=&quot;428&quot;&gt;기존 문법 그대로 사용하면서 타입만 추가하면 됨&lt;/li&gt;
&lt;li data-end=&quot;488&quot; data-start=&quot;462&quot;&gt;JS를 알면 TS는 &amp;lsquo;확장팩&amp;rsquo;처럼 접근 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;646&quot; data-start=&quot;490&quot;&gt;&lt;b&gt;범용성 (프론트/백엔드/크로스 플랫폼)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;646&quot; data-start=&quot;522&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;592&quot; data-start=&quot;522&quot;&gt;React(웹), Node.js(백엔드), React Native(모바일), Electron(PC 앱) 등 전방위 호환&lt;/li&gt;
&lt;li data-end=&quot;624&quot; data-start=&quot;596&quot;&gt;하나의 언어 체계로 다양한 플랫폼 개발 가능&lt;/li&gt;
&lt;li data-end=&quot;646&quot; data-start=&quot;628&quot;&gt;코드 재사용성과 유지보수 용이&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;888&quot; data-start=&quot;648&quot;&gt;&lt;b&gt;NestJS 완벽 호환 (백엔드 개발에 강력함)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;888&quot; data-start=&quot;685&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;726&quot; data-start=&quot;685&quot;&gt;NestJS는 TypeScript를 전제로 설계된 백엔드 프레임워크&lt;/li&gt;
&lt;li data-end=&quot;783&quot; data-start=&quot;730&quot;&gt;데코레이터 기반 구조, 의존성 주입(DI), 모듈 시스템 등 Java/Spring과 유사&lt;/li&gt;
&lt;li data-end=&quot;841&quot; data-start=&quot;787&quot;&gt;DTO, 인터페이스, 커스텀 타입 정의로 API 개발 시 타입 안정성과 개발 효율이 뛰어남&lt;/li&gt;
&lt;li data-end=&quot;888&quot; data-start=&quot;845&quot;&gt;React, Next.js와 함께 사용하면 프론트-백엔드 타입 통합도 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1002&quot; data-start=&quot;890&quot;&gt;&lt;b&gt;미래 대비&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1002&quot; data-start=&quot;906&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;936&quot; data-start=&quot;906&quot;&gt;많은 오픈소스, 기업 프로젝트가 TS로 전환 중&lt;/li&gt;
&lt;li data-end=&quot;971&quot; data-start=&quot;940&quot;&gt;최신 웹 기술(ES6+ 등)과도 자연스럽게 연결됨&lt;/li&gt;
&lt;li data-end=&quot;1002&quot; data-start=&quot;975&quot;&gt;유지보수, 리팩토링, 확장성 면에서 훨씬 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TypeScript의&amp;nbsp; 특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;정적 타입 지정 (Static Typing)&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;TypeScript의 가장 큰 특징은 정적 타입을 지원한다는 것입니다. 변수, 함수의 매개변수, 반환 값 등에 타입을 명시하여 컴파일 시점에 타입 오류를 확인할 수 있습니다.&lt;/li&gt;
&lt;li&gt;예를 들어, 숫자만 받아야 하는 함수에 문자열을 전달하는 실수를 컴파일러가 미리 잡아주기 때문에 런타임 오류를 줄일 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731546974628&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function add(a: number, b: number): number {
    return a + b;
}

add(10, 20); // 정상 작동
add(&quot;10&quot;, 20); // 컴파일 오류 발생&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;b&gt;인터페이스와 클래스&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;TypeScript는 &lt;b&gt;객체지향 프로그래밍&lt;/b&gt;을 지원하며, &lt;b&gt;클래스, 인터페이스, 상속&lt;/b&gt; 등의 개념을 제공합니다. 이를 통해 객체지향 설계 원칙을 준수하며 코드의 구조를 더욱 견고하게 만들 수 있습니다.&lt;/li&gt;
&lt;li&gt;JavaScript ES6에서 도입된 클래스 문법을 확장하여 더 다양한 객체지향 프로그래밍을 가능하게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731547255274&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;interface Person {
    name: string;
    age: number;
}

class Employee implements Person {
    constructor(public name: string, public age: number, public position: string) {}
}

const emp = new Employee(&quot;Alice&quot;, 25, &quot;Developer&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;더 나은 개발 도구 지원&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;TypeScript는 코드 작성 중에 &lt;b&gt;자동 완성, 타입 검사, 리팩토링 도구&lt;/b&gt;의 도움을 받아 생산성을 높일 수 있습니다.&lt;/li&gt;
&lt;li&gt;Visual Studio Code와 같은 에디터에서 TypeScript의 기능을 사용하면, 코드 작성 중에 오류를 실시간으로 확인할 수 있고 자동 완성도 훨씬 정확합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최신 JavaScript 기능 지원&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;TypeScript는 최신 ECMAScript(ES) 표준을 빠르게 반영하고 있으며, ES6 이상의 문법도 TypeScript에서 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;TypeScript 컴파일러는 최신 문법을 구형 브라우저에서도 호환되는 ES5나 ES3로 변환할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;컴파일러를 통한 오류 방지&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TypeScript는 작성된 코드를 JavaScript로 컴파일합니다. 컴파일 과정에서 타입 오류나 문법 오류를 미리 감지하여 런타임 오류를 줄일 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;대규모 프로젝트에 적합&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TypeScript는 코드의 가독성과 유지보수성을 높여주기 때문에, 대규모 프로젝트에서 특히 유리합니다. 타입 정보를 통해 협업 시 더 명확한 의사소통이 가능하고, 리팩토링 시에도 안정적인 작업이 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TypeScript와 JavaScript의 차이&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;기능&lt;/td&gt;
&lt;td&gt;JavaScript&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;타입 지정&lt;/td&gt;
&lt;td&gt;동적(Dynamic) 타입&lt;/td&gt;
&lt;td&gt;정적(Static) 타입, 명시적 타입 지정 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;인터페이스 지원&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;컴파일&lt;/td&gt;
&lt;td&gt;필요 없음&lt;/td&gt;
&lt;td&gt;TypeScript &amp;rarr; JavaScript 컴파일 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;오류 감지&lt;/td&gt;
&lt;td&gt;런타임 오류&lt;/td&gt;
&lt;td&gt;컴파일 시점에 오류 감지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;최신 ES 기능 지원&lt;/td&gt;
&lt;td&gt;최신 ES 표준에 따라 다름&lt;/td&gt;
&lt;td&gt;최신 ES 기능을 바로 사용 가능, 하위 호환성 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TypeScript의 장단점&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;장점&lt;/b&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;단점&lt;/b&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;학습 곡선이 존재하며, 특히 JavaScript에 익숙하지 않은 경우 적응이 필요함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TypeScript 설치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript는 전역(global) 설치와 프로젝트 단위(local) 설치가 가능합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;전역 설치&lt;/b&gt;: 모든 프로젝트에서 TypeScript를 사용하고 싶을 때&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731548965512&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g typescript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬 설치: 특정 프로젝트에서만 TypeScript를 사용할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731548989593&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install --save-dev typescript&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VSCode에서 TypeScript 설정&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;(1) 프로젝트에 TypeScript 설정 파일(tsconfig.json) 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TypeScript를 제대로 사용하기 위해서는 tsconfig.json 파일이 필요합니다. 이 파일은 TypeScript 컴파일러의 설정을 정의합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 루트에서 아래 명령어를 실행하여 tsconfig.json 파일을 생성합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731549017323&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx tsc --init&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;h4 data-ke-size=&quot;size20&quot;&gt;(2) tsconfig.json 기본 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1731549039054&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;compilerOptions&quot;: {
        &quot;target&quot;: &quot;ESNext&quot;,
        &quot;module&quot;: &quot;ESNext&quot;,
        &quot;outDir&quot;: &quot;dist&quot;,
        &quot;moduleDetection&quot;: &quot;force&quot;
    },
    &quot;ts-node&quot;: {
        &quot;esm&quot;: true
    },
    &quot;include&quot;: [&quot;src&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731550200514&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;compilerOptions&quot;: {
    &quot;target&quot;: &quot;ESNext&quot;,
    &quot;module&quot;: &quot;none&quot;,
    &quot;outDir&quot;: &quot;dist&quot;,
    &quot;strict&quot;: true
  },
  &quot;include&quot;: [&quot;src&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; compilerOptions &lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;target:&lt;/b&gt; &quot;ESNext&quot;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴파일된 JavaScript 코드의 &lt;b&gt;타겟 버전&lt;/b&gt;을 설정합니다. 여기서 ESNext로 설정하여 최신 ECMAScript 기능을 포함하여 JavaScript 코드로 변환합니다.&lt;/li&gt;
&lt;li&gt;이 설정을 통해 최신 기능을 그대로 유지하여, 최신 브라우저 또는 Node.js 환경에서 최신 문법을 사용할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;module:&lt;/b&gt; &quot;ESNext&quot;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JavaScript &lt;b&gt;모듈 시스템&lt;/b&gt;을 설정합니다. ESNext로 설정하여 ECMAScript 모듈 표준(ESM)을 사용하도록 지정합니다.&lt;/li&gt;
&lt;li&gt;브라우저와 최신 Node.js 버전에서 호환되는 모듈 형식을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;outDir:&lt;/b&gt; &quot;dist&quot;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴파일된 JavaScript 파일의 &lt;b&gt;출력 폴더&lt;/b&gt;를 지정합니다. 여기서는 dist 폴더로 설정되어 있으며, TypeScript 파일을 컴파일할 때 모든 출력 파일이 이 폴더에 생성됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;moduleDetection:&lt;/b&gt; &quot;force&quot;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 파일을 강제로 &lt;b&gt;모듈로 인식&lt;/b&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ts-node&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ts-node는 TypeScript 코드를 즉시 실행할 수 있는 도구로, 이 프로젝트에서는 ts-node 설정이 포함되어 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;esm:&lt;/b&gt; true
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ts-node에서 &lt;b&gt;ES 모듈 지원&lt;/b&gt;을 활성화합니다. 이를 통해 TypeScript 코드를 실행할 때 ECMAScript 모듈로 실행되도록 합니다.&lt;/li&gt;
&lt;li&gt;Node.js 환경에서 ts-node가 ESM 모듈 형식을 사용할 수 있도록 설정하여, import/export 구문을 그대로 사용할 수 있습니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;include&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;include:&lt;/b&gt; [&quot;src&quot;]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴파일에 포함할 파일 및 폴더를 지정합니다. src 폴더 아래의 모든 파일이 컴파일에 포함됩니다.&lt;/li&gt;
&lt;li&gt;이를 통해 src 폴더 외의 다른 파일들은 컴파일에서 제외되어, 컴파일 범위를 제한하고 필요한 파일만 컴파일합니다.&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;h4 data-ke-size=&quot;size20&quot;&gt;(3) TypeScript 구문 오류 표시 및 자동 컴파일&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode는 기본적으로 TypeScript 오류를 실시간으로 보여줍니다. tsconfig.json 설정 후 TypeScript 파일을 작성하면, 컴파일 오류가 있는 경우 VSCode 에디터에서 바로 확인할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자동 컴파일&lt;/b&gt;: TypeScript 파일을 변경할 때마다 자동으로 컴파일하려면 터미널에서 다음 명령어를 실행하여 watch 모드를 사용할 수 있습니다.
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1731549058600&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx tsc -w&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. VSCode 확장 기능 설치 (Optional)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ESLint&lt;/b&gt;나 &lt;b&gt;Prettier&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;b&gt;ESLint&lt;/b&gt;: TypeScript 코드에서 린트 검사를 통해 코드 스타일 유지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Prettier&lt;/b&gt;: 코드 자동 포맷팅&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 실행 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode에서 .ts 파일을 생성하고 간단한 코드를 작성한 뒤, 터미널에서 npx tsc를 실행하여 tsconfig.json 설정대로 컴파일되는지 확인합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731549745232&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;프로젝트 루트
├── src                    // TypeScript 소스 파일을 포함하는 폴더
│   ├── components         // React 컴포넌트나 일반 모듈을 위한 폴더 (선택 사항)
│   ├── models             // 데이터 모델 정의 파일을 위한 폴더 (선택 사항)
│   ├── services           // API 호출 등 서비스 관련 파일을 위한 폴더 (선택 사항)
│   ├── utils              // 유틸리티 함수 등을 위한 폴더 (선택 사항)
│   └── index.ts           // 프로젝트의 진입점 파일
├── dist                   // 컴파일된 JavaScript 파일이 저장되는 폴더 (컴파일 시 자동 생성)
├── tsconfig.json          // TypeScript 설정 파일
└── package.json           // 프로젝트의 패키지 및 스크립트 정보&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;src/&lt;/b&gt;: TypeScript 소스 파일이 위치하는 메인 폴더입니다. 모든 .ts 파일이 이곳에 들어가며, tsconfig.json의 설정에 따라 dist 폴더로 컴파일됩니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;components/&lt;/b&gt;: React 컴포넌트나 재사용 가능한 모듈을 추가할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;models/&lt;/b&gt;: 인터페이스나 타입 정의 등 데이터 모델 파일을 저장합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;services/&lt;/b&gt;: API 호출 등 서비스 관련 로직을 모아 관리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;utils/&lt;/b&gt;: 유틸리티 함수와 같은 공통 코드를 저장합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;index.ts&lt;/b&gt;: 프로젝트의 진입점 파일로, 가장 기본적인 실행 파일입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;dist/&lt;/b&gt;: TypeScript 파일이 컴파일되면서 JavaScript 파일이 이 폴더에 저장됩니다. TypeScript 설정에 따라 outDir 옵션으로 이 폴더에 지정되었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lftuY/btsKH6nHiq9/ZSq9kpkej2WG3540hvGvH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lftuY/btsKH6nHiq9/ZSq9kpkej2WG3540hvGvH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lftuY/btsKH6nHiq9/ZSq9kpkej2WG3540hvGvH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlftuY%2FbtsKH6nHiq9%2FZSq9kpkej2WG3540hvGvH0%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;1149&quot; height=&quot;465&quot; data-origin-width=&quot;1149&quot; data-origin-height=&quot;465&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Projects 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;incremental: &lt;b&gt;증분 컴파일&lt;/b&gt;을 활성화하여, 컴파일이 완료된 .tsbuildinfo 파일을 저장하고 이후 변경된 부분만 컴파일하여 속도를 높입니다.&lt;/li&gt;
&lt;li&gt;composite: &lt;b&gt;프로젝트 참조&lt;/b&gt; 기능을 활성화하여, 다른 TypeScript 프로젝트 간의 참조를 가능하게 합니다.&lt;/li&gt;
&lt;li&gt;tsBuildInfoFile: 증분 컴파일 정보를 저장할 파일의 경로를 지정합니다.&lt;/li&gt;
&lt;li&gt;disableSourceOfProjectReferenceRedirect: 프로젝트 참조 시 선언 파일이 아닌 소스 파일을 선호하지 않도록 설정합니다.&lt;/li&gt;
&lt;li&gt;disableSolutionSearching: 다중 프로젝트 참조 확인을 비활성화합니다.&lt;/li&gt;
&lt;li&gt;disableReferencedProjectLoad: TypeScript가 자동으로 로드하는 프로젝트 수를 줄입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Language and Environment (언어 및 환경) 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;target: 컴파일된 JavaScript의 &lt;b&gt;버전&lt;/b&gt;을 지정합니다. 예: es2016.&lt;/li&gt;
&lt;li&gt;lib: 타겟 런타임 환경에 포함할 &lt;b&gt;라이브러리&lt;/b&gt; 선언 파일들을 지정합니다.&lt;/li&gt;
&lt;li&gt;jsx: JSX 코드를 어떻게 생성할지 설정합니다.&lt;/li&gt;
&lt;li&gt;experimentalDecorators: &lt;b&gt;데코레이터&lt;/b&gt;를 지원합니다.&lt;/li&gt;
&lt;li&gt;emitDecoratorMetadata: 데코레이터에 대해 타입 메타데이터를 생성합니다.&lt;/li&gt;
&lt;li&gt;jsxFactory, jsxFragmentFactory, jsxImportSource: React JSX 생성을 위해 필요한 JSX 함수 또는 프래그먼트 설정을 지정합니다.&lt;/li&gt;
&lt;li&gt;noLib: 기본 라이브러리 파일을 포함하지 않도록 설정합니다.&lt;/li&gt;
&lt;li&gt;useDefineForClassFields: ECMAScript 표준에 따라 클래스 필드를 생성합니다.&lt;/li&gt;
&lt;li&gt;moduleDetection: 모듈 형식을 자동으로 감지하도록 설정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Modules (모듈) 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;module: 컴파일된 코드의 &lt;b&gt;모듈 형식&lt;/b&gt;을 지정합니다. 예: commonjs.&lt;/li&gt;
&lt;li&gt;rootDir: 소스 파일의 루트 폴더를 지정합니다.&lt;/li&gt;
&lt;li&gt;moduleResolution: 모듈을 검색하는 방식을 설정합니다.&lt;/li&gt;
&lt;li&gt;baseUrl: 상대가 아닌 모듈 경로의 기준 디렉터리를 지정합니다.&lt;/li&gt;
&lt;li&gt;paths: 특정 경로에서 모듈을 찾도록 재매핑합니다.&lt;/li&gt;
&lt;li&gt;resolveJsonModule: JSON 파일을 모듈로 가져오는 기능을 활성화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;JavaScript 지원 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;allowJs: JavaScript 파일을 프로그램에 포함할 수 있게 합니다.&lt;/li&gt;
&lt;li&gt;checkJs: 타입 체크된 JavaScript 파일에 오류 보고를 활성화합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Emit (출력) 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;declaration: .d.ts 파일을 생성합니다.&lt;/li&gt;
&lt;li&gt;sourceMap: 디버깅을 위해 JavaScript 파일의 소스 맵 파일을 생성합니다.&lt;/li&gt;
&lt;li&gt;noEmit: 파일 생성을 비활성화합니다.&lt;/li&gt;
&lt;li&gt;outDir: 생성된 파일의 출력 폴더를 지정합니다.&lt;/li&gt;
&lt;li&gt;removeComments: 주석을 제거하고 파일을 생성합니다.&lt;/li&gt;
&lt;li&gt;inlineSourceMap: 생성된 JavaScript 내에 소스 맵을 포함합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Interop Constraints (상호 운용성 제약 조건) 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;esModuleInterop: CommonJS 모듈을 쉽게 가져올 수 있도록 JavaScript 코드를 추가로 생성합니다. allowSyntheticDefaultImports도 활성화됩니다.&lt;/li&gt;
&lt;li&gt;forceConsistentCasingInFileNames: 파일 이름 대소문자가 일치하도록 강제합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Type Checking (타입 검사) 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;strict: 모든 엄격한 타입 검사 옵션을 활성화합니다.&lt;/li&gt;
&lt;li&gt;noImplicitAny: 암시적 any 타입을 허용하지 않습니다.&lt;/li&gt;
&lt;li&gt;strictNullChecks: null과 undefined를 타입 검사에 포함합니다.&lt;/li&gt;
&lt;li&gt;noUnusedLocals: 읽지 않는 지역 변수에 대해 오류를 보고합니다.&lt;/li&gt;
&lt;li&gt;noImplicitReturns: 모든 코드 경로에서 반환을 명시적으로 하도록 설정합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Completeness (완전성) 관련 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;skipLibCheck: .d.ts 파일의 타입 검사를 생략하여 컴파일 속도를 높입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;# 구조&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 폴더 만들기&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 설치&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1741841205425&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install -g typescript
npx tsc --init
npx tsc -w&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. tsconfig.json&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1741839435073&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;compilerOptions&quot;: {
        &quot;target&quot;: &quot;ESNext&quot;,
        &quot;module&quot;: &quot;ESNext&quot;,
        &quot;outDir&quot;: &quot;./src/dist&quot;,
        &quot;moduleDetection&quot;: &quot;force&quot;
    },
    &quot;ts-node&quot;: {
        &quot;esm&quot;: true
    },
    &quot;include&quot;: [&quot;src&quot;]
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4cSDg/btsMKHE2AJk/LRKysmEK6b8Musy7fAqD2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4cSDg/btsMKHE2AJk/LRKysmEK6b8Musy7fAqD2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4cSDg/btsMKHE2AJk/LRKysmEK6b8Musy7fAqD2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4cSDg%2FbtsMKHE2AJk%2FLRKysmEK6b8Musy7fAqD2K%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;256&quot; height=&quot;358&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;358&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;pre id=&quot;code_1741841405888&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  ts-study
├──   dist              # TypeScript 컴파일 후 생성된 JS 파일 저장소
│   ├── ch01_1.js
│   ├── ch01_2.js
├──   src               # TypeScript 소스 코드 폴더
│   ├──   asset/images  # 이미지 파일 저장소
│   │   ├── img1.png
│   │   ├── img2.jpg
│   │   ├── img3.jpg
│   ├──   basics        # 기본 문법 학습 코드
│   │   ├── ch01_1.ts
│   │   ├── ch01_2.ts
├──   view              # 정적 파일 저장소 (HTML 파일 등)
│   ├── index.html
├── tsconfig.json        # TypeScript 설정 파일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;568&quot; data-start=&quot;542&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;구조 분석&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-end=&quot;803&quot; data-start=&quot;569&quot; data-ke-size=&quot;size16&quot;&gt;✔ &lt;b&gt;src/basics/&lt;/b&gt; &amp;rarr; 기본적인 TypeScript 문법을 학습하는 코드 저장&lt;br /&gt;✔ &lt;b&gt;src/asset/images/&lt;/b&gt; &amp;rarr; 학습 중 필요한 이미지 파일 저장&lt;br /&gt;✔ &lt;b&gt;view/index.html&lt;/b&gt; &amp;rarr; HTML을 활용한 TypeScript 실행 테스트 (웹 브라우저에서 실행 가능)&lt;br /&gt;✔ &lt;b&gt;dist/&lt;/b&gt; &amp;rarr; TypeScript가 컴파일한 JavaScript 코드 저장 (실행용)&lt;/p&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drMcZ2/btsMH7Z1O2W/N25bPOAm3d5MNnGYs5hBpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drMcZ2/btsMH7Z1O2W/N25bPOAm3d5MNnGYs5hBpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drMcZ2/btsMH7Z1O2W/N25bPOAm3d5MNnGYs5hBpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrMcZ2%2FbtsMH7Z1O2W%2FN25bPOAm3d5MNnGYs5hBpk%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;945&quot; height=&quot;765&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. js&amp;nbsp; =&amp;gt; ctrl + alt + n&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;</description>
      <category>TypeScript</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/161</guid>
      <comments>https://fullstack-eun.tistory.com/161#entry161comment</comments>
      <pubDate>Thu, 14 Nov 2024 10:46:43 +0900</pubDate>
    </item>
    <item>
      <title>[ React ] mbti 유형검사</title>
      <link>https://fullstack-eun.tistory.com/155</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;mbti 유형검사&amp;nbsp;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MBTI(Myers-Briggs Type Indicator)는 심리 유형 이론을 기반으로 사람들의 성격을 16가지 유형으로 분류하는 성격 유형 검사입니다.&amp;nbsp;&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;h3 data-ke-size=&quot;size23&quot;&gt;MBTI의 16가지 성격 유형&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MBTI 성격 유형은 4개의 차원에서 각 성향을 조합하여 총 16가지로 나눌 수 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;E&lt;/b&gt; (외향) vs. &lt;b&gt;I&lt;/b&gt; (내향)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;S&lt;/b&gt; (감각) vs. &lt;b&gt;N&lt;/b&gt; (직관)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;T&lt;/b&gt; (사고) vs. &lt;b&gt;F&lt;/b&gt; (감정)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;J&lt;/b&gt; (판단) vs. &lt;b&gt;P&lt;/b&gt; (인식)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;각 MBTI 유형의 의미&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;E&lt;/b&gt; (Extraversion, 외향): 외부 세계와의 상호작용을 중시하고 사람들과 교류하는 것을 좋아합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;I&lt;/b&gt; (Introversion, 내향): 내면 세계에 집중하며 혼자만의 시간을 중요시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;S&lt;/b&gt; (Sensing, 감각): 현실적이고 사실적인 정보를 중시하며, 경험과 실제적인 감각을 통해 세상을 봅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N&lt;/b&gt; (Intuition, 직관): 추상적인 아이디어나 가능성에 관심을 가지며, 직관을 통해 세상을 해석합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;T&lt;/b&gt; (Thinking, 사고): 논리적이고 객관적인 분석을 통해 결정을 내립니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;F&lt;/b&gt; (Feeling, 감정): 감정과 가치, 타인의 감정을 고려하여 결정을 내립니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;J&lt;/b&gt; (Judging, 판단): 계획적이고 체계적인 방식을 선호하며, 일정을 중요시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;P&lt;/b&gt; (Perceiving, 인식): 유연하고 즉흥적인 방식을 선호하며, 상황에 맞춰 대처하는 것을 좋아합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. &lt;b&gt;외향성(E)&lt;/b&gt; vs. &lt;b&gt;내향성(I)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;외향성(E)&lt;/b&gt;: 외부 세계와의 상호작용을 통해 에너지를 얻습니다. 사람들과 함께 활동하거나 소통하는 것을 즐기며, 사교적이고 활발한 성격입니다. 새로운 경험을 통해 에너지를 얻고, 사람들과의 관계에 중점을 둡니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내향성(I)&lt;/b&gt;: 내면 세계에서 에너지를 얻습니다. 혼자만의 시간을 통해 재충전하며, 깊은 생각이나 개인적인 활동을 선호합니다. 사람들과의 상호작용보다는 혼자서 집중하는 것을 더 좋아합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. &lt;b&gt;감각(S)&lt;/b&gt; vs. &lt;b&gt;직관(N)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;감각(S)&lt;/b&gt;: 현실적이고 구체적인 정보를 중요시합니다. 오감으로 얻는 정보에 의존하며, 실제적이고 실용적인 해결책을 찾습니다. 현재에 집중하며, 과거의 경험을 통해 결정을 내립니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;직관(N)&lt;/b&gt;: 직관적이고 미래지향적인 정보를 중요시합니다. 사실보다는 가능성과 패턴을 중시하며, 큰 그림을 보려고 합니다. 창의적이고, 상상력을 사용해 아이디어를 발전시킵니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. &lt;b&gt;사고(T)&lt;/b&gt; vs. &lt;b&gt;감정(F)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;사고(T)&lt;/b&gt;: 논리적이고 객관적인 방식으로 결정을 내립니다. 사실과 분석을 바탕으로 판단하며, 감정보다는 원리와 규칙을 중시합니다. 효율적이고 공정한 결정을 내리는 것을 선호합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;감정(F)&lt;/b&gt;: 감정과 타인의 감정을 고려하여 결정을 내립니다. 사람들의 관계와 조화를 중시하며, 공감을 바탕으로 한 결정을 내립니다. 상황의 감정적 측면을 고려해 갈등을 해결하려고 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. &lt;b&gt;판단(J)&lt;/b&gt; vs. &lt;b&gt;인식(P)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&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;b&gt;판단(J)&lt;/b&gt;: 계획적이고 조직적인 방식을 선호합니다. 미리 계획을 세우고, 그 계획에 따라 체계적으로 일을 처리하는 것을 좋아합니다. 결정을 신속하게 내리고, 일관성 있는 방식을 선호합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인식(P)&lt;/b&gt;: 융통성 있고 즉흥적인 방식을 선호합니다. 상황에 따라 유연하게 대응하며, 미리 결정을 내리기보다는 열린 선택지를 유지하려고 합니다. 자유롭게 일을 처리하며, 즉흥적인 결정을 즐깁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MBTI 16가지 성격 유형 설명&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;ESTJ (외향-감각-사고-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ESTJ는 현실적이고 실용적인 성향을 가지고 있으며, 조직적으로 일을 처리하는 것을 좋아합니다. 책임감이 강하고, 목표를 설정하여 이를 성취하는 데 집중합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 리더십, 목표 지향적, 체계적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;ISTJ (내향-감각-사고-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ISTJ는 신뢰할 수 있고 책임감 있는 성향을 가지고 있습니다. 체계적이고 계획적으로 일을 처리하며, 논리적이고 실용적인 사고를 바탕으로 문제를 해결합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 신중함, 체계적, 실용적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. &lt;b&gt;ESTP (외향-감각-사고-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ESTP는 현실적인 문제 해결 능력을 가지고 있으며, 빠르게 결정을 내리고 행동하는 것을 선호합니다. 모험심이 강하고 새로운 경험을 즐깁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 현실적, 모험적, 즉각적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. &lt;b&gt;ISTP (내향-감각-사고-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ISTP는 독립적이고 실용적인 성향을 지니고 있습니다. 문제를 논리적으로 분석하고 해결책을 찾는 데 능숙하며, 도전적이고 분석적인 성격을 가지고 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 독립적, 분석적, 도전적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. &lt;b&gt;ENFP (외향-직관-감정-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ENFP는 창의적이고 열정적인 성향을 가지고 있으며, 사람들과의 관계에서 에너지를 얻습니다. 이상적이고 상상력이 풍부하며, 다양한 가능성을 탐구하는 것을 즐깁니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 창의적, 열정적, 사교적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;6. &lt;b&gt;INFP (내향-직관-감정-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: INFP는 이상적이고 내면적인 가치를 중시하며, 타인의 감정을 깊이 이해하고 공감합니다. 창의적이며 예술적 성향이 강하고, 자신의 가치와 일치하는 일을 중요시합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 이상적, 창의적, 공감력&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;7. &lt;b&gt;ENTJ (외향-직관-사고-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ENTJ는 전략적이고 결단력 있는 성향을 가지고 있으며, 리더십을 발휘하는 것을 즐깁니다. 목표 달성을 위해 체계적으로 계획을 세우고 실행하는 것을 선호합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 리더십, 전략적, 논리적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;8. &lt;b&gt;INTJ (내향-직관-사고-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: INTJ는 분석적이고 계획적인 성향을 가지고 있으며, 복잡한 문제를 해결하는 데 뛰어납니다. 미래 지향적인 사고를 하고, 체계적으로 계획을 세우는 것을 좋아합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 분석적, 계획적, 독립적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;9. &lt;b&gt;ESFJ (외향-감각-감정-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ESFJ는 타인을 돌보는 것을 즐기며, 사람들과의 관계에서 에너지를 얻습니다. 사회적 규범을 중시하고, 사람들에게 도움을 주는 것을 좋아합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 사교적, 친절함, 규범적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;10. &lt;b&gt;ISFJ (내향-감각-감정-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ISFJ는 세심하고 책임감 있는 성향을 가지고 있으며, 타인을 돕는 것을 중요시합니다. 세부 사항에 신경을 쓰며, 실용적이고 계획적으로 일을 처리합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 세심함, 책임감, 보호자적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;11. &lt;b&gt;ESFP (외향-감각-감정-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ESFP는 활발하고 외향적인 성향을 가지고 있으며, 사람들과 함께 즐거운 시간을 보내는 것을 좋아합니다. 즉흥적이고 현실적인 성향을 가지고 있으며, 지금 이 순간을 즐기는 경향이 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 즉흥적, 활발함, 사교적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;12. &lt;b&gt;ISFP (내향-감각-감정-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ISFP는 조용하고 겸손한 성향을 가지고 있으며, 현재의 감각적 경험을 중요시합니다. 예술적이고 창의적인 활동을 선호하며, 타인의 감정을 잘 이해합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 예술적, 겸손함, 감정적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;13. &lt;b&gt;ENTP (외향-직관-사고-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ENTP는 창의적이고 논쟁을 즐기며, 새로운 아이디어를 탐구하는 것을 좋아합니다. 빠르게 생각하고 문제를 해결하는 데 능숙하며, 변화와 혁신을 추구합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 혁신적, 논리적, 빠른 사고&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;14. &lt;b&gt;INTP (내향-직관-사고-인식)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: INTP는 지적이고 분석적인 성향을 가지고 있으며, 복잡한 이론과 아이디어를 탐구하는 것을 좋아합니다. 창의적이고 논리적인 사고를 하며, 문제를 깊이 분석하는 것을 선호합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 분석적, 논리적, 창의적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;15. &lt;b&gt;ENFJ (외향-직관-감정-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: ENFJ는 타인을 돕고 영감을 주는 것을 즐깁니다. 사교적이고 친절하며, 다른 사람을 이끄는 리더십을 발휘하는 성향이 강합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 리더십, 영감을 주는, 사교적&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;16. &lt;b&gt;INFJ (내향-직관-감정-판단)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명&lt;/b&gt;: INFJ는 깊이 있는 감정과 직관적인 사고를 가지고 있으며, 사람들을 돕고자 하는 강한 의지를 가지고 있습니다. 이상주의적이며, 타인을 이해하고 공감하는 능력이 뛰어납니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대표적 성향&lt;/b&gt;: 공감력, 이상적, 직관적&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFnNE/btsJ4QMS0Cv/D3Td59uSBgo8RUq4gSwKB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFnNE/btsJ4QMS0Cv/D3Td59uSBgo8RUq4gSwKB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFnNE/btsJ4QMS0Cv/D3Td59uSBgo8RUq4gSwKB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFnNE%2FbtsJ4QMS0Cv%2FD3Td59uSBgo8RUq4gSwKB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;860&quot; height=&quot;278&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkYveQ/btsJ6TnR3JG/AvY2efevFNT4qUTPEUfkck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkYveQ/btsJ6TnR3JG/AvY2efevFNT4qUTPEUfkck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkYveQ/btsJ6TnR3JG/AvY2efevFNT4qUTPEUfkck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkYveQ%2FbtsJ6TnR3JG%2FAvY2efevFNT4qUTPEUfkck%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;831&quot; height=&quot;383&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>React</category>
      <author>변쌤 (❁&amp;acute;◡`❁)</author>
      <guid isPermaLink="true">https://fullstack-eun.tistory.com/155</guid>
      <comments>https://fullstack-eun.tistory.com/155#entry155comment</comments>
      <pubDate>Mon, 14 Oct 2024 22:31:27 +0900</pubDate>
    </item>
  </channel>
</rss>