<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발시넌</title>
    <link>https://synuns.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 25 Jun 2026 13:41:10 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>synun</managingEditor>
    <image>
      <title>개발시넌</title>
      <url>https://tistory1.daumcdn.net/tistory/5460463/attach/a09d311a9c2246dea6dc2da5574f2414</url>
      <link>https://synuns.tistory.com</link>
    </image>
    <item>
      <title>SIPE : 인프콘 커뮤니티 부스 운영 후기</title>
      <link>https://synuns.tistory.com/101</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEsu0i/btsI1FkkpkJ/KR5DPB76z1Bjg9uqjp8hgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEsu0i/btsI1FkkpkJ/KR5DPB76z1Bjg9uqjp8hgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEsu0i/btsI1FkkpkJ/KR5DPB76z1Bjg9uqjp8hgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEsu0i%2FbtsI1FkkpkJ%2FKR5DPB76z1Bjg9uqjp8hgk%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;720&quot; height=&quot;485&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8월 2일에 코엑스에서 IT 컨퍼런스인 인프콘이 열렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프콘은 올해로만 벌써 세번째나 진행된 행사이고, IT 관련 종사자라면 누구나 가고 싶어하는 행사이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 &lt;span style=&quot;text-align: start;&quot;&gt;항상 티켓팅에 실패하기만 했었던 기억이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 좋은 기회로 인프런에서 커뮤니티 협업 제안을 주셔서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사하게도 인프콘의 한자리를 담당할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;781&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuF6su/btsI0gsOSI8/jKDWfxfkyveZKx6kJD4dd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuF6su/btsI0gsOSI8/jKDWfxfkyveZKx6kJD4dd1/img.png&quot; data-alt=&quot;우리가 여기 올라가 있다니... (감격)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuF6su/btsI0gsOSI8/jKDWfxfkyveZKx6kJD4dd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuF6su%2FbtsI0gsOSI8%2FjKDWfxfkyveZKx6kJD4dd1%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;499&quot; height=&quot;541&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;781&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;우리가 여기 올라가 있다니... (감격)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;SIPE에 대해서까지 간단하게 나눠보려고 한다.&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;부스에서 진행하는 두가지 이벤트를 기획해야 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째는 인프콘에서 커뮤니티 부스에서 스탬프를 받을 수 있는 이벤트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두번째는 부스에서 자체적으로 준비한 이벤트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이벤트 상품으로 주어질 굿즈들과 부스를 지나가는 모두에게 사이프 홍보용으로 주어질 팜플렛이 필요했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;팜플렛의 특성 상 &lt;span style=&quot;text-align: start;&quot;&gt;쉽게 버려지고 쓸모 없는 데다가 만드는 리소스가 너무 많이 든다는 단점이 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇보다 준비한 굿즈가 버려져있는 걸 보면 너무 가슴이 아팠기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여름에 가장 실용적인 부채를 팜플렛으로 사용하자고 의견이 모여졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;금전적인 사정과 준비 시간 등등의 여러 사정으로 인해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메인 굿즈는 스티커로 확정했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;1770&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba62H6/btsI1c3KDHR/nrIVTyXhti85cEr4E50l40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba62H6/btsI1c3KDHR/nrIVTyXhti85cEr4E50l40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba62H6/btsI1c3KDHR/nrIVTyXhti85cEr4E50l40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba62H6%2FbtsI1c3KDHR%2FnrIVTyXhti85cEr4E50l40%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;370&quot; height=&quot;321&quot; data-origin-width=&quot;1770&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;여러 행사를 준비해본 경험으로는 스티커가 제일 가심비가 있는 굿즈이고&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;한 사이퍼분 만들어 주신 스티커 디자인이 너무너무너무 귀엽고 예뻐서&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;인프콘 참여자 분들을 충분히 사로잡을 수 있을 거라고 확신했다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사이프가 개발자만을 위한 동아리이기 때문에&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IT 관련 종사자 모두가 찾아오는 인프콘에서 모두의 관심을 끌기 어려울 것이라는 고민이 있었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만, 남녀노소, 직군을 가리지 않고 좋아하는&amp;nbsp;&lt;i&gt;기특한 효묘&lt;/i&gt;(?) 역할을 해주어서&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;개발자가 아니더라도 사이프 부스에 관심을 보여주시는 분들이 참 많았다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PRE5S/btsI1TCFo8u/ZyhL7VSdbk8Oj2EqFSbIZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PRE5S/btsI1TCFo8u/ZyhL7VSdbk8Oj2EqFSbIZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PRE5S/btsI1TCFo8u/ZyhL7VSdbk8Oj2EqFSbIZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPRE5S%2FbtsI1TCFo8u%2FZyhL7VSdbk8Oj2EqFSbIZ1%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;700&quot; height=&quot;467&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2000&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프콘 참여자들이 줄서서 대기하면서 사이프 부채로 열심히 부치는 모습,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고양이 스티커가 너무 귀엽다고 스티커를 받아가시는 모습들을 보면서&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;h3 data-ke-size=&quot;size23&quot;&gt;우당탕탕 부스 운영&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVhSey/btsIZX737wx/KwlPAkVNmAAV3xBRHHKJik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVhSey/btsIZX737wx/KwlPAkVNmAAV3xBRHHKJik/img.png&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;2250&quot; data-is-animation=&quot;false&quot; width=&quot;572&quot; height=&quot;572&quot; data-filename=&quot;blob&quot; data-widthpercent=&quot;50&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVhSey/btsIZX737wx/KwlPAkVNmAAV3xBRHHKJik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVhSey%2FbtsIZX737wx%2FKwlPAkVNmAAV3xBRHHKJik%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;2250&quot; height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k1J6y/btsI04rmuKc/ehM84ksFGHpFhbhzYrVrJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k1J6y/btsI04rmuKc/ehM84ksFGHpFhbhzYrVrJk/img.png&quot; width=&quot;605&quot; height=&quot;605&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;720&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k1J6y/btsI04rmuKc/ehM84ksFGHpFhbhzYrVrJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk1J6y%2FbtsI04rmuKc%2FehM84ksFGHpFhbhzYrVrJk%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;720&quot; height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 오자마자 사이프 부스 위치를 확인하고 부스 세팅을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 행사 부스를 찾아와 주시는 분들에게 어떤 식으로 설명해주면 좋을지 전략 회의를 가졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여담이기는 하지만, 나중에는 그런 전략들이 딱히 큰 의미는 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동아리에 관심 가져주시는 분들에게 다음 기수에 꼭 같이 함께했으면 좋겠는 마음이 들어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 솔직하게 사이프가 어떤 동아리인지, &lt;b&gt;내가 왜 사이프를 애정하는지&lt;/b&gt;&amp;nbsp;설명드렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnwDNg/btsI1w10fUK/xK9RDdkbc2GoPE3aJDcGu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnwDNg/btsI1w10fUK/xK9RDdkbc2GoPE3aJDcGu1/img.png&quot; data-alt=&quot;정말 많은 분들이 찾아와 주셨다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnwDNg/btsI1w10fUK/xK9RDdkbc2GoPE3aJDcGu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnwDNg%2FbtsI1w10fUK%2FxK9RDdkbc2GoPE3aJDcGu1%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;700&quot; height=&quot;525&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;3000&quot; data-origin-height=&quot;2250&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정말 많은 분들이 찾아와 주셨다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;감사하게도 마음이 동하셨는지 자리에서 바로 다음기수 모집 알림 신청해주시는 분들이 많았다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;찾아와 주시고 관심가져주신 분들 모두 사이프 3기에서 꼭 만나서 함께 활동하게 되면 좋겠다 :)&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;SIPE 소개&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCNPI/btsI1vPyNYP/MLFae2lcMTIRmjpSzPK7F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCNPI/btsI1vPyNYP/MLFae2lcMTIRmjpSzPK7F0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCNPI/btsI1vPyNYP/MLFae2lcMTIRmjpSzPK7F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCNPI%2FbtsI1vPyNYP%2FMLFae2lcMTIRmjpSzPK7F0%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;548&quot; height=&quot;166&quot; data-origin-width=&quot;548&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;사이프가 뭐하는 동아리인지, 내가 왜 사이프를 애정하는지 궁금하시는 분들이 계실 것 같아 짤막한 설명을 추가해본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이프는 현직자 동아리인 만큼 현생의 부담이 훨씬 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 사이퍼들의 부담이 덜할 수 있도록 1기수에 &lt;b&gt;격주로 9회, 총 18주&lt;/b&gt; 동안 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(파워 I이신 분들도 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;사이프는 프로젝트성 동아리가 아니라 &lt;b&gt;네트워킹 위주의 동아리&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트성 동아리는 프로젝트 팀안에서만 친해질 수 있다는 아쉬움이 존재하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이프에서는 팀 외에도 친해지고 네트워킹할 수 있는 기회가 정말 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 프로젝트만 진행하지는 않고 미션이라는 것을 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미션은 원하는 자유 주제를 발제하고 다른 사이퍼들과 마음이 맞는 주제로 팀을 만들어서 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금까지 정말 인기가 많았던 주제는 &lt;b&gt;러스트 스터디&lt;/b&gt;, &lt;b&gt;생성형 AI로 무언가 만들어내기&lt;/b&gt;였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 안에서 정말 다양한 활동들과 경험을 할 수 있다는 것이 장점인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;무박2일 사이프 해커톤 &lt;b&gt;사이프톤&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IT 업계 친구를 소개하는 큰 규모의 행사인 &lt;b&gt;내친소&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 세 가지의 행사를 진행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가 위 행사에 기여하고 싶다면 &lt;b&gt;TF팀&lt;/b&gt;으로 함께하고 행사를 꾸려갈 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 격주로 진행한다고 전혀 루즈하지 않아도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이프가 활동이 많은 만큼 그리고 네트워킹 위주인 만큼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하고 싶은게 얼마나 많은지에 따라 더 많이 얻어 갈 수 있는 동아리라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경험 뿐만이 아니라 사람도!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 무엇보다도 나는 사이프에서 소중한 인연들과 인생 친구들을 만날 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그게 1기 이후에 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;정말 정말 진심으로 사이프를 추천한다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;1796&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IskCQ/btsIZXmGxuU/qyZiScLt6YtGNUpSzBPq7k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IskCQ/btsIZXmGxuU/qyZiScLt6YtGNUpSzBPq7k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IskCQ/btsIZXmGxuU/qyZiScLt6YtGNUpSzBPq7k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIskCQ%2FbtsIZXmGxuU%2FqyZiScLt6YtGNUpSzBPq7k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;246&quot; height=&quot;740&quot; data-origin-width=&quot;597&quot; data-origin-height=&quot;1796&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인프콘에 초대해주신 인프랩 분들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연차내면서까지 함께 고생해준 사이프 운영진 친구들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후원으로 함께해준 사이퍼들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부스에 직접 찾아와서 응원해준 사이퍼들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그외에도 사이프에 마음쓰고 함께해준 모든 분들께 감사의 말씀을 전하고 싶다.&lt;/p&gt;</description>
      <category>회고</category>
      <category>IT동아리</category>
      <category>sipe</category>
      <category>개발동아리</category>
      <category>사이프</category>
      <category>인프랩</category>
      <category>인프런</category>
      <category>인프콘</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/101</guid>
      <comments>https://synuns.tistory.com/101#entry101comment</comments>
      <pubDate>Mon, 12 Aug 2024 02:02:48 +0900</pubDate>
    </item>
    <item>
      <title>[항해99] 14주차 지원주차 회고</title>
      <link>https://synuns.tistory.com/98</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6IMCM/btrZJXKxL9l/sMKcvg8sMYjVGx7JuwLXzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6IMCM/btrZJXKxL9l/sMKcvg8sMYjVGx7JuwLXzK/img.png&quot; data-alt=&quot;수료식에서 다같이!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6IMCM/btrZJXKxL9l/sMKcvg8sMYjVGx7JuwLXzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6IMCM%2FbtrZJXKxL9l%2FsMKcvg8sMYjVGx7JuwLXzK%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;988&quot; height=&quot;377&quot; data-origin-width=&quot;988&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;수료식에서 다같이!&lt;/figcaption&gt;
