<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jayspod</title>
    <link>https://jayspod.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sat, 8 Aug 2026 06:17:10 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jay-dev</managingEditor>
    <image>
      <title>jayspod</title>
      <url>https://tistory1.daumcdn.net/tistory/6431772/attach/94ca84ae3c96431d995edc6a04e3d9d7</url>
      <link>https://jayspod.tistory.com</link>
    </image>
    <item>
      <title>[TIL] pretendard next.js에 적용</title>
      <link>https://jayspod.tistory.com/74</link>
      <description>&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;tailwind.config.js&lt;/h4&gt;
&lt;pre id=&quot;code_1698999747317&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/** @type {import('tailwindcss').Config} */
module.exports = {
    content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'],
    theme: {
        extend: {},
    },
    plugins: [],
};&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;globals.css&lt;/h4&gt;
&lt;pre id=&quot;code_1698999787460&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
    @font-face {
        font-family: 'Pretendard';
        src: url('/fonts/pretendard-regular.subset.woff2') format('woff2');
        font-display: swap;
    }

    html {
        font-family: 'Pretendard', ui-sans-serif, system-ui, -apple-system,
            BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial,
            'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji',
            'Segoe UI Symbol', 'Noto Color Emoji';
    }
}&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;</description>
      <category>Programming</category>
      <category>Nextjs</category>
      <category>pretendard</category>
      <category>tailwindcss</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/74</guid>
      <comments>https://jayspod.tistory.com/74#entry74comment</comments>
      <pubDate>Fri, 3 Nov 2023 17:24:28 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 프로그래머스 푸드 파이트 대회</title>
      <link>https://jayspod.tistory.com/72</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/134240&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로그래머스 문제링크&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1698035656458&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;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/134240&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DIldc/hyUkdCOhdS/S1tLMUk6KPKy4CeY09XbHK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/j009K/hyUgL2e2jv/UYjTPy9dhngKw13yHbw6k0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/134240&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/134240&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DIldc/hyUkdCOhdS/S1tLMUk6KPKy4CeY09XbHK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/j009K/hyUgL2e2jv/UYjTPy9dhngKw13yHbw6k0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&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;h3 data-ke-size=&quot;size23&quot;&gt;Try / Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1698035670053&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(food) {
  let answer = &quot;&quot;;
  for (let i = 1; i &amp;lt; food.length; i++) {
    answer += String(i).repeat(Math.floor(food[i] / 2));
  }
  return answer + &quot;0&quot; + [...answer].reverse().join(&quot;&quot;);
}&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;1부터 해당 인덱스만큼 반복 -&amp;gt; 0을 중심으로 양쪽에 같은 음식의 갯수가 놓여야 하니 2로 나누고 버림&lt;/li&gt;
&lt;li&gt;만들어진 문자열을 왼쪽에 두고 물인 0을 중심으로 오른쪽에 문자열을 거꾸로 뒤집는다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <category>알고리즘</category>
      <category>자바스크립트</category>
      <category>푸드 파이트 대회</category>
      <category>프로그래머스</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/72</guid>
      <comments>https://jayspod.tistory.com/72#entry72comment</comments>
      <pubDate>Mon, 23 Oct 2023 13:37:13 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 프로그래머스 예상 대진표</title>
      <link>https://jayspod.tistory.com/71</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12985&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로그래머스 문제링크&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697626420816&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;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12985&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZgvTY/hyUdNzfnRG/8vgZrv8JMVW1KkPZAqeaNK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cg43vY/hyUdNlFFAM/q7iYzGqNZcw8dkhNWme5t0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12985&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12985&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZgvTY/hyUdNzfnRG/8vgZrv8JMVW1KkPZAqeaNK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cg43vY/hyUdNlFFAM/q7iYzGqNZcw8dkhNWme5t0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Try / Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1697626445163&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(n,a,b)
{
  let round = 0;
    
    while (a !== b) {
        a = Math.ceil(a/2);
        b = Math.ceil(b/2);
        answer++;
    }
    return round;
}&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;a와 b는 2로 나누었을 때 올림한 만큼의 번호가 부여된다 -&amp;gt; 1과 2 중에 승리자는 다음 라운드에 1번이 되고 3,4는 2번이 된다&lt;/li&gt;
&lt;li&gt;a와 b를 2로 나누었을 때 올림한 값이 같을 때의 라운드 값을 출력한다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <category>알고리즘</category>
      <category>예상 대진표</category>
      <category>자바스크립트</category>
      <category>프로그래머스</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/71</guid>
      <comments>https://jayspod.tistory.com/71#entry71comment</comments>
      <pubDate>Wed, 18 Oct 2023 19:58:31 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 프로그래머스 구명보트</title>
      <link>https://jayspod.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42885&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로그래머스 문제링크&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697518389238&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;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42885&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bgNLD3/hyUgVB4Dqb/l0emxB66daR9CikclbSWkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ov2tU/hyUgQ1PRaT/nCxKtroMh0F8wzAp4iC9q0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42885&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42885&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bgNLD3/hyUgVB4Dqb/l0emxB66daR9CikclbSWkK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/ov2tU/hyUgQ1PRaT/nCxKtroMh0F8wzAp4iC9q0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&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;h3 data-ke-size=&quot;size23&quot;&gt;Try / Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1697518440465&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(people, limit) {
    
    people.sort((a,b) =&amp;gt; b-a);
    
    let answer = 0;
    
    let left = 0;
    let right = people.length -1;
    
    while(left &amp;lt; right){
        const sum = people[left] + people[right];
        if(sum &amp;gt; limit){
            left++;
        } else {
            left++;
            right--;
        }
        answer++;
    }
    if(left === right) answer++;
    return answer;
}&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;사람들을 내림차순으로 정렬&lt;/li&gt;
&lt;li&gt;가장 무거운 사람과 가장 가벼운 사람의 무게를 합쳤을 때 보트의 무게제한보다 크다면 무거운 사람만 태우고 작다면 둘다 태움&lt;/li&gt;
&lt;li&gt;마지막 한 사람이 남는다면 보트에 태움&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <category>구명보트</category>
      <category>알고리즘</category>
      <category>자바스크립트</category>
      <category>프로그래머스</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/70</guid>
      <comments>https://jayspod.tistory.com/70#entry70comment</comments>
      <pubDate>Tue, 17 Oct 2023 13:56:28 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 프로그래머스 점프와 순간 이동</title>
      <link>https://jayspod.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12980&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로그래머스 문제링크&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697460805027&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;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12980&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bKAGOe/hyUgRGkEAG/akKWSna8ku7bGVrkryMgfK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/sw8Ms/hyUgGY6N2s/Pr05G63PliNkWx5TxjYEVk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12980&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12980&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bKAGOe/hyUgRGkEAG/akKWSna8ku7bGVrkryMgfK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/sw8Ms/hyUgGY6N2s/Pr05G63PliNkWx5TxjYEVk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&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;h3 data-ke-size=&quot;size23&quot;&gt;Try / Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1697460828212&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(n) {
    let battery = 0;
    while(n &amp;gt; 0) {
        if(n % 2 === 0) {
            n = n / 2;
        } else {
            n--;
            battery++;
        }
    }
    
    return battery;
}&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;2배 이동하는 순간이동은 배터리가 줄지 않으므로 2로 나눌 수 있다면 나눈다&lt;/li&gt;
&lt;li&gt;2로 나눌 수 없다면 1만큼의 배터리를 소모하여 n에서 1을 빼준 후 다시 나눈다&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <category>알고리즘</category>
      <category>자바스크립트</category>
      <category>점프와 순간이동</category>
      <category>프로그래머스</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/69</guid>
      <comments>https://jayspod.tistory.com/69#entry69comment</comments>
      <pubDate>Mon, 16 Oct 2023 21:55:36 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 프로그래머스 카펫</title>
      <link>https://jayspod.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42842&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로그래머스 문제링크&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697166927889&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;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42842&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/i5989/hyT9Mf2aV9/1fkK3XHnR7yEiVSU0WJTx0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/wfxWy/hyUdSyT2sc/PesjuoSGLl1MY7aoA8rHi0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42842&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/42842&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/i5989/hyT9Mf2aV9/1fkK3XHnR7yEiVSU0WJTx0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/wfxWy/hyUdSyT2sc/PesjuoSGLl1MY7aoA8rHi0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&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;h3 data-ke-size=&quot;size23&quot;&gt;Try / Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1697166957699&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(brown, yellow) {
    
    let area= brown + yellow;
    
    for (let y = 3; y &amp;lt;= area/3; y++) {
        let x = area/y
        
        if( (x-2) * (y-2) === yellow) {
            return [x, y]
        }
    }
}&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;전체 넓이 = brown + yellow&lt;/li&gt;
&lt;li&gt;brown + yellow = x * y&lt;/li&gt;
&lt;li&gt;반복문을 시작하는 세로의 최솟값은 3 -&amp;gt; 세로는 가로보다 같거나 작으니 가로까지 반복&lt;/li&gt;
&lt;li&gt;가로 = 넓이 / 세로&lt;/li&gt;
&lt;li&gt;(x-2) * (y-2) === yellow 라면 그 x,y 값 출력&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Programming</category>
      <category>Til</category>
      <category>알고리즘</category>
      <category>프로그래머스</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/68</guid>
      <comments>https://jayspod.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 13 Oct 2023 12:19:58 +0900</pubDate>
    </item>
    <item>
      <title>[알고리즘] 프로그래머스 다음 큰 숫자</title>
      <link>https://jayspod.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12911&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로그래머스 문제링크&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1697110441557&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;프로그래머스&quot; data-og-description=&quot;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12911&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RChHw/hyT9FODEk4/kC0k5jF3cuQPfyk40zbSI0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cjasrN/hyT9Hr8q4q/tIWIHNfpzmMem9FC9Y3u6k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12911&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/12911&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RChHw/hyT9FODEk4/kC0k5jF3cuQPfyk40zbSI0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cjasrN/hyT9Hr8q4q/tIWIHNfpzmMem9FC9Y3u6k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&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;h3 data-ke-size=&quot;size23&quot;&gt;Try / Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1697110467530&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function countOne(n) {
    let count = 0
    let binaryArr = n.toString(2).split('');
    for(let i = 0; i &amp;lt; binaryArr.length; i++) {
        if (binaryArr[i] == 1) { count++; }
    }
    return count; 
}

function solution(n) {
    let result = n;
    while(true) {
        result++; 
        if(countOne(result) == countOne(n)) {
            return result;
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n을 2진수로 바꾼 뒤 1의 개수를 찾는 함수 countOne&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n에 1씩 더한 뒤 2진수로 바꿔 1의 개수를 찾아 n과 같은 1의 개수를 갖는 첫번째 수를 찾음&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;Advancd Solution&lt;/h3&gt;
&lt;pre id=&quot;code_1697110709914&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function solution(n,a=n+1) {
    return n.toString(2).match(/1/g).length == a.toString(2).match(/1/g).length ? a : solution(n,a+1);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재귀와 정규표현식을 활용한 풀이&lt;/p&gt;</description>
      <category>Programming</category>
      <category>Til</category>
      <category>다음큰수</category>
      <category>알고리즘</category>
      <category>프로그래머스</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/67</guid>
      <comments>https://jayspod.tistory.com/67#entry67comment</comments>
      <pubDate>Thu, 12 Oct 2023 20:39:12 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] REST API, GraphQL</title>
      <link>https://jayspod.tistory.com/66</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;REST API&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;REST (Representational State Transfer) API는 웹 서비스와 클라이언트 간에 정보를 교환하기 위한 아키텍처 스타일 및 접근 방식입니다. REST는 웹의 기본 구조를 활용하여 자원에 대한 CRUD (Create, Read, Update, Delete) 작업을 수행하게 됩니다.&lt;br /&gt;&lt;br /&gt;자원(Resource)&amp;nbsp;지향적:&amp;nbsp;REST는&amp;nbsp;웹&amp;nbsp;상의&amp;nbsp;모든&amp;nbsp;것을&amp;nbsp;자원으로&amp;nbsp;간주합니다.&amp;nbsp;각&amp;nbsp;자원은&amp;nbsp;고유한&amp;nbsp;URI&amp;nbsp;(Uniform&amp;nbsp;Resource&amp;nbsp;Identifier)를&amp;nbsp;가지며,&amp;nbsp;이&amp;nbsp;URI를&amp;nbsp;통해&amp;nbsp;해당&amp;nbsp;자원에&amp;nbsp;접근할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;무상태성(Statelessness):&amp;nbsp;각&amp;nbsp;요청은&amp;nbsp;서버에&amp;nbsp;모든&amp;nbsp;필요한&amp;nbsp;정보를&amp;nbsp;포함해야&amp;nbsp;합니다.&amp;nbsp;서버는&amp;nbsp;클라이언트의&amp;nbsp;상태&amp;nbsp;정보를&amp;nbsp;저장하지&amp;nbsp;않으며,&amp;nbsp;이로&amp;nbsp;인해&amp;nbsp;각&amp;nbsp;요청은&amp;nbsp;독립적으로&amp;nbsp;수행됩니다.&lt;br /&gt;&lt;br /&gt;표현(Representation):&amp;nbsp;자원은&amp;nbsp;여러&amp;nbsp;형태의&amp;nbsp;표현을&amp;nbsp;가질&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;서버는&amp;nbsp;데이터를&amp;nbsp;JSON,&amp;nbsp;XML&amp;nbsp;등&amp;nbsp;다양한&amp;nbsp;형식으로&amp;nbsp;반환할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;통신의&amp;nbsp;비공식성(Stateless&amp;nbsp;Communication):&amp;nbsp;RESTful&amp;nbsp;서비스는&amp;nbsp;일반적으로&amp;nbsp;HTTP&amp;nbsp;프로토콜을&amp;nbsp;사용하여&amp;nbsp;클라이언트와&amp;nbsp;통신합니다.&amp;nbsp;HTTP&amp;nbsp;메서드&amp;nbsp;(GET,&amp;nbsp;POST,&amp;nbsp;PUT,&amp;nbsp;DELETE&amp;nbsp;등)는&amp;nbsp;자원에&amp;nbsp;대한&amp;nbsp;CRUD&amp;nbsp;작업을&amp;nbsp;나타냅니다.&lt;br /&gt;&lt;br /&gt;무작정성(Cacheable):&amp;nbsp;응답은&amp;nbsp;캐시&amp;nbsp;가능하거나&amp;nbsp;캐시&amp;nbsp;불가능하다는&amp;nbsp;방식으로&amp;nbsp;표시될&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;캐시&amp;nbsp;가능한&amp;nbsp;응답은&amp;nbsp;클라이언트&amp;nbsp;측에서&amp;nbsp;캐시될&amp;nbsp;수&amp;nbsp;있으며,&amp;nbsp;이로&amp;nbsp;인해&amp;nbsp;성능이&amp;nbsp;향상될&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;계층적&amp;nbsp;구조(Layered&amp;nbsp;System):&amp;nbsp;REST는&amp;nbsp;계층화&amp;nbsp;된&amp;nbsp;시스템을&amp;nbsp;지원합니다.&amp;nbsp;클라이언트는&amp;nbsp;최종&amp;nbsp;서버와&amp;nbsp;직접&amp;nbsp;통신하는지,&amp;nbsp;중간&amp;nbsp;계층을&amp;nbsp;통해&amp;nbsp;통신하는지&amp;nbsp;알&amp;nbsp;필요가&amp;nbsp;없습니다.&lt;br /&gt;&lt;br /&gt;REST&amp;nbsp;API는&amp;nbsp;웹&amp;nbsp;서비스와&amp;nbsp;클라이언트&amp;nbsp;간의&amp;nbsp;통신을&amp;nbsp;단순화하고,&amp;nbsp;표준화된&amp;nbsp;방식으로&amp;nbsp;자원을&amp;nbsp;조작할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해주며,&amp;nbsp;이러한&amp;nbsp;특징&amp;nbsp;때문에&amp;nbsp;많은&amp;nbsp;웹&amp;nbsp;애플리케이션&amp;nbsp;및&amp;nbsp;서비스에서&amp;nbsp;선호되는&amp;nbsp;방식으로&amp;nbsp;사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GraphQL 과의 차이&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;1.&amp;nbsp;데이터&amp;nbsp;요청&amp;nbsp;방식:&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;REST&amp;nbsp;API:&amp;nbsp;&lt;/b&gt;각&amp;nbsp;리소스&amp;nbsp;혹은&amp;nbsp;데이터&amp;nbsp;타입마다&amp;nbsp;고유한&amp;nbsp;엔드포인트가&amp;nbsp;있습니다.&amp;nbsp;원하는&amp;nbsp;데이터를&amp;nbsp;얻기&amp;nbsp;위해&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;엔드포인트를&amp;nbsp;차례대로&amp;nbsp;호출해야&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;예시:&lt;br /&gt;사용자&amp;nbsp;정보를&amp;nbsp;가져오는&amp;nbsp;엔드포인트(/users/{id})와&amp;nbsp;해당&amp;nbsp;사용자의&amp;nbsp;게시물을&amp;nbsp;가져오는&amp;nbsp;엔드포인트(/users/{id}/posts)가&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;특정&amp;nbsp;사용자와&amp;nbsp;그의&amp;nbsp;모든&amp;nbsp;게시물을&amp;nbsp;가져오려면&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;별도의&amp;nbsp;API&amp;nbsp;호출이&amp;nbsp;필요합니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GraphQL:&lt;/b&gt;&amp;nbsp;단일&amp;nbsp;엔드포인트에서&amp;nbsp;쿼리를&amp;nbsp;사용하여&amp;nbsp;원하는&amp;nbsp;모든&amp;nbsp;데이터를&amp;nbsp;한&amp;nbsp;번의&amp;nbsp;요청으로&amp;nbsp;가져올&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;클라이언트는&amp;nbsp;필요한&amp;nbsp;데이터의&amp;nbsp;구조를&amp;nbsp;명시하고,&amp;nbsp;서버는&amp;nbsp;그에&amp;nbsp;따라&amp;nbsp;응답합니다.&lt;br /&gt;&lt;br /&gt;예시:&lt;br /&gt;사용자와 그의 모든 게시물을 가져오려면 다음과 같은 쿼리를 사용할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;2. 데이터의 오버/언더 페칭:&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;REST&amp;nbsp;API:&amp;nbsp;&lt;/b&gt;엔드포인트는&amp;nbsp;고정된&amp;nbsp;데이터&amp;nbsp;구조를&amp;nbsp;반환합니다.&amp;nbsp;때로는&amp;nbsp;필요한&amp;nbsp;정보만을&amp;nbsp;가져오지&amp;nbsp;못하거나&amp;nbsp;(언더&amp;nbsp;페칭)&amp;nbsp;또는&amp;nbsp;필요&amp;nbsp;이상의&amp;nbsp;정보를&amp;nbsp;가져올&amp;nbsp;수&amp;nbsp;있습니다&amp;nbsp;(오버&amp;nbsp;페칭).&lt;br /&gt;&lt;br /&gt;예시:&lt;br /&gt;/users/{id}&amp;nbsp;엔드포인트는&amp;nbsp;이름,&amp;nbsp;이메일,&amp;nbsp;주소&amp;nbsp;등&amp;nbsp;사용자의&amp;nbsp;모든&amp;nbsp;정보를&amp;nbsp;반환할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;만약&amp;nbsp;이름만&amp;nbsp;필요한&amp;nbsp;경우에도&amp;nbsp;이&amp;nbsp;모든&amp;nbsp;데이터를&amp;nbsp;받게&amp;nbsp;됩니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;GraphQL:&lt;/b&gt;&amp;nbsp;클라이언트는&amp;nbsp;정확히&amp;nbsp;필요한&amp;nbsp;데이터만&amp;nbsp;요청할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;이로&amp;nbsp;인해&amp;nbsp;오버/언더&amp;nbsp;페칭&amp;nbsp;문제를&amp;nbsp;피할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;예시:&lt;br /&gt;사용자의&amp;nbsp;이름만&amp;nbsp;필요한&amp;nbsp;경우&amp;nbsp;다음과&amp;nbsp;같이&amp;nbsp;요청할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1696559183980&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  user(id: &quot;123&quot;) {
    name
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;3.&amp;nbsp;버전&amp;nbsp;관리와&amp;nbsp;진화:&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;REST&amp;nbsp;API:&lt;/b&gt;&amp;nbsp;API의&amp;nbsp;변경&amp;nbsp;사항을&amp;nbsp;관리하기&amp;nbsp;위해&amp;nbsp;버전&amp;nbsp;관리가&amp;nbsp;필요할&amp;nbsp;수&amp;nbsp;있습니다&amp;nbsp;(예:&amp;nbsp;/v1/users,&amp;nbsp;/v2/users).&lt;br /&gt;&lt;b&gt;GraphQL:&lt;/b&gt;&amp;nbsp;새로운&amp;nbsp;필드를&amp;nbsp;추가하거나&amp;nbsp;기존&amp;nbsp;필드를&amp;nbsp;제거하는&amp;nbsp;것이&amp;nbsp;간단합니다.&amp;nbsp;클라이언트는&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;필드를&amp;nbsp;요청하지&amp;nbsp;않기&amp;nbsp;때문에&amp;nbsp;이전&amp;nbsp;클라이언트와의&amp;nbsp;호환성을&amp;nbsp;유지하는&amp;nbsp;것이&amp;nbsp;쉽습니다.&lt;/p&gt;</description>
      <category>Programming</category>
      <category>graphql</category>
      <category>REST</category>
      <category>REST API</category>
      <category>Til</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/66</guid>
      <comments>https://jayspod.tistory.com/66#entry66comment</comments>
      <pubDate>Fri, 6 Oct 2023 11:30:23 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 프론트엔드 성능 최적화</title>
      <link>https://jayspod.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;성능&amp;nbsp;최적화&amp;nbsp;방법:&lt;/b&gt;&lt;br /&gt;코드&amp;nbsp;스플리팅:&amp;nbsp;큰&amp;nbsp;자바스크립트&amp;nbsp;번들을&amp;nbsp;작은&amp;nbsp;청크로&amp;nbsp;분리하여&amp;nbsp;필요한&amp;nbsp;부분만&amp;nbsp;로드합니다&lt;br /&gt;&lt;br /&gt;이미지&amp;nbsp;최적화:&amp;nbsp;이미지를&amp;nbsp;압축하거나&amp;nbsp;lazy&amp;nbsp;loading을&amp;nbsp;사용하여&amp;nbsp;로딩&amp;nbsp;시간을&amp;nbsp;줄입니다&lt;br /&gt;&lt;br /&gt;CDN&amp;nbsp;사용:&amp;nbsp;콘텐츠를&amp;nbsp;빠르게&amp;nbsp;전달하기&amp;nbsp;위해&amp;nbsp;콘텐츠&amp;nbsp;전송&amp;nbsp;네트워크(CDN)를&amp;nbsp;사용합니다&lt;br /&gt;&lt;br /&gt;캐싱&amp;nbsp;전략:&amp;nbsp;브라우저&amp;nbsp;캐싱을&amp;nbsp;활용하여&amp;nbsp;재방문&amp;nbsp;시에&amp;nbsp;빠르게&amp;nbsp;페이지를&amp;nbsp;로드합니다&lt;br /&gt;&lt;br /&gt;비동기&amp;nbsp;로딩:&amp;nbsp;async나&amp;nbsp;defer&amp;nbsp;속성을&amp;nbsp;사용하여&amp;nbsp;비동기&amp;nbsp;스크립트&amp;nbsp;로딩을&amp;nbsp;가능하게&amp;nbsp;합니다&lt;br /&gt;&lt;br /&gt;서버&amp;nbsp;사이드&amp;nbsp;렌더링&amp;nbsp;(SSR)&amp;nbsp;또는&amp;nbsp;사전&amp;nbsp;렌더링:&amp;nbsp;초기&amp;nbsp;페이지&amp;nbsp;로드&amp;nbsp;속도를&amp;nbsp;향상시키기&amp;nbsp;위해&amp;nbsp;사용합니다&lt;br /&gt;&lt;br /&gt;웹&amp;nbsp;워커&amp;nbsp;사용:&amp;nbsp;복잡한&amp;nbsp;연산을&amp;nbsp;백그라운드에서&amp;nbsp;처리하여&amp;nbsp;메인&amp;nbsp;스레드를&amp;nbsp;블로킹하지&amp;nbsp;않습니다&lt;br /&gt;&lt;br /&gt;&lt;b&gt;프로젝트에서&amp;nbsp;활용한&amp;nbsp;경험:&lt;/b&gt;&lt;br /&gt;이미지&amp;nbsp;최적화:&amp;nbsp;imageCompression으로&amp;nbsp;압축하고&amp;nbsp;리사이징을&amp;nbsp;적용했습니다&lt;br /&gt;&lt;br /&gt;CDN&amp;nbsp;사용:&amp;nbsp;AWS&amp;nbsp;CloudFront를&amp;nbsp;사용하여&amp;nbsp;전세계적으로&amp;nbsp;빠르게&amp;nbsp;콘텐츠를&amp;nbsp;제공하였습니다&lt;br /&gt;이를 통해 페이지 로드 시간이 대폭 줄었습니다&lt;br /&gt;&lt;br /&gt;비동기&amp;nbsp;로딩:&amp;nbsp;async&amp;nbsp;await을&amp;nbsp;활용하여&amp;nbsp;Kakao&amp;nbsp;Maps&amp;nbsp;API와&amp;nbsp;같은&amp;nbsp;외부&amp;nbsp;라이브러리를&amp;nbsp;비동기로&amp;nbsp;로드하여&amp;nbsp;초기&amp;nbsp;페이지&amp;nbsp;렌더링&amp;nbsp;시간을&amp;nbsp;최적화했습니다&lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;방법들을&amp;nbsp;통해&amp;nbsp;프로젝트의&amp;nbsp;프론트엔드&amp;nbsp;성능을&amp;nbsp;신경&amp;nbsp;쓰면서&amp;nbsp;개발을&amp;nbsp;진행했습니다&lt;br /&gt;최적화를&amp;nbsp;통해&amp;nbsp;페이지&amp;nbsp;로드&amp;nbsp;시간이&amp;nbsp;줄어들고,&amp;nbsp;사용자&amp;nbsp;경험이&amp;nbsp;향상되는&amp;nbsp;것을&amp;nbsp;명확하게&amp;nbsp;느낄&amp;nbsp;수&amp;nbsp;있었습니다&lt;/p&gt;</description>
      <category>Programming</category>
      <category>Til</category>
      <category>프론트엔드 성능최적화</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/65</guid>
      <comments>https://jayspod.tistory.com/65#entry65comment</comments>
      <pubDate>Sun, 1 Oct 2023 22:21:23 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] useEffect</title>
      <link>https://jayspod.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;useEffect는&amp;nbsp;react&amp;nbsp;hooks중&amp;nbsp;하나로&amp;nbsp;side&amp;nbsp;effect를&amp;nbsp;수행하는&amp;nbsp;데&amp;nbsp;사용됩니다&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;컴포넌트가&amp;nbsp;처음&amp;nbsp;렌더링되면,&amp;nbsp;useEffect&amp;nbsp;내부&amp;nbsp;함수가&amp;nbsp;실행되고&lt;br /&gt;2.&amp;nbsp;의존성&amp;nbsp;배열의&amp;nbsp;값이&amp;nbsp;바뀔&amp;nbsp;때&amp;nbsp;마다&amp;nbsp;useEffect&amp;nbsp;내부&amp;nbsp;함수가&amp;nbsp;실행됩니다&lt;br /&gt;만약&amp;nbsp;빈배열이라면&amp;nbsp;컴포넌트가&amp;nbsp;마운트될&amp;nbsp;때&amp;nbsp;한번만&amp;nbsp;실행됩니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;useEffect는&amp;nbsp;두&amp;nbsp;개의&amp;nbsp;매개변수를&amp;nbsp;받을&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Effect&amp;nbsp;함수:&lt;/b&gt;&amp;nbsp;이&amp;nbsp;함수는&amp;nbsp;컴포넌트가&amp;nbsp;렌더링된&amp;nbsp;후에&amp;nbsp;실행됩니다.&amp;nbsp;이&amp;nbsp;함수에서는&amp;nbsp;데이터&amp;nbsp;fetching,&amp;nbsp;구독&amp;nbsp;설정,&amp;nbsp;수동으로&amp;nbsp;변경되는&amp;nbsp;DOM&amp;nbsp;등&amp;nbsp;side&amp;nbsp;effect를&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Dependency&amp;nbsp;배열:&lt;/b&gt;&amp;nbsp;Dependency&amp;nbsp;배열은&amp;nbsp;effect&amp;nbsp;함수가&amp;nbsp;의존하는&amp;nbsp;state와&amp;nbsp;props를&amp;nbsp;명시합니다.&amp;nbsp;배열&amp;nbsp;내부의&amp;nbsp;어떤&amp;nbsp;값이&amp;nbsp;변하면,&amp;nbsp;effect&amp;nbsp;함수는&amp;nbsp;다시&amp;nbsp;실행됩니다.&amp;nbsp;빈&amp;nbsp;배열을&amp;nbsp;전달하면,&amp;nbsp;effect는&amp;nbsp;컴포넌트가&amp;nbsp;mount될&amp;nbsp;때&amp;nbsp;한&amp;nbsp;번만&amp;nbsp;실행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Cleanup&amp;nbsp;함수&lt;/b&gt;&lt;br /&gt;useEffect&amp;nbsp;내부에서&amp;nbsp;반환하는&amp;nbsp;함수를&amp;nbsp;Cleanup&amp;nbsp;함수라고&amp;nbsp;합니다.&amp;nbsp;이&amp;nbsp;함수는&amp;nbsp;컴포넌트가&amp;nbsp;unmount될&amp;nbsp;때,&amp;nbsp;또는&amp;nbsp;dependency가&amp;nbsp;변경될&amp;nbsp;때&amp;nbsp;호출되며,&amp;nbsp;이를&amp;nbsp;통해&amp;nbsp;구독&amp;nbsp;해지,&amp;nbsp;이벤트&amp;nbsp;리스너&amp;nbsp;제거&amp;nbsp;등의&amp;nbsp;cleanup&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1696083524191&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import React, { useState, useEffect } from 'react';

function ExampleComponent() {
  const [count, setCount] = useState(0);

  useEffect(() =&amp;gt; {
    // count가 변경될 때마다 이 effect가 실행됩니다.
    document.title = `Count: ${count}`;

    return () =&amp;gt; {
      // cleanup: count가 변경되기 전에 실행됩니다.
      console.log('Cleaning up!');
    };
  }, [count]); // Dependency 배열에 count를 지정했습니다.

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;You clicked {count} times&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; setCount(count + 1)}&amp;gt;
        Click me
      &amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Programming</category>
      <category>side effect</category>
      <category>Til</category>
      <category>useEffect</category>
      <author>jay-dev</author>
      <guid isPermaLink="true">https://jayspod.tistory.com/64</guid>
      <comments>https://jayspod.tistory.com/64#entry64comment</comments>
      <pubDate>Sat, 30 Sep 2023 23:20:27 +0900</pubDate>
    </item>
  </channel>
</rss>