&lt;/figure&gt;
&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;이번주는 항해의 마지막 주간이자 지원주차이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이력서를 준비하고, 기술 인터뷰를 준비하는 기간이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항해 자체 플랫폼인 취업 지원 사이트 &lt;b&gt;인텔리픽&lt;/b&gt;과 면접 준비 사이트 &lt;b&gt;목터뷰&lt;/b&gt;를 주로 사용하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr1vOA/btrZKoA8Cin/ql8LGwAWwCFlS57BgKhUGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr1vOA/btrZKoA8Cin/ql8LGwAWwCFlS57BgKhUGK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr1vOA/btrZKoA8Cin/ql8LGwAWwCFlS57BgKhUGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr1vOA%2FbtrZKoA8Cin%2Fql8LGwAWwCFlS57BgKhUGK%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;1897&quot; height=&quot;629&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리픽에서는 이력서 피드백과 모의면접 피드백을 받을 수 있고 1회까지는 필수로 받아야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 채용공고도 잘 올라오고 항해 과정에서 동료들의 평가같은 나에 대한 정보도 회사들에게 제공하기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 입증해야할 것이 줄어들고 회사 입장에서도 인증이 되는 시스템이라서 서로 윈윈할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;이런 부분은 스파르타가 정말 사업을 잘하는 것 같다.&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1407&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwBWLx/btrZNv0DyTh/QhDNnzZzOyE5BF9atPzYgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwBWLx/btrZNv0DyTh/QhDNnzZzOyE5BF9atPzYgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwBWLx/btrZNv0DyTh/QhDNnzZzOyE5BF9atPzYgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwBWLx%2FbtrZNv0DyTh%2FQhDNnzZzOyE5BF9atPzYgk%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;1407&quot; height=&quot;763&quot; data-origin-width=&quot;1407&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목터뷰는 인터뷰에 대한 핵심 50문제를 모아놓은 사이트이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;50문제 퀄이 그럭저럭 나쁘지 않지만, 이것만으로는 부족한 감이 있어서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;목터뷰 50문제를 다 풀고나서도 따로 더 준비하거나 항해에서 주관하는 취업 스터디를 하는 게 좋을 것 같다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 드디어 수료...!!&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;1920&quot; data-origin-height=&quot;2172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EFUwj/btrZNuNxIje/3dtxyOxQF3oDiRdSsVDLm0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EFUwj/btrZNuNxIje/3dtxyOxQF3oDiRdSsVDLm0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EFUwj/btrZNuNxIje/3dtxyOxQF3oDiRdSsVDLm0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEFUwj%2FbtrZNuNxIje%2F3dtxyOxQF3oDiRdSsVDLm0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;2172&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;2172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수료증도 받았다. 조금 조잡한 수료증이기는 하지만, 내 기억으로는 대학교 졸업장받을 때보다 더 기분이 좋았던 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고생한 만큼 느껴지는 성취감도 다른 것 같다. 물론 대학교를 다니면서 힘들지 않았다는 건 아니지만, 짧은 기간에 너무 힘들었던 기억들이 많아서 그런지 수료증을 보면서 기분이 너무 좋았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1363&quot; data-origin-height=&quot;773&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l6bql/btrZJCfGhlX/jXKJtWxTkug4PlroHeKzN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l6bql/btrZJCfGhlX/jXKJtWxTkug4PlroHeKzN1/img.png&quot; data-alt=&quot;모두에게 남기고 싶은 한마디&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l6bql/btrZJCfGhlX/jXKJtWxTkug4PlroHeKzN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl6bql%2FbtrZJCfGhlX%2FjXKJtWxTkug4PlroHeKzN1%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;1363&quot; height=&quot;773&quot; data-origin-width=&quot;1363&quot; data-origin-height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;모두에게 남기고 싶은 한마디&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 소수 정예 B반은 못갈것같은 사람은 아무도 없음 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한명 한명이 뚝심있고 끈기있는 사람들 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다들 결국 좋은 성과가 있을 거라는 건 빈말이 아니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diMgjc/btrZK1MykJ6/DS4kz1MrJsTKlHkZpWpHm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diMgjc/btrZK1MykJ6/DS4kz1MrJsTKlHkZpWpHm1/img.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot; data-is-animation=&quot;false&quot; width=&quot;545&quot; height=&quot;399&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diMgjc/btrZK1MykJ6/DS4kz1MrJsTKlHkZpWpHm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiMgjc%2FbtrZK1MykJ6%2FDS4kz1MrJsTKlHkZpWpHm1%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;1280&quot; height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sbvbn/btrZSR9Qfpr/PByj5Ktmk4oqGMeWFN1SiK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sbvbn/btrZSR9Qfpr/PByj5Ktmk4oqGMeWFN1SiK/img.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot; data-is-animation=&quot;false&quot; width=&quot;554&quot; height=&quot;406&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sbvbn/btrZSR9Qfpr/PByj5Ktmk4oqGMeWFN1SiK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsbvbn%2FbtrZSR9Qfpr%2FPByj5Ktmk4oqGMeWFN1SiK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 조가 최고의 프로젝트 상을 수상하게 되었다!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좋게 봐주신 분들께 너무 감사드리고 우리 팀원들 너무 많이 고생했고 상 받지 못했더라도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝까지 함께해주신 분들 모두가 칭찬받을만한 분들이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 개인적으로 WIL 열심히 썼다고 상도 받았다 ㅋㅋ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1901&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mChGl/btrZJ2ZuNcV/opezFRezWkGYJPSD0O8aDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mChGl/btrZJ2ZuNcV/opezFRezWkGYJPSD0O8aDK/img.png&quot; data-alt=&quot;10기 B반 눈치코치캐치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mChGl/btrZJ2ZuNcV/opezFRezWkGYJPSD0O8aDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmChGl%2FbtrZJ2ZuNcV%2FopezFRezWkGYJPSD0O8aDK%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;1901&quot; height=&quot;936&quot; data-origin-width=&quot;1901&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;10기 B반 눈치코치캐치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;figure id=&quot;og_1676736770249&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;온라인 코딩 부트캠프 항해99, 현업에서 인정받는 개발자로&quot; data-og-description=&quot;가장 단기간에 프론트엔드, 백엔드 개발자로 취업할 수 있는 부트캠프 항해99. 4개의 팀 프로젝트, 수료 후에도 끝까지 지원되는 이력서, 포트폴리오, 면접 취업지원까지.&quot; data-og-host=&quot;hanghae99.spartacodingclub.kr&quot; data-og-source-url=&quot;https://hanghae99.spartacodingclub.kr/v2/exhibitions&quot; data-og-url=&quot;https://hanghae99.spartacodingclub.kr/v2/exhibitions&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/F09kN/hyRGdze4rs/SmebQpSCPQYyq6HBCOBnHK/img.jpg?width=1260&amp;amp;height=630&amp;amp;face=0_0_1260_630,https://scrap.kakaocdn.net/dn/xdzHt/hyRGbnRXn7/80gipFzcDVo1ubRy1h8ZvK/img.jpg?width=1260&amp;amp;height=630&amp;amp;face=0_0_1260_630,https://scrap.kakaocdn.net/dn/6P7Zq/hyRGdze4vi/UIQ6OuoBgQT1utmypTkMkK/img.png?width=1440&amp;amp;height=481&amp;amp;face=0_0_1440_481&quot;&gt;&lt;a href=&quot;https://hanghae99.spartacodingclub.kr/v2/exhibitions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hanghae99.spartacodingclub.kr/v2/exhibitions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/F09kN/hyRGdze4rs/SmebQpSCPQYyq6HBCOBnHK/img.jpg?width=1260&amp;amp;height=630&amp;amp;face=0_0_1260_630,https://scrap.kakaocdn.net/dn/xdzHt/hyRGbnRXn7/80gipFzcDVo1ubRy1h8ZvK/img.jpg?width=1260&amp;amp;height=630&amp;amp;face=0_0_1260_630,https://scrap.kakaocdn.net/dn/6P7Zq/hyRGdze4vi/UIQ6OuoBgQT1utmypTkMkK/img.png?width=1440&amp;amp;height=481&amp;amp;face=0_0_1440_481');&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;온라인 코딩 부트캠프 항해99, 현업에서 인정받는 개발자로&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;가장 단기간에 프론트엔드, 백엔드 개발자로 취업할 수 있는 부트캠프 항해99. 4개의 팀 프로젝트, 수료 후에도 끝까지 지원되는 이력서, 포트폴리오, 면접 취업지원까지.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hanghae99.spartacodingclub.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항해99의 수강생 작품에 우리 작품이 올라가게 되면 어떻게 될까 선배 기수들 작품을 보면서 상상하고는 했는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 우리팀 작품이 올라가게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 후배 기수들에게 보여주기에 부끄럽지 않은 작품이 된 것 같아서 뿌듯하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zep.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IAFqp/btrZIJsqwvy/kI2LZFPwkrjerWaQuwR3C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IAFqp/btrZIJsqwvy/kI2LZFPwkrjerWaQuwR3C1/img.png&quot; data-alt=&quot;항해가 끝나도 우린 함께야...☆&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IAFqp/btrZIJsqwvy/kI2LZFPwkrjerWaQuwR3C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIAFqp%2FbtrZIJsqwvy%2FkI2LZFPwkrjerWaQuwR3C1%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;1920&quot; height=&quot;942&quot; data-filename=&quot;zep.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;항해가 끝나도 우린 함께야...☆&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항해는 수료했지만 실제로는 취업까지가 진짜 항해의 끝이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;취업 이후에 항해 후기글로 돌아오겠습니다 &lt;/p&gt;</description>
      <category>항해99</category>
      <category>수료</category>
      <category>항해99</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/98</guid>
      <comments>https://synuns.tistory.com/98#entry98comment</comments>
      <pubDate>Sat, 18 Feb 2023 00:24:13 +0900</pubDate>
    </item>
    <item>
      <title>[항해99] 13주차 실전프로젝트(6) 회고: 최종발표</title>
      <link>https://synuns.tistory.com/97</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vOazq/btrZK002JDh/7nAjnn7pMglph8vLcKUYl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vOazq/btrZK002JDh/7nAjnn7pMglph8vLcKUYl1/img.png&quot; data-alt=&quot;최종발표회가 끝나고 다같이!!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vOazq/btrZK002JDh/7nAjnn7pMglph8vLcKUYl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvOazq%2FbtrZK002JDh%2F7nAjnn7pMglph8vLcKUYl1%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;395&quot; data-origin-width=&quot;1172&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;최종발표회가 끝나고 다같이!!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;619&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djVMNb/btrZR3ifr7q/kx9WgjxhG8sRRPohxP3DxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djVMNb/btrZR3ifr7q/kx9WgjxhG8sRRPohxP3DxK/img.png&quot; data-alt=&quot;고마운 우리 팀원들!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djVMNb/btrZR3ifr7q/kx9WgjxhG8sRRPohxP3DxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjVMNb%2FbtrZR3ifr7q%2Fkx9WgjxhG8sRRPohxP3DxK%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;1466&quot; height=&quot;619&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1466&quot; data-origin-height=&quot;619&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;고마운 우리 팀원들!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>항해99</category>
      <category>항해99</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/97</guid>
      <comments>https://synuns.tistory.com/97#entry97comment</comments>
      <pubDate>Sat, 18 Feb 2023 00:14:24 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 죽어있는 웹사이트에 생명 불어넣기</title>
      <link>https://synuns.tistory.com/93</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwF40e/btrYIOAPvTg/Bs8hNb0G4g81PUPo2PnKaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwF40e/btrYIOAPvTg/Bs8hNb0G4g81PUPo2PnKaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwF40e/btrYIOAPvTg/Bs8hNb0G4g81PUPo2PnKaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwF40e%2FbtrYIOAPvTg%2FBs8hNb0G4g81PUPo2PnKaK%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;960&quot; height=&quot;502&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트가 게임인데 꽤 밋밋하다는 피드백이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결책은 이 세가지 정도 있을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 효과음 넣기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 애니메이션 넣기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 인터렉션 넣기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터렉션은 디자인 및 여러가지 기획이 필요하기 때문에 당장에는 어렵고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1, 2번&lt;/b&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;효과음 넣기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;react에서 효과음 넣기 괜찮은 라이브러리를 발견해서 공부해본다.&lt;/p&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;use-sound&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675965963836&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - joshwcomeau/use-sound: A React Hook for playing sound effects&quot; data-og-description=&quot;A React Hook for playing sound effects. Contribute to joshwcomeau/use-sound development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/joshwcomeau/use-sound&quot; data-og-url=&quot;https://github.com/joshwcomeau/use-sound&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fHRzm/hyRzB72Hdk/qbgpJxghpGTjkkD26nQ2yK/img.png?width=1200&amp;amp;height=600&amp;amp;face=997_125_1038_170&quot;&gt;&lt;a href=&quot;https://github.com/joshwcomeau/use-sound&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/joshwcomeau/use-sound&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fHRzm/hyRzB72Hdk/qbgpJxghpGTjkkD26nQ2yK/img.png?width=1200&amp;amp;height=600&amp;amp;face=997_125_1038_170');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - joshwcomeau/use-sound: A React Hook for playing sound effects&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A React Hook for playing sound effects. Contribute to joshwcomeau/use-sound development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오디오 재생 관련 라이브러리로 유명한 &lt;b&gt;howler.js&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_1675966308898&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import useSound from 'use-sound';

import boopSfx from '../../sounds/boop.mp3';

const BoopButton = () =&amp;gt; {
  const [play] = useSound(boopSfx);

  return &amp;lt;button onClick={play}&amp;gt;Boop!&amp;lt;/button&amp;gt;;
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 훅의 형태로 쉽게 소리를 재생시킬 수 있어서 간단하게 효과음을 실행시키고 싶다면 사용하기 적합한 라이브러리가 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 라이브러리의 다양한 사용 방법에 대해서는&amp;nbsp; &lt;b&gt;joshwcomeau 블로그&lt;/b&gt;에서 정말 재밌게 다루고 있으니까 보면 너무 재미있다.&lt;/p&gt;
&lt;figure id=&quot;og_1675967016394&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;Announcing &amp;ldquo;use-sound&amp;rdquo;, a React Hook for Sound Effects&quot; data-og-description=&quot;By and large, using the web is a visual experience. This is in terrible contrast to mobile apps, which interact with three of our human senses (sight, sound, and touch, through haptic feedback). I just released a library to make it easy to add sound to you&quot; data-og-host=&quot;www.joshwcomeau.com&quot; data-og-source-url=&quot;https://www.joshwcomeau.com/react/announcing-use-sound-react-hook/&quot; data-og-url=&quot;https://www.joshwcomeau.com/react/announcing-use-sound-react-hook/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FQ9FR/hyRzzvDxJV/haEdbuQGW0BsOjQHAm01b0/img.png?width=1280&amp;amp;height=675&amp;amp;face=0_0_1280_675,https://scrap.kakaocdn.net/dn/oYuh3/hyRzpT5cO0/IZ2zi1H3qsChdwpBKYJAh0/img.png?width=1280&amp;amp;height=675&amp;amp;face=0_0_1280_675&quot;&gt;&lt;a href=&quot;https://www.joshwcomeau.com/react/announcing-use-sound-react-hook/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.joshwcomeau.com/react/announcing-use-sound-react-hook/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FQ9FR/hyRzzvDxJV/haEdbuQGW0BsOjQHAm01b0/img.png?width=1280&amp;amp;height=675&amp;amp;face=0_0_1280_675,https://scrap.kakaocdn.net/dn/oYuh3/hyRzpT5cO0/IZ2zi1H3qsChdwpBKYJAh0/img.png?width=1280&amp;amp;height=675&amp;amp;face=0_0_1280_675');&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;Announcing &amp;ldquo;use-sound&amp;rdquo;, a React Hook for Sound Effects&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;By and large, using the web is a visual experience. This is in terrible contrast to mobile apps, which interact with three of our human senses (sight, sound, and touch, through haptic feedback). I just released a library to make it easy to add sound to you&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.joshwcomeau.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스토리북으로 컴포넌트를 만들어서 사용예시를 볼 수 있다.&lt;/p&gt;
&lt;figure id=&quot;og_1675967060551&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&quot; data-og-description=&quot;&quot; data-og-host=&quot;use-sound.netlify.app&quot; data-og-source-url=&quot;https://use-sound.netlify.app/?path=/story/usesound--simple&quot; data-og-url=&quot;https://use-sound.netlify.app/?path=%2Fstory%2Fusesound--simple&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://use-sound.netlify.app/?path=/story/usesound--simple&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://use-sound.netlify.app/?path=/story/usesound--simple&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&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;use-sound.netlify.app&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;size16&quot;&gt;하지만 나는 그냥&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;howler.js&lt;/b&gt;로 커스텀훅을 만들어서 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사운드관련 npm 라이브러리 중에서는 상당히 유명하고 강력한 라이브러리이다.&lt;/p&gt;
&lt;figure id=&quot;og_1675967320527&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - goldfire/howler.js: Javascript audio library for the modern web.&quot; data-og-description=&quot;Javascript audio library for the modern web. Contribute to goldfire/howler.js development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/goldfire/howler.js/&quot; data-og-url=&quot;https://github.com/goldfire/howler.js&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b52cH4/hyRzAg0RFA/kyC0f9dYXG9YN9i3mWFoW1/img.png?width=1200&amp;amp;height=600&amp;amp;face=952_116_1081_256&quot;&gt;&lt;a href=&quot;https://github.com/goldfire/howler.js/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/goldfire/howler.js/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b52cH4/hyRzAg0RFA/kyC0f9dYXG9YN9i3mWFoW1/img.png?width=1200&amp;amp;height=600&amp;amp;face=952_116_1081_256');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - goldfire/howler.js: Javascript audio library for the modern web.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Javascript audio library for the modern web. Contribute to goldfire/howler.js development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;howler.js&lt;/b&gt;는 오디오 객체를 만들어서 사용하는 것과 사용법에서 크게 차이가 없으며&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 코덱과 크로스 브라우징 및 소리를 이용한다면 편리한 기능들을 지원하고 있어서 소리 관련으로는 라이브러리를 사용하는 것이 좋아보인다.&lt;/p&gt;
&lt;pre id=&quot;code_1675967255005&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// useSound.jsx
import { useEffect, useRef } from 'react';
import { useSelector } from 'react-redux';
import turnOnSound from '../utils/turnOnSound';

const useSound = (src) =&amp;gt; {
  const soundRef = useRef(null);
  const volume = useSelector((state) =&amp;gt; state.sound.volume);

  useEffect(() =&amp;gt; {
    soundRef.current = new Howl({ src });
  }, [src]);

  useEffect(() =&amp;gt; {
    soundRef.current.volume(volume);
  }, [volume]);

  return soundRef;
};

export default useSound;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소리를 조절하는 기능이 있어서 세팅을 반영할 수 있도록 훅을 만들었다.&lt;/p&gt;
&lt;pre id=&quot;code_1675967460269&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 사용
const soundRef = useSound(src);
// 사운드 실행
soundRef.current.play();&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;&lt;b&gt;애니메이션 넣기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;css로 애니메이션 넣는 건 누구나 다 알지만 너무 힘들다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사라지는 애니메이션의 경우에는 DOM에서 사라지기 이전에 애니메이션 시간을 계산해서 미리 보여주도록 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이걸 조금 더 쉽게 사용할 수 있도록 해주는 라이브러리가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;framer-motion&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675967639076&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - framer/motion: Open source, production-ready animation and gesture library for React&quot; data-og-description=&quot;Open source, production-ready animation and gesture library for React - GitHub - framer/motion: Open source, production-ready animation and gesture library for React&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/framer/motion&quot; data-og-url=&quot;https://github.com/framer/motion&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dnpYa8/hyRzAH4q9P/t3kQ1bGv4VeZV2ttDXERZk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://github.com/framer/motion&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/framer/motion&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dnpYa8/hyRzAH4q9P/t3kQ1bGv4VeZV2ttDXERZk/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - framer/motion: Open source, production-ready animation and gesture library for React&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Open source, production-ready animation and gesture library for React - GitHub - framer/motion: Open source, production-ready animation and gesture library for React&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 정말정말 좋아하는 라이브러리인 &lt;b&gt;framer-motion&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;size14&quot;&gt;&lt;i&gt;포브스 선정 공식문서 보기 제일 재밌는 라이브러리 1위&lt;/i&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1675967686392&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;product&quot; data-og-title=&quot;Documentation | Framer for Developers&quot; data-og-description=&quot;An open source, production-ready motion library for React on the web.&quot; data-og-host=&quot;www.framer.com&quot; data-og-source-url=&quot;https://www.framer.com/motion/&quot; data-og-url=&quot;https://www.framer.com/motion/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.framer.com/motion/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.framer.com/motion/&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;Documentation | Framer for Developers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;An open source, production-ready motion library for React on the web.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.framer.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서에 보면 자세한 예시를 웹사이트에서 직접 인터렉션하면서 볼 수 있고 코드도 다양하게 지원하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션은 공식문서를 잘 살펴보면 될 것 같고, 제일 유용했던 것은 &lt;b&gt;AnimatePresence&lt;/b&gt;라는 컴포넌트 였는데.&lt;/p&gt;
&lt;pre id=&quot;code_1675967902974&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    {isVisible &amp;amp;&amp;amp; (
      &amp;lt;div&amp;gt;
      	{animation}
      &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;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;isVisible&lt;/b&gt;에 따라서 컴포넌트가 그려지고 사라지는데, 이런 경우에는 사라지는 애니메이션을 넣기가 상당히 까다롭다. 하지만 &lt;b&gt;AnimatePresence&lt;/b&gt;를 사용하게 되면 엄청나게 간단해진다.&lt;/p&gt;
&lt;pre id=&quot;code_1675967841877&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { motion, AnimatePresence } from &quot;framer-motion&quot;

export const MyComponent = ({ isVisible }) =&amp;gt; (
  &amp;lt;AnimatePresence&amp;gt;
    {isVisible &amp;amp;&amp;amp; (
      &amp;lt;motion.div
        initial={{ opacity: 0 }}
        animate={{ opacity: 1 }}
        exit={{ opacity: 0 }}
      /&amp;gt;
    )}
  &amp;lt;/AnimatePresence&amp;gt;
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애니메이션이 있는 컴포넌트를 감싸주면 사라질 때 애니메이션이 먼저 보여지게 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;modal-animation.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6JHNb/btrYJRRl5TW/7T4K1E9EmaO4ntg5qUJkLk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6JHNb/btrYJRRl5TW/7T4K1E9EmaO4ntg5qUJkLk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6JHNb/btrYJRRl5TW/7T4K1E9EmaO4ntg5qUJkLk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/6JHNb/btrYJRRl5TW/7T4K1E9EmaO4ntg5qUJkLk/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;600&quot; height=&quot;308&quot; data-filename=&quot;modal-animation.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zoomincanvas-animation.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KXWBU/btrYI9xZe4i/L0I6KJywQHZoqMxLEtbhXK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KXWBU/btrYI9xZe4i/L0I6KJywQHZoqMxLEtbhXK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KXWBU/btrYI9xZe4i/L0I6KJywQHZoqMxLEtbhXK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/KXWBU/btrYI9xZe4i/L0I6KJywQHZoqMxLEtbhXK/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;600&quot; height=&quot;312&quot; data-filename=&quot;zoomincanvas-animation.gif&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 모달 나타나고 사라지는 애니메이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 모달이 생길 때 올라오고 사라질때 내려가는 애니메이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 모달에 마우스가 hover되면 opacity가 생기고 마우스가 내려가면 opacity가 없어지는 애니메이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세가지를 정말 쉽게 적용할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;이제야 좀 웹사이트가 살아움직이는 것 같다.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>개발일기</category>
      <category>framer-motion</category>
      <category>howler.js</category>
      <category>TIL</category>
      <category>use-sound</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/93</guid>
      <comments>https://synuns.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 8 Feb 2023 23:46:01 +0900</pubDate>
    </item>
    <item>
      <title>[항해99] 12주차 실전프로젝트(5) 회고: 서비스런칭</title>
      <link>https://synuns.tistory.com/92</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1727&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2bVNP/btrX6hKavsp/KYaHzYWQOBkNnJr4UjiQo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2bVNP/btrX6hKavsp/KYaHzYWQOBkNnJr4UjiQo1/img.png&quot; data-alt=&quot;퇴근 없이 맞이한 아침 8시. 왜 다들 퇴근 안해요...?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2bVNP/btrX6hKavsp/KYaHzYWQOBkNnJr4UjiQo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2bVNP%2FbtrX6hKavsp%2FKYaHzYWQOBkNnJr4UjiQo1%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;1727&quot; height=&quot;936&quot; data-origin-width=&quot;1727&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;퇴근 없이 맞이한 아침 8시. 왜 다들 퇴근 안해요...?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 이번주에 한 일&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;✨서비스 런칭&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NkP1X/btrX40onjKM/HO69Uv7Ms6sotwTCayUoA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NkP1X/btrX40onjKM/HO69Uv7Ms6sotwTCayUoA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NkP1X/btrX40onjKM/HO69Uv7Ms6sotwTCayUoA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNkP1X%2FbtrX40onjKM%2FHO69Uv7Ms6sotwTCayUoA0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1596&quot; height=&quot;799&quot; data-origin-width=&quot;1596&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1월 30일 월요일 오전 9시 20분&lt;/b&gt;에 3200명이 존재하는 슬랙방에 글을 올리며 런칭을 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런칭 이후에 각자의 영역에서 세워둔 마케팅 전략에 따라 마케팅을 진행했으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자들의 원활한 이용을 위해서 게임 응대도 했으며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;채널톡을 통해서 문의사항을 추가적으로 처리하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와중에 팀원들 모두 남아있는 개발까지 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게임하랴, 개발하랴, 운영하랴 정말 바빴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;우리 팀원들 대단해 &lt;/i&gt;&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;/p&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;항해99 슬랙, 각자 학교의 에브리타임, OKKY, 생활코딩, 각자의 지인들&lt;/b&gt;을 대상으로 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BC0o6/btrX6iWBz2g/R4BfpVbp6x6OWqZG8YSpd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BC0o6/btrX6iWBz2g/R4BfpVbp6x6OWqZG8YSpd0/img.png&quot; data-alt=&quot;생활코딩 게시글&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BC0o6/btrX6iWBz2g/R4BfpVbp6x6OWqZG8YSpd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBC0o6%2FbtrX6iWBz2g%2FR4BfpVbp6x6OWqZG8YSpd0%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;594&quot; height=&quot;666&quot; data-origin-width=&quot;758&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생활코딩 게시글&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 역시나 항해 커뮤니티가 진짜 강력하다 &lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZkYwT/btrX3seGQx5/jzl0v5ub53nBqY24BdgQ4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZkYwT/btrX3seGQx5/jzl0v5ub53nBqY24BdgQ4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZkYwT/btrX3seGQx5/jzl0v5ub53nBqY24BdgQ4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZkYwT%2FbtrX3seGQx5%2Fjzl0v5ub53nBqY24BdgQ4k%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;674&quot; height=&quot;282&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 유저 피드백&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kXsY9/btrX7YDzbjI/vTZxgmkU8K1nounxdaZNLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kXsY9/btrX7YDzbjI/vTZxgmkU8K1nounxdaZNLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kXsY9/btrX7YDzbjI/vTZxgmkU8K1nounxdaZNLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkXsY9%2FbtrX7YDzbjI%2FvTZxgmkU8K1nounxdaZNLK%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;416&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글폼 이벤트를 통해서 마케팅 및 유저 피드백을 수집하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감사한 마음을 담아 찾아오셔서 정성스럽게 피드백을 남겨주신 분들께 선물을 전달드릴 수 있어서 좋았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 101개의 피드백을 하나하나 모두 읽어보고, 모두 정리해보았다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/luwrM/btrYdiH8MLp/o1k1IbVWvLYoaoYh3AoG4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/luwrM/btrYdiH8MLp/o1k1IbVWvLYoaoYh3AoG4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/luwrM/btrYdiH8MLp/o1k1IbVWvLYoaoYh3AoG4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FluwrM%2FbtrYdiH8MLp%2Fo1k1IbVWvLYoaoYh3AoG4k%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;1090&quot; height=&quot;752&quot; data-origin-width=&quot;1090&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&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;b&gt; 유저 피드백 반영&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저 피드백을 통해 반영된 사항들이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 200px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;게임 안내 가이드(게임 설명, 그림툴 툴팁)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;게임 진행 중 시간 제한(타이머)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;게임 모드 추가(난이도 조절, 제한 시간 변경)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 10px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;height: 10px;&quot;&gt;혼자서도 그려볼 수 있는 연습장&lt;/td&gt;
&lt;td style=&quot;height: 10px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 10px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;본인 마이크 음소거&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;배경음 음량조절 기능&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;그림툴 기능 추가(두께, ctrl+z, 색상 등등&amp;hellip;)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;채팅 글자수 제한&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;로비에서 게임방의 변동 실시간 반영(SSE)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;입력 부분 기능 고도화 (입력 형식 제한 표시)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;02.04(토)&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 유저 데이터(ga)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일주일 동안의 유저 데이터를 정리해보려고한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;데이터 수집은 구글 애널리틱스를 이용해 진행되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;516&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GelT0/btrX8jgwUza/QAx52Q6xOhp2c3qzbub8qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GelT0/btrX8jgwUza/QAx52Q6xOhp2c3qzbub8qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GelT0/btrX8jgwUza/QAx52Q6xOhp2c3qzbub8qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGelT0%2FbtrX8jgwUza%2FQAx52Q6xOhp2c3qzbub8qk%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;654&quot; height=&quot;377&quot; data-origin-width=&quot;894&quot; data-origin-height=&quot;516&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일주일동안&lt;b&gt; 790명의 사용자&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;723&quot; data-origin-height=&quot;859&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYXS3F/btrX3uw0kBI/pHbWqlFuyK5JUuIjLRcKB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYXS3F/btrX3uw0kBI/pHbWqlFuyK5JUuIjLRcKB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYXS3F/btrX3uw0kBI/pHbWqlFuyK5JUuIjLRcKB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYXS3F%2FbtrX3uw0kBI%2FpHbWqlFuyK5JUuIjLRcKB0%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;513&quot; height=&quot;609&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;859&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;페이지 조회 이벤트는 &lt;/b&gt;&lt;span&gt;&lt;b&gt;24,693회&lt;/b&gt; 발생했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;490개의 게임방이 생성&lt;/b&gt;되었으며 &lt;b&gt;게임은 &lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;308판&lt;/b&gt; 진행되었다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;1,506개의 그림&lt;/b&gt;이 제출되었으며, &lt;b&gt;키워드는 1,960회&lt;/b&gt; 제출되었다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;런칭 첫날에는 엄청난 숫자의 그림이 데이터베이스에 저장되는 것을 목격했다.&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj; 이번주 개발 정리&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MU74q/btrX6oI8cSC/tJkTYrRLrHaVXV68dGOHV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MU74q/btrX6oI8cSC/tJkTYrRLrHaVXV68dGOHV0/img.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;932&quot; data-is-animation=&quot;false&quot; style=&quot;width: 53.0484%; margin-right: 10px;&quot; data-widthpercent=&quot;53.67&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MU74q/btrX6oI8cSC/tJkTYrRLrHaVXV68dGOHV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMU74q%2FbtrX6oI8cSC%2FtJkTYrRLrHaVXV68dGOHV0%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;1920&quot; height=&quot;932&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vuvx4/btrX32fUqgk/MdXYXEZsCr74kY3IaB4r4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vuvx4/btrX32fUqgk/MdXYXEZsCr74kY3IaB4r4k/img.png&quot; data-origin-width=&quot;1515&quot; data-origin-height=&quot;852&quot; data-is-animation=&quot;false&quot; style=&quot;width: 45.7888%;&quot; data-widthpercent=&quot;46.33&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vuvx4/btrX32fUqgk/MdXYXEZsCr74kY3IaB4r4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVuvx4%2FbtrX32fUqgk%2FMdXYXEZsCr74kY3IaB4r4k%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;1515&quot; height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhOMCc/btrYaqfocww/O2K2EPmRjQ2DAmiKQ4UzYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhOMCc/btrYaqfocww/O2K2EPmRjQ2DAmiKQ4UzYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhOMCc/btrYaqfocww/O2K2EPmRjQ2DAmiKQ4UzYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhOMCc%2FbtrYaqfocww%2FO2K2EPmRjQ2DAmiKQ4UzYK%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;812&quot; height=&quot;467&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️팀&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;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;게임 난이도 조절 기능 추가&lt;/li&gt;
&lt;li&gt;제한시간 변경 기능 추가&lt;/li&gt;
&lt;li&gt;이미지 좋아요 기능&lt;/li&gt;
&lt;li&gt;배경음악 조절 기능&lt;/li&gt;
&lt;li&gt;마이페이지 추가 (로그아웃, 뱃지, 좋아요한 이미지)&lt;/li&gt;
&lt;li&gt;게임방 조회 SSE 적용&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;오류 발생한 gameRoom 나와서 다른 방 입장 시도 시 입장 안 되는 에러 해결&lt;/li&gt;
&lt;li&gt;방을 나갔다 왔을 시 webRTC 연결이 되지 않는 에러 해결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♂️개인&lt;/b&gt;&lt;b&gt;&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;/li&gt;
&lt;li&gt;방 나가기 이후 뒤로가기 누르면 방으로 재접속되는 이슈로 뒤로가기 막기&lt;/li&gt;
&lt;li&gt;UX를 위한 툴팁 추가&lt;/li&gt;
&lt;li&gt;결과창에서 이미지 좋아요 기능 추가&lt;/li&gt;
&lt;li&gt;마이페이지 기능 추가
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;뱃지, 좋아요한 이미지 보기, 로그아웃&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;UX개선을 위한 세부적인 UI 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&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;2차 런칭&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;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;제일 힘들었지만, 그동안의 결실을 확인할 수 있었던 제일 행복한 주간이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벌써 항해가 끝나간다는 생각에 후련함과 취업을 준비해야된다는 생각에 떨림과 기대감이 공존한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 프로젝트를 잘 마무리할 일만 남았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>항해99</category>
      <category>항해99</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/92</guid>
      <comments>https://synuns.tistory.com/92#entry92comment</comments>
      <pubDate>Sun, 5 Feb 2023 01:43:30 +0900</pubDate>
    </item>
    <item>
      <title>[항해99] 11주차 실전프로젝트(4) 회고</title>
      <link>https://synuns.tistory.com/91</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2023-01-30 (5).png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;994&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kU4eu/btrXpbqzPww/Vq2EarK9FEJMf9Rl9iOvQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kU4eu/btrXpbqzPww/Vq2EarK9FEJMf9Rl9iOvQ0/img.png&quot; data-alt=&quot;매일 새벽 늦게까지 남아있는 우리 팀원들!&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kU4eu/btrXpbqzPww/Vq2EarK9FEJMf9Rl9iOvQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkU4eu%2FbtrXpbqzPww%2FVq2EarK9FEJMf9Rl9iOvQ0%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;1920&quot; height=&quot;994&quot; data-filename=&quot;2023-01-30 (5).png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;994&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;매일 새벽 늦게까지 남아있는 우리 팀원들!&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLqYu/btrXrTbUXY8/mRmCGPkuNSbzNUYea1RQR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLqYu/btrXrTbUXY8/mRmCGPkuNSbzNUYea1RQR0/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;935&quot; data-filename=&quot;2023-01-30 (1).png&quot; style=&quot;width: 49.6029%; margin-right: 10px;&quot; data-widthpercent=&quot;50.19&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLqYu/btrXrTbUXY8/mRmCGPkuNSbzNUYea1RQR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLqYu%2FbtrXrTbUXY8%2FmRmCGPkuNSbzNUYea1RQR0%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;1920&quot; height=&quot;935&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tWpDR/btrXonSjJTl/HdTJGYFi6UvXqHykVUQmwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tWpDR/btrXonSjJTl/HdTJGYFi6UvXqHykVUQmwK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;942&quot; data-filename=&quot;2023-01-30 (2).png&quot; style=&quot;width: 49.2343%;&quot; data-widthpercent=&quot;49.81&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tWpDR/btrXonSjJTl/HdTJGYFi6UvXqHykVUQmwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtWpDR%2FbtrXonSjJTl%2FHdTJGYFi6UvXqHykVUQmwK%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;1920&quot; height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y07Yb/btrXtSX7cCR/AbafNiPXUK7BsRIUKxCRok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y07Yb/btrXtSX7cCR/AbafNiPXUK7BsRIUKxCRok/img.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;984&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;50.05&quot; style=&quot;width: 49.4688%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y07Yb/btrXtSX7cCR/AbafNiPXUK7BsRIUKxCRok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY07Yb%2FbtrXtSX7cCR%2FAbafNiPXUK7BsRIUKxCRok%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;1920&quot; height=&quot;984&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2wZOI/btrXyiBYoNa/22Pw1CjQohT0nU0KumrliK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2wZOI/btrXyiBYoNa/22Pw1CjQohT0nU0KumrliK/img.png&quot; data-is-animation=&quot;false&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;986&quot; data-filename=&quot;2023-01-30 (7).png&quot; style=&quot;width: 49.3684%;&quot; data-widthpercent=&quot;49.95&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2wZOI/btrXyiBYoNa/22Pw1CjQohT0nU0KumrliK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2wZOI%2FbtrXyiBYoNa%2F22Pw1CjQohT0nU0KumrliK%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;1920&quot; height=&quot;986&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;게임 결과 화면&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 이&lt;/b&gt;&lt;b&gt;번주에 한 일&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️팀&lt;/b&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MVP 기준 뷰 작업 완료&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Naver, Kakao, Google 소셜 로그인&lt;/b&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;게임 중 퇴장 유저 발생 시 정상 진행되도록 처리&lt;/li&gt;
&lt;li&gt;게임 중 진행 인원 4명 미만될 시 강제종료&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;/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;회원 정보 조회 관련 API&lt;/li&gt;
&lt;li&gt;유저 활동 내역 저장하여 업적 시스템 구현 ( 추후 업적별 뱃지 부여 예정 )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UX 향상&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;/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;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;/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;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♂️개인&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;/li&gt;
&lt;li&gt;이미지 라이크, 다운로드 기능&lt;/li&gt;
&lt;li&gt;사운드 적용&lt;/li&gt;
&lt;li&gt;Google Analystics 적용&lt;/li&gt;
&lt;li&gt;게임방 소켓 연결 코드 리펙토링&lt;/li&gt;
&lt;li&gt;게임방 입장 시 예외 상황 처리&lt;/li&gt;
&lt;li&gt;네이버 로그인, 구글 로그인&lt;/li&gt;
&lt;li&gt;게임중일 때 뒤로가기, 새로고침 막기&lt;/li&gt;
&lt;li&gt;UX 개선 작업&lt;/li&gt;
&lt;li&gt;마이페이지 제작 중&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; &amp;zwj;♀️베타테스트&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정식 런칭 직전의 베타 테스트를 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지인들과 항해 동기들이 찾아와주었다.&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;항해 동기분이 작성해주신 피드백!&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1. 게임을 하고 있을 때, 아이콘이 4개중에 동그라미 아이콘이 있는데 어떤 것을 의미하는지 이해가 안됌.&lt;br /&gt;가이드가 부족함&amp;nbsp;&lt;br /&gt;&lt;b&gt;=&amp;gt; 가이드를 추가할 예정&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;펜의 굵기가 굵은 것 밖에 없어서 세부적인 그림 묘사가 어려움.&lt;br /&gt;&lt;b&gt;=&amp;gt; 펜의 굵기를 유용한 크기들로 추릴 예정&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;2. 연필아이콘을 클릭했을 때 색깔을 지정할 수 있던데,&lt;br /&gt;색깔을 클릭했을때 내가 현재 어떤 것을 클릭하고 있는지&lt;br /&gt;파악할 수 있었으면 조금 더 사용자들 배려한다는 느낌으로 현재 상태를 알 수 있게했으면 좋겠음.&lt;br /&gt;예를들어 현재 선택된 색깔에 테두리를 둔다던가 연필아이콘의 바탕이나 선의&lt;br /&gt;색이 현재 선택된 컬러색으로 변한다던가 등&lt;br /&gt;&lt;b&gt;=&amp;gt; 지정한 컬러가 표시되도록 변경&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;3. 게임 중간에 카운트 시간이 줄지 않는 상황이 나옴. 이유는 모르겠음.&lt;br /&gt;다들 안되서 나가는 상황 발생.&lt;br /&gt;&lt;b&gt;=&amp;gt; 시간 관련 부분은 자동 제출을 포함해서 에러가 너무 많아서 런칭 스펙에서 제외&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;4. 방에 들어왔을 때 새로고침을 했을 때 아무것도 되지 않음. 버그? 안되는 것.&lt;br /&gt;&lt;b&gt;=&amp;gt; 방에서 새로고침을 하지 않도록 안내 필요&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;5. 방에 들어 왔을 때 마이크가 안들릴 때 어떻게 해야할지 잘 모르겠음. 우선은 마이크가 들리지 않음.&lt;br /&gt;나갔다가 새로고침하고 들어오면 된다고 하는 답변을 들었는데 했음에도 되지 않음. 사용자의 입장에서는 어떻게 해야할지 모를 것 같다는 생각.&lt;br /&gt;&lt;b&gt;=&amp;gt; webRTC 연결이 항상 완벽하지는 않기 때문이라고 생각. 재연결 버튼을 추가할 예정&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능적으로 문제가 되는 부분들은 당연히 피드백이 왔으며 생각보다 &lt;b&gt;UX적인 측면&lt;/b&gt;에서 피드백이 많이 왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 일단 잘되는 것이 제일 중요하다고 느껴졌다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;치명적인 오류가 생기는 기능들은 없애고 런칭하기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어서 제한시간이 끝나면 자동 제출되는 기능이 있는데 이 부분에서 오류가 발생해버렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 부분은 빼고 런칭하기로 했다.&lt;/p&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;2. UX에 많은 노력을 들여야 한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떻게 하면 더 사용자가 편할 지 생각해보아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런칭을 정식으로 시작한다면 얼마나 피드백이 들어올지 기대된다.&lt;b&gt;&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;b&gt;✅런칭 전 체크리스트&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;모든 기능이 정상 작동하나요?&lt;/b&gt;&lt;br /&gt;&lt;b&gt;해결한 이슈&lt;/b&gt;&lt;br /&gt;[x] 중도 이탈 유저 관련 이슈&lt;br /&gt;[x] 게임방 중복 입장으로 인해 로비에 갇히는 이슈&lt;br /&gt;[x] 첫 이미지 라운드에서 undo하면 이전 그림 나오는 이슈&lt;br /&gt;[x] STOMP 버퍼 부족 이슈&lt;br /&gt;[x] 이미지 좋아요, 저장 기능&lt;br /&gt;[x] 프로필 편집 기능&lt;br /&gt;[x] 키워드 제출 위치 변경&lt;br /&gt;&lt;br /&gt;&lt;b&gt;해결하지 못해 제거한 기능&lt;/b&gt;&lt;br /&gt;[x] 자동제출 기능&lt;br /&gt;[x] 시간초 효과음&lt;br /&gt;&lt;br /&gt;&lt;b&gt;준비 되지 않은 기능이 그대로 노출되어 있지는 않나요?&lt;/b&gt;&lt;br /&gt;[x] 검수 받지 못한 네이버 로그인&lt;br /&gt;[x] 소리 설정 관련 기능&lt;br /&gt;[x] 마이페이지&lt;br /&gt;&lt;br /&gt;&lt;b&gt;트러블 슈팅해야 할 부분을 인지하고 있나요?&lt;/b&gt;&lt;br /&gt;[x] 자동 제출 관련 이슈&lt;br /&gt;&lt;br /&gt;&lt;b&gt;배포 자료&lt;/b&gt;&lt;br /&gt;[x] 슬랙에 올릴 홍보 문구가 작성 되었나요?&lt;br /&gt;[x] 슬랙에 올릴 홍보용 이미지가 제작 되었나요?&lt;br /&gt;[x] 슬랙에 올릴 구글폼 설문조사가 제작 되었나요?&lt;br /&gt;[x] 각자의 트러블 슈팅이 추가 된 깃헙 리드미가 완성 되었나요?&lt;br /&gt;[x] 대외용 팀노션 제작 되었나요?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;마케팅&lt;/b&gt;&lt;br /&gt;[x] 채널톡이 정상적으로 연결 되었나요?&lt;br /&gt;[x] 고객의 문의에 응대할 준비가 되었나요?&lt;br /&gt;[x] 이벤트 일정과 방식이 구체화 되었나요?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;모든 체크리스트를 충족하고 내일인 월요일 오전 9시 런칭 예정!!&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;%F-%-F%--%--%EC%-D%B-%EB%B-%--%EC%A-%BC%--%ED%--%A-%EC%-B%-C%EB%--%-C&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 이번주 키워드&lt;/b&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;라이브러리 없이 &lt;b&gt;toast&lt;/b&gt; 제작하기&lt;br /&gt;애니메이션을 위한 &lt;b&gt;framer&lt;/b&gt;&lt;br /&gt;사운드를 위한 &lt;b&gt;howler.js&lt;/b&gt;&lt;br /&gt;&lt;b&gt;react-ga4&lt;/b&gt; (google analytics)&lt;br /&gt;&lt;b&gt;google, naver login&lt;/b&gt;&lt;br /&gt;&lt;b&gt;UX/UI&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&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;/li&gt;
&lt;li&gt;서비스 관리 및 유지보수&lt;/li&gt;
&lt;li&gt;마케팅&lt;/li&gt;
&lt;li&gt;마이페이지 제작&lt;/li&gt;
&lt;li&gt;CI/CD&lt;/li&gt;
&lt;li&gt;코드 리펙토링&lt;/li&gt;
&lt;/ul&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;너무 너무 힘들었다. 항해를 시작하고 나서 제일 힘들었던 주간이 아니었나 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새벽 6시까지 밤을 새다가 자려는데 컨디션이 너무 안좋았다. 아니나 다를까 일어나자마자 제 정신을 차릴 수가 없었다. 몸살이 나버린 거다. 그래도 도저히 쉴 수가 없어서 힘든 몸을 이끌고 책상 앞에 앉았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;런칭은 사실 금요일 예정이었는데, 테스트를 진행하면서 치명적인 오류가 계속해서 발생해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하루에 두 세개 씩 이슈를 해결하느라 런칭이 계속해서 밀렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다가 일요일에 정상적인 테스트가 가능할 것 같아서 베타테스트를 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;베타테스트에 함께 해주신 지인 항해 동기분들께 정말 정말 감사하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내일부터는 서비스 시작인데, 무관심이 대부분이겠지만서도 세상에 선보인다는 생각에 은근히 떨린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1675024507517&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;trys-ketch.com&quot; data-og-source-url=&quot;https://trys-ketch.com/&quot; data-og-url=&quot;https://trys-ketch.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bA3vMO/hyRq9R2W0o/MP4a1Ao9fJNdJUounsGtGK/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627&quot;&gt;&lt;a href=&quot;https://trys-ketch.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://trys-ketch.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bA3vMO/hyRq9R2W0o/MP4a1Ao9fJNdJUounsGtGK/img.png?width=1200&amp;amp;height=627&amp;amp;face=0_0_1200_627');&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;trys-ketch.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;</description>
      <category>항해99</category>
      <category>서비스런칭</category>
      <category>항해99</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/91</guid>
      <comments>https://synuns.tistory.com/91#entry91comment</comments>
      <pubDate>Mon, 30 Jan 2023 03:34:36 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 소셜 로그인 한페이지에서 함께 처리하기</title>
      <link>https://synuns.tistory.com/88</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;942&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zXHfi/btr2D819l5U/ew2O3OdMsUCvhllHGfxlKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zXHfi/btr2D819l5U/ew2O3OdMsUCvhllHGfxlKK/img.png&quot; data-alt=&quot;로그인 페이지에서 3개의 sns 로그인을 처리할 필요가 있다&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zXHfi/btr2D819l5U/ew2O3OdMsUCvhllHGfxlKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzXHfi%2Fbtr2D819l5U%2Few2O3OdMsUCvhllHGfxlKK%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;1920&quot; height=&quot;942&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;942&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;로그인 페이지에서 3개의 sns 로그인을 처리할 필요가 있다&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;뭐가 문제일까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sns 인증 과정이후에 페이지 내에서 callback으로 토큰 값을 받아서 토큰 값을 서버로 보내주는 식으로 인증과정을 거쳐가고 있었다. 다만 이 설계가 한가지의 sns 로그인이었다면 문제가 없겠지만, 세가지의 sns 로그인을 처리하려면 &lt;u&gt;각각의 sns로그인이 어떤 sns인지 식별할 수 있어야한다.&lt;/u&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;1. sns 인증 과정 이후 callback&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. url parameter에 code가 존재하면 token으로 로그인 api 요청&lt;/b&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;https://trys-ketch.com/login?code={token}&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 서버의 로그인 절차 이후 response를 받아서 토큰값 쿠키에 저장&lt;/b&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에는 이렇게 callback되고 있었는데,&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;https://trys-ketch.com/login?code={token}&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러개의 sns를 식별하기 위해서 각각의 callback url에 계층을 한가지를 더해주는 방법을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;https://trys-ketch.com/login/google?code={token}&lt;br /&gt;https://trys-ketch.com/login/naver?code={token}&lt;br /&gt;https://trys-ketch.com/login/kakao?code={token}&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;sns 로그인 api 서비스에 접속해서 &lt;b&gt;callback url&lt;/b&gt; 설정을 변경해주어야 문제없이 작동할 수 있다.&lt;/span&gt;&lt;/i&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;이렇게 하면 sns를 각각 인식할 수 있다.&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;h3 data-ke-size=&quot;size23&quot;&gt;라우터 처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 라우터에서 url parameter로 sns부분으로 접근할 수 있게 처리한다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1678174454859&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function Router() {
  return (
    &amp;lt;BrowserRouter&amp;gt;
      &amp;lt;Routes&amp;gt;
        &amp;lt;Route path=&quot;/login&quot; element={&amp;lt;Login /&amp;gt;} /&amp;gt;
        &amp;lt;Route path=&quot;/login/:sns&quot; element={&amp;lt;Login /&amp;gt;} /&amp;gt;
      &amp;lt;/Routes&amp;gt;
    &amp;lt;/BrowserRouter&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 로그인 페이지 내에서 sns 값을 받아서 처리하기&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1678175332023&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function Login() {
  const { sns } = useParams();

  const code = searchParams.get('code');
  const state = searchParams.get('state');

  const handleLogin = useCallback(
    (res) =&amp;gt; {
      if (res.data.statusCode === 200) {
      	...
        setCookie(res.headers.authorization);
        navigate('/');
      }
    },
    [dispatch, navigate, openModal, sns],
  );

  const kakaoLogin = useCallback(() =&amp;gt; {
    authAPI.kakaoLogin(code)
      .then((res) =&amp;gt; handleLogin(res))
      .catch((err) =&amp;gt; {...});
  }, [code, handleLogin]);

  const googleLogin = useCallback(() =&amp;gt; {
    authAPI.googleLogin(code)
      .then((res) =&amp;gt; handleLogin(res))
      .catch((err) =&amp;gt; {...});
  }, [code, handleLogin]);

  const naverLogin = useCallback(() =&amp;gt; {
    authAPI.naverLogin(code, state)
      .then((res) =&amp;gt; handleLogin(res))
      .catch((err) =&amp;gt; {...});
  }, [code, handleLogin, state]);

  useEffect(() =&amp;gt; {
    if (code) {
      switch (sns) {
        case 'kakao':
          kakaoLogin();
          break;
        case 'google':
          googleLogin();
          break;
        case 'naver':
          naverLogin();
          break;
        default:
          break;
      }
    }
  }, [googleLogin, kakaoLogin, naverLogin, sns, code]);

  return (
    ...
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useEffect에서 sns 값에 대한 분기처리를 해준 뒤 각각 로그인 api에 맞게 호출해주면 된다.&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;여기서 쿠키 처리가 문제가 될 수 있는데, 그 이유는 url 계층을 하나더 늘렸기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약에 쿠키 path설정을 default로 했다면, 해당 계층에서만 접근가능하기 때문이다.&lt;/p&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;모든 페이지에서 접근할 수 있도록 path를 지정해주자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;path를 root로 설정해주면 모든 url계층에서 접근가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1678176672786&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export const setCookie = (value, name = TOKEN_KEY) =&amp;gt; {
  return cookies.set(name, value, { path: '/' });
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발일기</category>
      <category>Cookie</category>
      <category>login</category>
      <category>SNS</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/88</guid>
      <comments>https://synuns.tistory.com/88#entry88comment</comments>
      <pubDate>Tue, 24 Jan 2023 11:55:03 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] SSE와 고군분투하기</title>
      <link>https://synuns.tistory.com/87</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/67HQE/btr2zm7Z5Zn/kp6ZlisHK69HU78kAWIDX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/67HQE/btr2zm7Z5Zn/kp6ZlisHK69HU78kAWIDX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/67HQE/btr2zm7Z5Zn/kp6ZlisHK69HU78kAWIDX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F67HQE%2Fbtr2zm7Z5Zn%2Fkp6ZlisHK69HU78kAWIDX1%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;960&quot; height=&quot;502&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SSE로 인한 Timeout 수정하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSE가 작동하고 있는 동안에는 다른 모든 요청이 느려진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;axios로 api를 호출하면 timeout이 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useRef를 붙여서 eventSource 객체를 관리해봤는데 이상하게 해결이 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;&lt;i&gt;&amp;rArr; (나중에는 결국 백엔드에서의 이슈였던 것으로 밝혀졌다고&amp;hellip;)&lt;/i&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useRef의 원리에 따라서 증거를 찾아나가 보면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 렌더링에서 동일한 객체를 제공하기 때문인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 eventSource 생성을 함수 최상단에서 다음과 같이 생성했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;const evtSource = new EventSource(${process.env.REACT\_APP\_API\_URL}/api/sse/rooms);&lt;/code&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1678170273554&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    const evtSource = useRef(null);

    const closeEvtSource = () =&amp;gt; {
    evtSource.current.close();
    console.log('evtSource closed!');
    console.log(evtSource);
  };

  const openEvtSource = () =&amp;gt; {
    evtSource.current.onerror = async (err) =&amp;gt; {
      console.error('EventSource failed:', err);
      closeEvtSource();
      // 재연결 시도
            openEvtSource()
    };
    // 연결됐을때 방 정보 받아오기
    evtSource.current.addEventListener('connect', async (event) =&amp;gt; {
      console.log('evtSource connected!');
      console.log(evtSource);
      const data = JSON.parse(event.data);
      setRooms(data);
    });
    // 방 정보가 변할 때 방 정보 받아오기
    evtSource.current.addEventListener('changeRoom', async (event) =&amp;gt; {
      console.log('evtSource changeRoom!');
      console.log(evtSource);
      const data = JSON.parse(event.data);
      setRooms(data);
    });
  };

  useEffect(() =&amp;gt; {
    evtSource.current = new EventSource(`${process.env.REACT_APP_API_URL}/api/sse/rooms`);
    openEvtSource();
    return () =&amp;gt; {
      closeEvtSource();
    };
  }, []);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이 과정에서 방 정보가 변한다면 eventSource 객체를 재생성하게 되니 이 부분에서 문제가 생기지 않았을까 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근데 재연결 시도하는 부분이 조금 마음에 안든다. 연결이 되지 않고 계속해서 에러가 난다면 무한 재귀가 발생할 수 있는 부분이라고 생각이 든다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;호출 스케줄링 (setTimeout vs SetInterval)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일정 시간이 지난 후에 원하는 함수를 예약 실행(호출)할 수 있게 하는 것을 '&lt;b&gt;호출 스케줄링(scheduling a call)'&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;setTimeout을 이용해 일정 시간이 지난 후에 함수를 실행하는 방법&lt;/li&gt;
&lt;li&gt;setInterval을 이용해 일정 시간 간격을 두고 함수를 실행하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 간단하게 타임아웃만 설정해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1678170329557&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;evtSource.current.onerror = async (err) =&amp;gt; {
  console.error('EventSource failed:', err);
  closeEvtSource();
  // 재연결 시도
  setTimeout(openEvtSource(), 3000);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적절한 시간이 3초라고 생각해서 3초로 적용해놓았다.&lt;/p&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;figure id=&quot;og_1678170335589&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;setTimeout과 setInterval을 이용한 호출 스케줄링&quot; data-og-description=&quot;&quot; data-og-host=&quot;ko.javascript.info&quot; data-og-source-url=&quot;https://ko.javascript.info/settimeout-setinterval&quot; data-og-url=&quot;https://ko.javascript.info/settimeout-setinterval&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/YWT1P/hyRQreoV60/r1D6NvlygCCRFxLlV4foN1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/v4HIn/hyRRMabCDt/KqZyGnAdlfHq4dXvyLeg8k/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512&quot;&gt;&lt;a href=&quot;https://ko.javascript.info/settimeout-setinterval&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.javascript.info/settimeout-setinterval&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/YWT1P/hyRQreoV60/r1D6NvlygCCRFxLlV4foN1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/v4HIn/hyRRMabCDt/KqZyGnAdlfHq4dXvyLeg8k/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512');&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;setTimeout과 setInterval을 이용한 호출 스케줄링&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;ko.javascript.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;figure id=&quot;og_1678170337743&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;React에서 setInterval 현명하게 사용하기(feat. useInterval)&quot; data-og-description=&quot;들어가기 Babble의 방 목록 페이지에 들어가면 유저가 생성한 방들이 쭉 나열되어 있는 것을 볼 수 있다. (안타깝게도 유저가 없으면 방도 없다ㅜㅜ) 그리고 이 방들은 5초마다 서버에 요청을 보내&quot; data-og-host=&quot;mingule.tistory.com&quot; data-og-source-url=&quot;https://mingule.tistory.com/65&quot; data-og-url=&quot;https://mingule.tistory.com/65&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dlycKW/hyRRMOMHVw/tzwusguzWZjQ1GpDXjj3Z0/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/bVqqyk/hyRQpVcB97/1n3O9JIuspJ6BLCb154QK1/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/dBOsqW/hyRQiu0Wmz/5XIbUw5rkLmXu1KeMi6eF0/img.png?width=1170&amp;amp;height=394&amp;amp;face=0_0_1170_394&quot;&gt;&lt;a href=&quot;https://mingule.tistory.com/65&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://mingule.tistory.com/65&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dlycKW/hyRRMOMHVw/tzwusguzWZjQ1GpDXjj3Z0/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/bVqqyk/hyRQpVcB97/1n3O9JIuspJ6BLCb154QK1/img.png?width=800&amp;amp;height=420&amp;amp;face=0_0_800_420,https://scrap.kakaocdn.net/dn/dBOsqW/hyRQiu0Wmz/5XIbUw5rkLmXu1KeMi6eF0/img.png?width=1170&amp;amp;height=394&amp;amp;face=0_0_1170_394');&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에서 setInterval 현명하게 사용하기(feat. useInterval)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;들어가기 Babble의 방 목록 페이지에 들어가면 유저가 생성한 방들이 쭉 나열되어 있는 것을 볼 수 있다. (안타깝게도 유저가 없으면 방도 없다ㅜㅜ) 그리고 이 방들은 5초마다 서버에 요청을 보내&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;mingule.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;D2&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;D2는 &lt;b&gt;Declarative Diagramming(선언적 다이어그래밍)&lt;/b&gt;이다.&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;2048&quot; data-origin-height=&quot;1140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9grwq/btr2tB5OsAa/WDWlDHt3EfzRAqKkK0uvVK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9grwq/btr2tB5OsAa/WDWlDHt3EfzRAqKkK0uvVK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9grwq/btr2tB5OsAa/WDWlDHt3EfzRAqKkK0uvVK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/9grwq/btr2tB5OsAa/WDWlDHt3EfzRAqKkK0uvVK/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;2048&quot; height=&quot;1140&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1140&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;figure id=&quot;og_1678170356383&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;D2 Tour | D2 Documentation&quot; data-og-description=&quot;D2 is a diagram scripting language that turns text to diagrams. It stands for&quot; data-og-host=&quot;d2lang.com&quot; data-og-source-url=&quot;https://d2lang.com/tour/intro&quot; data-og-url=&quot;https://d2lang.com/tour/intro&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yuxM4/hyRRGugri4/zgW8UhfqMCLMMsXygFSeA1/img.png?width=2560&amp;amp;height=1280&amp;amp;face=0_0_2560_1280&quot;&gt;&lt;a href=&quot;https://d2lang.com/tour/intro&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://d2lang.com/tour/intro&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yuxM4/hyRRGugri4/zgW8UhfqMCLMMsXygFSeA1/img.png?width=2560&amp;amp;height=1280&amp;amp;face=0_0_2560_1280');&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;D2 Tour | D2 Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;D2 is a diagram scripting language that turns text to diagrams. It stands for&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;d2lang.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;h3 data-ke-size=&quot;size23&quot;&gt;사용성 높이기 (UX)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dguuZ5/btr2vn0BjoV/oDMgTWUHCvoorC7oVIccc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dguuZ5/btr2vn0BjoV/oDMgTWUHCvoorC7oVIccc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dguuZ5/btr2vn0BjoV/oDMgTWUHCvoorC7oVIccc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdguuZ5%2Fbtr2vn0BjoV%2FoDMgTWUHCvoorC7oVIccc0%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;553&quot; height=&quot;337&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방생성 모달에서 편의성을 위한 두가지 피드백이 있었다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 모달이 생성되면 input에 자동 focus하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;useRef를 써도 되고 다양한 방법이 있겠지만, 가장 쉬운 방법은 autoFocus 속성을 추가해주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;&amp;lt;input autoFocus ... /&amp;gt;&lt;/code&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;2. 엔터를 누르면 버튼이 작동되게하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; children을 감싸고 있는 Content 컴포넌트에 onKeyPress 이벤트 리스너를 추가해줌&lt;/p&gt;
&lt;pre id=&quot;code_1678170573421&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function Modal({ children, title, btnText, onConfirm }) {
  const { closeModal } = useModal();

  const handleClose = () =&amp;gt; {
    closeModal();
  };

  const handleKeyPress = (event) =&amp;gt; {
    if (event.key === 'Enter') {
      onConfirm();
    }
  };

  return (
    &amp;lt;Overlay&amp;gt;
      &amp;lt;ModalWrap&amp;gt;
        &amp;lt;CloseButton onClick={handleClose}&amp;gt;
          &amp;lt;img src={cancel} alt=&quot;X&quot; /&amp;gt;
        &amp;lt;/CloseButton&amp;gt;
        &amp;lt;ContentsWrap&amp;gt;
          &amp;lt;Title&amp;gt;{title}&amp;lt;/Title&amp;gt;
          &amp;lt;Content onKeyPress={handleKeyPress}&amp;gt;{children}&amp;lt;/Content&amp;gt;
          &amp;lt;BtnArea&amp;gt;
            &amp;lt;FlatButton onClick={onConfirm}&amp;gt;{btnText}&amp;lt;/FlatButton&amp;gt;
          &amp;lt;/BtnArea&amp;gt;
        &amp;lt;/ContentsWrap&amp;gt;
      &amp;lt;/ModalWrap&amp;gt;
    &amp;lt;/Overlay&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘된다!!&lt;/p&gt;</description>
      <category>개발일기</category>
      <category>D2</category>
      <category>setInterval</category>
      <category>setTimeout</category>
      <category>SSE</category>
      <category>TIL</category>
      <category>UX</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/87</guid>
      <comments>https://synuns.tistory.com/87#entry87comment</comments>
      <pubDate>Tue, 24 Jan 2023 11:54:45 +0900</pubDate>
    </item>
    <item>
      <title>[항해99] 10주차 실전프로젝트(3) 회고</title>
      <link>https://synuns.tistory.com/86</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mOhP1/btrWRcEnPOd/55BWpwm64etkA4ve1eoeSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mOhP1/btrWRcEnPOd/55BWpwm64etkA4ve1eoeSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mOhP1/btrWRcEnPOd/55BWpwm64etkA4ve1eoeSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmOhP1%2FbtrWRcEnPOd%2F55BWpwm64etkA4ve1eoeSk%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;1920&quot; height=&quot;936&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; 이번 주에 한일&lt;/b&gt;&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;SSE&lt;/b&gt;를 통한 게임방 조회&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SockJS + Stomp&lt;/b&gt;를 이용한 채팅 기능&lt;/li&gt;
&lt;li&gt;전역상태관리를 이용한 효율적인 모달 관리&lt;/li&gt;
&lt;li&gt;디자이너님과 협업 + 스타일 작업&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ec2&lt;/b&gt;에 배포하기&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Trys-Ketch/trys-ketch-client/issues&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이슈&lt;/a&gt; 정리 및 해결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중간 발표회&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt; &amp;zwj;♂️중간 발표회&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2023-01-21 (14).png&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwTuWj/btrWRWubI9t/ieS8DhKvVP0rO1K2ykNW0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwTuWj/btrWRWubI9t/ieS8DhKvVP0rO1K2ykNW0K/img.png&quot; data-alt=&quot;게더에서 중간 발표회&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwTuWj/btrWRWubI9t/ieS8DhKvVP0rO1K2ykNW0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwTuWj%2FbtrWRWubI9t%2FieS8DhKvVP0rO1K2ykNW0K%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;1897&quot; height=&quot;735&quot; data-filename=&quot;2023-01-21 (14).png&quot; data-origin-width=&quot;1897&quot; data-origin-height=&quot;735&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;게더에서 중간 발표회&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 조 당 주어진 발표시간은 5분입니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1분 : MVP 시연&lt;/li&gt;
&lt;li&gt;1분 : 서비스 아키텍쳐 설명&lt;/li&gt;
&lt;li&gt;1분 30초 : 기술적 의사 결정&lt;/li&gt;
&lt;li&gt;1분 30초 : 추후 개발 및 기술적인 도전 계획&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5분의 발표가 끝나면 &lt;span data-token-index=&quot;1&quot;&gt;25분(기술 면접 질문 &amp;amp; MVP 기능 피드백)&lt;/span&gt; 동안 멘토님들의 기술 면접과 피드백이 진행됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt; 멘토님 피드백&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;우리팀 피드백&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. &lt;span data-token-index=&quot;0&quot;&gt;API 호출에 있어서 공통된 에러 처리를 하지 않은 이유?&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명세가 초기 단계에서는 불분명하고 수정이 많았기 때문에 공통 에러 처리를 하지 않았습니다. axios의 &lt;b&gt;interceptors&lt;/b&gt;를 이용해서 각각의 에러 상황과 에러 코드에 대한 명세를 맞춰서 상황에 맞게 공통적으로 처리하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. &lt;span data-token-index=&quot;0&quot;&gt;withCredentials 는 왜 붙이는지에 대한 이해가 있다면 설명&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;withCredentials는 &lt;b&gt;서로 다른 도메인&lt;/b&gt;(크로스 도메인)에 요청을 보낼 때 요청에&amp;nbsp;&lt;b&gt;credential&amp;nbsp;정보&lt;/b&gt;를 담아서 보낼 지를 결정하는 항목입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서,&amp;nbsp;&lt;b&gt;credential&amp;nbsp;정보가 포함되어 있는 요청&lt;/b&gt;은 아래 두 가지 경우를 의미합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;쿠키를 첨부해서 보내는 요청&lt;/li&gt;
&lt;li&gt;헤더에&amp;nbsp;&lt;b&gt;Authorization&lt;/b&gt;&amp;nbsp;항목이 있는 요청&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, 보내고자 하는 요청이 위 두 가지 항목 중 한 가지라도 포함하고 있다면&amp;nbsp;&lt;b&gt;withCredentials&lt;/b&gt; 옵션을 &lt;b&gt;true&lt;/b&gt;로 설정해야만 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://junglast.com/blog/http-ajax-withcredential&quot;&gt;https://junglast.com/blog/http-ajax-withcredential&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;size16&quot;&gt;&amp;rArr; frontend에서 credential 정보가 담겨있는 요청을 하기 때문에 WithCredentials를 명시해주었습니다.&lt;/p&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;3. &lt;span data-token-index=&quot;0&quot;&gt;Frontend에 CORS 헤더들을 세팅한 것이 보이는데 의도가 무엇인지?&lt;/span&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_1674412497808&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const instance = axios.create({
  baseURL: process.env.REACT_APP_API_URL,
  headers: {
    'Access-Control-Allow-Origin': '*',
  },
});&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;1431&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwjfBl/btrWVKlZmBq/Dt3x6B9fbrnisklZd88KS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwjfBl/btrWVKlZmBq/Dt3x6B9fbrnisklZd88KS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwjfBl/btrWVKlZmBq/Dt3x6B9fbrnisklZd88KS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwjfBl%2FbtrWVKlZmBq%2FDt3x6B9fbrnisklZd88KS0%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;1431&quot; height=&quot;438&quot; data-origin-width=&quot;1431&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청할 때 헤더에 &lt;b&gt;Origin&lt;/b&gt;이 함께 붙어가며 이것과 서버에서 보내주는 &lt;b&gt;Access-Control-Allow-Origin&lt;/b&gt;이 동일하다면 &lt;b&gt;CORS &lt;/b&gt;이슈가 발생하지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항해의 협업 세션에서 사용했던 코드를 참고하여서 사용했던 코드입니다. 코드에 대한 이해도 없이 사용했기 때문에 발생했던 문제라고 생각합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; Access-Control-Allow-Origin헤더는 서버에서 보내주는 응답에 명시하는 부분이기 때문에 요청에서 필요 없는 부분인 request 헤더에 있던 Access-Control-Allow-Origin은 삭제하였습니다.&lt;/p&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;4. &lt;span data-token-index=&quot;0&quot;&gt;source map 숨기기&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) .env 파일에 명시하기.env 파일에 추가하면 빌드시 .map 파일을 생성하지 않음&lt;/p&gt;
&lt;pre id=&quot;code_1674412742822&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GENERATE_SOURCEMAP=false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) package.json의 build 명령어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;b&gt;build&lt;/b&gt; &amp;rArr; linux 환경에서의 빌드 명령어, &lt;b&gt;winBuild&lt;/b&gt; &amp;rArr; window 환경에서의 빌드 명령어)&lt;/p&gt;
&lt;pre id=&quot;code_1674412768918&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;build&quot;: &quot;GENERATE_SOURCEMAP=false react-scripts build&quot;, 
&quot;winBuild&quot;: &quot;set \\&quot;GENERATE_SOURCEMAP=false\\&quot; &amp;amp;&amp;amp; react-scripts build&quot;,&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1번의 해결법으로 빌드 파일에서 map 파일을 제거하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제한된 시간에서 배포 과정에서 미처 신경쓰지 못한 부분입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;5. &lt;span data-token-index=&quot;0&quot;&gt;Client 와 Server 의 차이점? Git Repo를 보니 React 를 Client 라고 명명하여서 질문&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;React 자체가 Client라고 생각한 것이 아니고 서비스의 전체적인 관점에서 클라이언트에 대한 부분이라고 생각해서 그렇게 명명하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 게스트 정보 처리 관련&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; : 게스트의 정보들을 삭제하는 것은 비즈니스적으로 좋지 않습니다. 데이터 하나하나가 마케팅적으로 활용될 수 있으며 데이터 하나하나가 중요한 스타트업의 입장에서는 게스트 정보까지 소중한 데이터입니다.&lt;b&gt;&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;a href=&quot;https://www.notion.so/synuns/5a66eacda7e9460ebfc8fcaea1697828&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;▶더 자세한 내용 보러가기&lt;/b&gt;&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;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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 기술을 선택한 이유가 있어야 하며, 기술에 대한 이해도와 깊이가 있어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rArr; &lt;b&gt;기술 선택의 이유가 타당해야함!! &lt;/b&gt;특히나 취업을 위해서라면 기술로 설득을 할 수 있어야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 많은 기능이 있는것도 좋지만 더 중요한 건 잘 작동하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. mvp 설정 시에는 레이어를 나눠서 작업하고 보이는 것은 후순위. 차라리 mvp는 기능하는 것만 위주로 개발해도 좋음&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;blockquote data-ke-style=&quot;style3&quot;&gt;SSE(Server Sent Event)&lt;br /&gt;socket, SockJs, stompJs&lt;br /&gt;efficient modal manage&lt;br /&gt;https ssl&lt;br /&gt;ec2 deploy&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&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;/li&gt;
&lt;li&gt;SNS(naver, google) 로그인&lt;/li&gt;
&lt;li&gt;코드 리펙토링&lt;/li&gt;
&lt;li&gt;토스트 컴포넌트 제작&lt;/li&gt;
&lt;li&gt;UX 향상과 UI 작업&lt;/li&gt;
&lt;li&gt;사운드 (효과음, 배경음)&lt;/li&gt;
&lt;li&gt;Google Analystics&lt;/li&gt;
&lt;li&gt;github actions CI/CD&lt;/li&gt;
&lt;li&gt;렌더링 최적화&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;i&gt;&lt;s&gt;할 거 대박 많네...&lt;/s&gt;&lt;/i&gt;&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;중간 발표전에 배포한다고 잠도 3-4시간 자면서 작업했다. 시간이 너무 없어서 공부한 레퍼런스만 정리해두고 TIL을 하나도 못썼다. 치명적인 에러도 많이 발생해서 에러 해결한다고 시간도 엄청나게 많이 사용했다. 개발하면서는 하나도 없던 이슈들이 배포하고 나니까 엄청나게 많이 생겼다. 그래도 새벽까지 하면서 배포하고 발표회에서 시연할 수 있어서 기분이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세부적으로 신경쓰지 못한 부분과 전체적으로 비즈니스적인 관점까지 세세하게 알려주셔서 너무 좋은 시간이었다. 살짝 아쉬운 점은 마지막 차례의 팀이라서 멘토님이 피곤하셨는지 피드백이 꼼꼼하게 이뤄지지 못한 점이 아쉽다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;발표회를 쭉 지켜보면서 든 생각은 아무것도 모르던 병아리들이 승선하고 언제 이렇게 늠름해졌는지 10기 B반들 진짜 너무 대단하고 수고 많았다는 생각이 들었다. 모두 취업 잘했으면 좋겠다. (물론 나도..)&lt;/p&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;</description>
      <category>항해99</category>
      <category>project</category>
      <category>항해99</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/86</guid>
      <comments>https://synuns.tistory.com/86#entry86comment</comments>
      <pubDate>Sun, 22 Jan 2023 23:14:09 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] 왜 이렇게 바쁜가요? </title>
      <link>https://synuns.tistory.com/85</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpnztT/btr0KSUTRxB/0UJQovKEvbpOu5ijRrKtf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpnztT/btr0KSUTRxB/0UJQovKEvbpOu5ijRrKtf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpnztT/btr0KSUTRxB/0UJQovKEvbpOu5ijRrKtf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbpnztT%2Fbtr0KSUTRxB%2F0UJQovKEvbpOu5ijRrKtf0%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;960&quot; height=&quot;502&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;지속적인 폰트 렌더링&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;600&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKP1xh/btr0JA7XGm3/c5mwQSoW4MSkUXMC9KXtZk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKP1xh/btr0JA7XGm3/c5mwQSoW4MSkUXMC9KXtZk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKP1xh/btr0JA7XGm3/c5mwQSoW4MSkUXMC9KXtZk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cKP1xh/btr0JA7XGm3/c5mwQSoW4MSkUXMC9KXtZk/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;600&quot; height=&quot;309&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;styled-components의 Globalstyles.js에 폰트를 적용했던게 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폰트 부분만 CSS파일로 빼고 index.js에 import시키면서 해결했다.&lt;/p&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;FOUT(Font Of Unstyled Text)&lt;/b&gt;라고 한다. css가 적용되기 전에 텍스트가 보여지는 현상이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;styled-components의 globalstyle에서 font-face를 적용하면 일어나는 문제라고한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677329146710&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;[Fix] 폰트 깜빡임 &amp;middot; Issue #23 &amp;middot; Trys-Ketch/trys-ketch-client&quot; data-og-description=&quot;요약 최초 렌더링 이후에 버튼 클릭 시 폰트 깜빡임 완료조건 최초 렌더링 이후에 추가적인 깜빡거림 없음&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Trys-Ketch/trys-ketch-client/issues/23&quot; data-og-url=&quot;https://github.com/Trys-Ketch/trys-ketch-client/issues/23&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ez5cM0/hyRKNNwp1O/RVkbF3jym8JYUqPRzp4nk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/Trys-Ketch/trys-ketch-client/issues/23&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Trys-Ketch/trys-ketch-client/issues/23&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ez5cM0/hyRKNNwp1O/RVkbF3jym8JYUqPRzp4nk1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Fix] 폰트 깜빡임 &amp;middot; Issue #23 &amp;middot; Trys-Ketch/trys-ketch-client&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;github.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;figure id=&quot;og_1677329148754&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[React] 리액트 깜빡임 해결기(feat. 폰트)&quot; data-og-description=&quot;일단 내가 처한 상황은, 페이지를 이동하거나 state 변경이 생길 때마다 화면이 번쩍하고 깜빡거린다는 거였다. 리렌덜이 문제인가 싶어 리액트 개발자 도구를 이용해 리렌더링 되는 컴포넌트에 &quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@jaewoneee/React-리액트-깜빡임-해결기&quot; data-og-url=&quot;https://velog.io/@jaewoneee/React-리액트-깜빡임-해결기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bxv41j/hyRKXvQinB/CTFe0MgWsmWSD969wzbIZ0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/D5FMi/hyRKNfGkdM/Kryxpwd3U5BFFLArrvK8o1/img.png?width=1746&amp;amp;height=1366&amp;amp;face=0_0_1746_1366,https://scrap.kakaocdn.net/dn/b3MUxG/hyRJVGn9ea/sQZRchimwiUzO32M1oq6nk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://velog.io/@jaewoneee/React-리액트-깜빡임-해결기&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@jaewoneee/React-리액트-깜빡임-해결기&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bxv41j/hyRKXvQinB/CTFe0MgWsmWSD969wzbIZ0/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500,https://scrap.kakaocdn.net/dn/D5FMi/hyRKNfGkdM/Kryxpwd3U5BFFLArrvK8o1/img.png?width=1746&amp;amp;height=1366&amp;amp;face=0_0_1746_1366,https://scrap.kakaocdn.net/dn/b3MUxG/hyRJVGn9ea/sQZRchimwiUzO32M1oq6nk/img.jpg?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&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] 리액트 깜빡임 해결기(feat. 폰트)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;일단 내가 처한 상황은, 페이지를 이동하거나 state 변경이 생길 때마다 화면이 번쩍하고 깜빡거린다는 거였다. 리렌덜이 문제인가 싶어 리액트 개발자 도구를 이용해 리렌더링 되는 컴포넌트에&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;react + ec2 + github actions&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 배포를 s3에서 ec2로 변경하게 되면서 ec2 환경에서의 CI/CD는 어떻게 이루어지는지 찾기 위해서 레퍼런스를 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677329151663&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;Deploy React app to AWS EC2 using GitHub Actions - Lightrains&quot; data-og-description=&quot;This article helps you understand how you can automatically deploy your reactjs application to AWS EC2 from GitHub&quot; data-og-host=&quot;lightrains.com&quot; data-og-source-url=&quot;https://lightrains.com/blogs/deploy-react-app-aws-ec2-using-github-actions/&quot; data-og-url=&quot;https://lightrains.com/blogs/deploy-react-app-aws-ec2-using-github-actions/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bvwttr/hyRKVSj4bw/sn3BzAmStuCtt91pKWRy41/img.jpg?width=1200&amp;amp;height=760&amp;amp;face=0_0_1200_760,https://scrap.kakaocdn.net/dn/nevL3/hyRJU1N2gx/BGTcmm1qC5PDbLOM42cdO1/img.jpg?width=1200&amp;amp;height=760&amp;amp;face=0_0_1200_760,https://scrap.kakaocdn.net/dn/wfyar/hyRJH9cJDE/vzMXs9bVH6HrrNPkwREuk0/img.jpg?width=860&amp;amp;height=520&amp;amp;face=0_0_860_520&quot;&gt;&lt;a href=&quot;https://lightrains.com/blogs/deploy-react-app-aws-ec2-using-github-actions/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightrains.com/blogs/deploy-react-app-aws-ec2-using-github-actions/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bvwttr/hyRKVSj4bw/sn3BzAmStuCtt91pKWRy41/img.jpg?width=1200&amp;amp;height=760&amp;amp;face=0_0_1200_760,https://scrap.kakaocdn.net/dn/nevL3/hyRJU1N2gx/BGTcmm1qC5PDbLOM42cdO1/img.jpg?width=1200&amp;amp;height=760&amp;amp;face=0_0_1200_760,https://scrap.kakaocdn.net/dn/wfyar/hyRJH9cJDE/vzMXs9bVH6HrrNPkwREuk0/img.jpg?width=860&amp;amp;height=520&amp;amp;face=0_0_860_520');&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;Deploy React app to AWS EC2 using GitHub Actions - Lightrains&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;This article helps you understand how you can automatically deploy your reactjs application to AWS EC2 from GitHub&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lightrains.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;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;쉽게 말하면, 컴포넌트의 요소들을 필요한 것만 추가해서 사용할 수 있도록하는 컴포넌트이다.&lt;/p&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. contextAPI로 관리하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1677335855683&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	
const FlyOutContext = createContext();
 
function FlyOut(props) {
  const [open, toggle] = useState(false);
 
  const providerValue = { open, toggle };
 
  return (
    &amp;lt;FlyOutContext.Provider value={providerValue}&amp;gt;
      {props.children}
    &amp;lt;/FlyOutContext.Provider&amp;gt;
  );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Object 형태로 export하면서 관리하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1677335444500&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// export
export const Dialog = Object.assign(DialogMain, {
  Dimmed: DialogDimmed,
  Title: DialogTitle,
  Subtitle: DialogSubtitle,
  Description: DialogDescription,
  Comment: DialogComment,
  CheckButton: DialogCheckButton,
  CheckBox: DialogCheckBox,
  TextButton: DialogTextButton,
  Button: DialogButton,
  LabelButton: DialogLabelButton,
  Divider: DialogDivider,
});

// Usage
&amp;lt;Dialog&amp;gt;
    &amp;lt;Dialog.Title&amp;gt;제목&amp;lt;/Dialog.Title&amp;gt;
&amp;lt;/Dialog&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;밑의 두 글은 강추한다.&lt;/p&gt;
&lt;figure id=&quot;og_1677335907468&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;합성 컴포넌트로 재사용성 극대화하기 | 카카오엔터테인먼트 FE 기술블로그&quot; data-og-description=&quot;방경민(Kai) 사용자들에게 보이는 부분을 개발한다는 데서 프론트엔드 개발자의 매력을 듬뿍 느끼고 있습니다.&quot; data-og-host=&quot;fe-developers.kakaoent.com&quot; data-og-source-url=&quot;https://fe-developers.kakaoent.com/2022/220731-composition-component/&quot; data-og-url=&quot;https://fe-developers.kakaoent.com/2022/220731-composition-component/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://fe-developers.kakaoent.com/2022/220731-composition-component/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://fe-developers.kakaoent.com/2022/220731-composition-component/&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;합성 컴포넌트로 재사용성 극대화하기 | 카카오엔터테인먼트 FE 기술블로그&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;방경민(Kai) 사용자들에게 보이는 부분을 개발한다는 데서 프론트엔드 개발자의 매력을 듬뿍 느끼고 있습니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;fe-developers.kakaoent.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1677329153691&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;[리액트 디자인 패턴] Compound Component Pattern (합성 컴포넌트 패턴) 알아보기&quot; data-og-description=&quot;이 글은 Compound Pattern과 관련된 글의 한글 번역입니다. 원문 링크: https://www.patterns.dev/posts/compound-pattern/ Compound Pattern Create multiple components that work together to perform a single task www.patterns.dev Compound Patter&quot; data-og-host=&quot;im-developer.tistory.com&quot; data-og-source-url=&quot;https://im-developer.tistory.com/238&quot; data-og-url=&quot;https://im-developer.tistory.com/238&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/EMQ7L/hyRKNfGmdL/zvKvQvAPxvFmEKEaqR2wW0/img.jpg?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/w5wd6/hyRKPEzKj4/k0tVeDLb85NPe6a88T9nk1/img.jpg?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/b4cSIV/hyRJJspZQt/ksKhUKBZvy6H9K0FKKPKuK/img.jpg?width=1000&amp;amp;height=667&amp;amp;face=0_0_1000_667&quot;&gt;&lt;a href=&quot;https://im-developer.tistory.com/238&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://im-developer.tistory.com/238&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/EMQ7L/hyRKNfGmdL/zvKvQvAPxvFmEKEaqR2wW0/img.jpg?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/w5wd6/hyRKPEzKj4/k0tVeDLb85NPe6a88T9nk1/img.jpg?width=800&amp;amp;height=533&amp;amp;face=0_0_800_533,https://scrap.kakaocdn.net/dn/b4cSIV/hyRJJspZQt/ksKhUKBZvy6H9K0FKKPKuK/img.jpg?width=1000&amp;amp;height=667&amp;amp;face=0_0_1000_667');&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;[리액트 디자인 패턴] Compound Component Pattern (합성 컴포넌트 패턴) 알아보기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 글은 Compound Pattern과 관련된 글의 한글 번역입니다. 원문 링크: https://www.patterns.dev/posts/compound-pattern/ Compound Pattern Create multiple components that work together to perform a single task www.patterns.dev Compound Patter&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;im-developer.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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;사운드를 관리하기 위해서 howler.js를 제일 먼저 고려했다. 크로스 브라우징과 모든 코덱 지원 가능하며, 외부 종속성이나 플러그인도 없이 100% javascript api로 만들어져서 7kb로 굉장히 가볍다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1677329155570&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;howler.js - JavaScript audio library for the modern web&quot; data-og-description=&quot;howler.js makes working with audio in JavaScript easy and reliable across all platforms.&quot; data-og-host=&quot;howlerjs.com&quot; data-og-source-url=&quot;https://howlerjs.com/&quot; data-og-url=&quot;https://howlerjs.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4O8p1/hyRKTmEHtu/ne7ssECS7i0J1M0giOtWL1/img.png?width=560&amp;amp;height=300&amp;amp;face=0_0_560_300,https://scrap.kakaocdn.net/dn/v4ADE/hyRKUlzmOU/UK0HYLtouCxAhdBFfqL7OK/img.png?width=560&amp;amp;height=300&amp;amp;face=0_0_560_300&quot;&gt;&lt;a href=&quot;https://howlerjs.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://howlerjs.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4O8p1/hyRKTmEHtu/ne7ssECS7i0J1M0giOtWL1/img.png?width=560&amp;amp;height=300&amp;amp;face=0_0_560_300,https://scrap.kakaocdn.net/dn/v4ADE/hyRKUlzmOU/UK0HYLtouCxAhdBFfqL7OK/img.png?width=560&amp;amp;height=300&amp;amp;face=0_0_560_300');&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;howler.js - JavaScript audio library for the modern web&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;howler.js makes working with audio in JavaScript easy and reliable across all platforms.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;howlerjs.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;</description>
      <category>개발일기</category>
      <category>fout</category>
      <category>githubactions</category>
      <category>Howler</category>
      <category>합성컴포넌트</category>
      <author>synun</author>
      <guid isPermaLink="true">https://synuns.tistory.com/85</guid>
      <comments>https://synuns.tistory.com/85#entry85comment</comments>
      <pubDate>Thu, 19 Jan 2023 23:49:22 +0900</pubDate>
    </item>
  </channel>
</rss>