<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>twolove-sarang.log</title>
        <link>https://velog.io/</link>
        <description>the best FE (will be..)</description>
        <lastBuildDate>Thu, 07 Sep 2023 02:22:11 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>twolove-sarang.log</title>
            <url>https://velog.velcdn.com/images/twolove-sarang/profile/250b8169-839a-4553-8066-4de17f8c04e6/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. twolove-sarang.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/twolove-sarang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Synchronizing with Effects]]></title>
            <link>https://velog.io/@twolove-sarang/Synchronizing-with-Effects</link>
            <guid>https://velog.io/@twolove-sarang/Synchronizing-with-Effects</guid>
            <pubDate>Thu, 07 Sep 2023 02:22:11 GMT</pubDate>
            <description><![CDATA[<p><a href="https://react.dev/learn/synchronizing-with-effects">Synchronizing with Effects</a></p>
<h4 id="effects">Effects?</h4>
<p>외부의 시스템과 동기화 할 필요가 있을 때가 있다.</p>
<ul>
<li>리액트 컴포넌트 기반이 아닌 리액트 상태를 조종할 때</li>
<li>서버 연결을 설정할 때</li>
<li>컴포넌트가 화면에 나타날 때 통계 로그를 보내야 할 때</li>
</ul>
<p>Effects는 렌더링 후에 동작할 수 있게 해준다. 그래서 리액트 외부의 시스템과 컴포넌트가 동기화 할 수 있게 해준다.</p>
<p><strong>will learn</strong></p>
<ul>
<li>effects가 무엇인가</li>
<li>이벤트와 에펙이 어떻게 다른가</li>
<li>컴포넌트에 에펙을 선언하는 방법</li>
<li>에펙이 필요하지 않을 때 re-running을 피할 수 있는가</li>
<li>개발모드에서 왜 에펙이 두번 동작하는가 그리고 어떻게 고치는가</li>
</ul>
<p><strong>리액트 컴포넌트안의 두가지 타입의 로직</strong></p>
<ol>
<li>Rendering code :</li>
</ol>
<ul>
<li>컴포넌트의 최상위에서 동작하는 것.</li>
<li>props, state를 받고 변형하고 스크린에 JSX로 리턴하는 것.</li>
<li>렌더링 코드는 순수(pure)해야한다. 수학공식처럼 결과값만 계산해야 한다.</li>
</ul>
<ol start="2">
<li>Event handlers : </li>
</ol>
<ul>
<li>계산만 하는게 아닌 컴포넌트안에 함수를 실행하게 하는 것.</li>
<li>input필드를 업데이트 하거나 물건을 사기위해 HTTP POST를 제출해 요청하거나다른 스크린으로 이동시키는 것.</li>
<li>특정한 유저의 동작을 위해 &#39;side effects&#39;를 포함한다.(버튼 클릭이나 타이핑같은)</li>
</ul>
<p>Effects를 사용하면 특정 이벤트가 아닌 렌더링 자체로 인해 발생하는 부작용을 지정할 수 있습니다.</p>
<p>Effects는 스크린 업데이트 후 커밋이 된 가장 마지막에 실행된다. - 리액트 컴포넌트와 외부의 시스템이 동기화하기 좋은 타이밍이다.</p>
<p><strong>Effect이 필요하지 않을 수도 있다.</strong></p>
<ul>
<li>특정 상태만을 조절하기 위한 상태일때는 에펙이 필요하지 않을 수 있다.</li>
</ul>
<p><strong>How to write an Effect</strong></p>
<ol>
<li><strong>Declare an Effect.</strong> 에펙은 모든 렌더 순간마다 동작한다.</li>
<li><strong>Specify the Effect dependencies.</strong> 필요한 순간에만 re-run하기위해 특정 dependencies를 사용한다.</li>
<li><strong>Add cleanup if needed.</strong> 어떤 에펙들은 멈추고 뒤로가고 깨끗이 하는지를 특정지어 주어야 한다.</li>
</ol>
<h4 id="step-1--declare-an-effect">Step 1 : Declare an Effect</h4>
<p>컴포넌트가 렌더될때마다 리액트는 스크린을 업데이트 하고 그 다음 useEffect 내부의 코드를 실행시킵니다. 다시 말해 useEffect는 해당 렌더가 화면에 반영될 때까지 코드 조각이 실행되는 것을 &quot;지연&quot;시킵니다.</p>
<p><strong>useEffect( ( ) =&gt; { } )</strong></p>
<p><em>(JSX가 렌더링 된 후 side effect이 동작 할 수 있도록 useEffect에 기능을 넣어준다.)</em></p>
<h4 id="step-2--specify-the-effect-dependencies">Step 2 : Specify the Effect dependencies</h4>
<p>외부의 시스템과 동기화 하는간 항상 즉각적이지 않다. 그래서 필요하지 않은 부분은 최소한으로 해서 넘기고 싶을 때 dependencies를 사용한다.</p>
<p>예) 키보드를 누를때마다 챗 서버와 새로 연결하는 것
예) 컴포넌트가 나타날 때 처음에만 페이드인이 동작 해야 하는데 키보드를 누를때마다 컴포넌트의 페이드인 애니메이션이 동작하는 것</p>
<ul>
<li>[ ]을 넣어 Effect 동작시 필요 없는 렌더링은 스킵 할 수 있다.</li>
<li>[ ]안에 여러개의 dependencies를 넣을 수 있다.</li>
</ul>
<p>(useEffect( ( )=&gt;{ },<strong>[ ]</strong> )</p>
<blockquote>
<p>useEffect(() =&gt; {
  // This runs after every render
});</p>
</blockquote>
<blockquote>
<p>useEffect(() =&gt; {
  // This runs only on mount (when the component appears)
}, []);</p>
</blockquote>
<blockquote>
<p>useEffect(() =&gt; {
  // This runs on mount <em>and also</em> if either a or b have changed since the last render
}, [a, b]);</p>
</blockquote>
<h4 id="step-3--add-cleanup-if-needed">Step 3 : Add cleanup if needed</h4>
<ul>
<li>컴포넌트가 유저에게 보일 때만 동작하게 하기</li>
<li>콘솔에 두번 log가 찍히는 이유는 컴포넌트가 unmount되어도 연결이 해제되지 않았기 때문이다. =&gt; clean up 작업이 필요!<pre><code>useEffect(() =&gt; {
  const connection = createConnection();
  connection.connect();
  return () =&gt; {
    connection.disconnect();
  };
}, []);</code></pre></li>
</ul>
<p>console...
<strong>dev 에서는 세번 보인다</strong>
&quot;✅ Connecting...&quot;
&quot;❌ Disconnected.&quot;
&quot;✅ Connecting...&quot;</p>
<p>*<em>product에서는 한번만 보인다. *</em>
&quot;✅ Connecting...&quot; 
(strict 모드를 끄면 dev처럼 보이긴 하는데 추천하진 않는다.)</p>
<h4 id="how-to-handle-the-effect-firing-twice-in-development">How to handle the Effect firing twice in development?</h4>
<ol>
<li>Controlling non-React widgets : no needed clean up.</li>
<li>Subscribing to events : return unSubscribing.</li>
<li>Triggering animations : reset to the initial values.</li>
<li>Fetching data : If your Effect fetches something, the cleanup function should either abort the fetch or ignore its result.</li>
<li>Sending analytics : 어짜피 유저는 볼 수 없기 때문에 기존의 코드를 유지 할 것.</li>
</ol>
<p>총 결론</p>
<ol>
<li>useEffect가 필요한 부분을 잘 파악해서 사용 할 것.</li>
<li>useEffect는 JSX가 렌더링 다음 사이드 이펙이 가능하게 해 줌.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[헷갈리는 useRef,forwardRef 공식문서 파헤치기 / React]]></title>
            <link>https://velog.io/@twolove-sarang/%ED%97%B7%EA%B0%88%EB%A6%AC%EB%8A%94-useRefforwardRef-%EA%B3%B5%EC%8B%9D%EB%AC%B8%EC%84%9C-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-React</link>
            <guid>https://velog.io/@twolove-sarang/%ED%97%B7%EA%B0%88%EB%A6%AC%EB%8A%94-useRefforwardRef-%EA%B3%B5%EC%8B%9D%EB%AC%B8%EC%84%9C-%ED%8C%8C%ED%97%A4%EC%B9%98%EA%B8%B0-React</guid>
            <pubDate>Thu, 31 Aug 2023 01:00:37 GMT</pubDate>
            <description><![CDATA[<p><a href="https://react.dev/learn/manipulating-the-dom-with-refs#accessing-another-components-dom-nodes">Manipulating the DOM with Refs - ref로 dom 잘 다루기 공식문서</a>
<a href="https://react.dev/reference/react/useRef">REACT - useRef 공식문서 바로가기</a></p>
<ol>
<li>리액트는 자동적으로 DOM을 비교해 렌더링하므로 자주 DOM에 접근해서 조작할 필요가 없다. </li>
<li>하지만 node에 포커스, 스크롤, 사이즈를 재거나 위치를 잴 때 돔에 접근이 필요한데 이 기능이 리액트에 내장되어 있지 않아 DOM노드에 접근하기 위해선 ref가 필요하다.</li>
</ol>
<h4 id="will-learn">WILL LEARN</h4>
<ul>
<li>DOM노드에 어떻게 접근해서 관리할지</li>
<li>ref가 어떻게 useRef와 연관되어 있는지</li>
<li>다른 컴포넌트의 DOM노드에 어떻게 접근할 수 있는지</li>
<li>리액트에의해 DOM이 안전하게 수정되는 경우들이 있는지</li>
</ul>
<h4 id="getting-a-ref-to-the-node">Getting a ref to the node</h4>
<ol>
<li>ref를 연결한다.<pre><code>import {useRef} from &#39;react&#39;
</code></pre></li>
</ol>
<p>const example = () =&gt; {
const myRef = useREF(null)
return(</p>
<div ref={myRef}></div>
)
}
```
2. useRef훅은 current라는 하나의 prop을 return한다. (최초의 ref.current는 null이다.)
3. 리액트가 DOM노드를 만들 때 이 ref.current에 레퍼런스를 생성할 것이다. 그러면 이 DOM노드에서는 이벤트 핸들러나 내장된 브라우저 api에 접근 할 수 있다.
4. 대부분의 보통의 ref조작 방법은 다른 것들을 리액트 밖에 저장해 놓을 수 있는 것이다.

<h4 id="accessing-another-components-dom-nodes">Accessing another component&#39;s DOM nodes</h4>
<p><em>중요! component에 ref로 접근하기</em></p>
<blockquote>
<p>By default React does not let a component access the DOM nodes of other components. Not even for its own children! </p>
</blockquote>
<p>수동으로 다른 컴포넌트에 조작하는것은 위험하다!
하나 이상의 children을 참조하기 위해선 그래서 forward를 사용해야 한다.</p>
<pre><code>const MyInput = forwardRef((props, ref) =&gt; {
  return &lt;input {...props} ref={ref} /&gt;;
});</code></pre><p><strong>결국 useRef는 DOM노드를 조작하기 위한 것이고
컴포넌트에 접근할 때는 forwardRef를 사용해 ref를 넘겨주어야 한다.</strong></p>
<p>-끗-</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[github에 머지까지 한 내용이 잘못 되었나요? 마법의 주문 알려드립니다.]]></title>
            <link>https://velog.io/@twolove-sarang/github%EC%97%90-%EB%A8%B8%EC%A7%80%EA%B9%8C%EC%A7%80-%ED%95%9C-%EB%82%B4%EC%9A%A9%EC%9D%B4-%EC%9E%98%EB%AA%BB-%EB%90%98%EC%97%88%EB%82%98%EC%9A%94-%EB%A7%88%EB%B2%95%EC%9D%98-%EC%A3%BC%EB%AC%B8-%EC%95%8C%EB%A0%A4%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4</link>
            <guid>https://velog.io/@twolove-sarang/github%EC%97%90-%EB%A8%B8%EC%A7%80%EA%B9%8C%EC%A7%80-%ED%95%9C-%EB%82%B4%EC%9A%A9%EC%9D%B4-%EC%9E%98%EB%AA%BB-%EB%90%98%EC%97%88%EB%82%98%EC%9A%94-%EB%A7%88%EB%B2%95%EC%9D%98-%EC%A3%BC%EB%AC%B8-%EC%95%8C%EB%A0%A4%EB%93%9C%EB%A6%BD%EB%8B%88%EB%8B%A4</guid>
            <pubDate>Sat, 26 Aug 2023 11:59:09 GMT</pubDate>
            <description><![CDATA[<h4 id="주의-위험하니까-개인-프로젝트에서만-사요하세요">주의!!! 위험하니까 개인 프로젝트에서만 사요하세요!!</h4>
<p>깃 허브에 머지까지 마친 코드가 잘못 됐을때 로컬(컴퓨터)에 있는 내용을 원격(깃허브)에 덮어씌우고 싶을 때 쓰는 <strong>마법의 주문</strong> 입니다.</p>
<pre><code>git push origin main -f</code></pre><p>이 주문을 쓰기 전 반드시..!
반드시!!!!!(두번 강조했습니다)</p>
<p>로컬(컴퓨터)에 있는 코드가 잘 동작하는지 5번 이상 확인, 혹은 그 이상 확인하고 덮어쓰세요!</p>
<p>저는 xcode에서 변경된 내용을 그대로 push한 뒤 merge 했는데 이부분에서 엄청난 오류가 생겨 프로젝트를 뒤집어 엎을 지경이었으나 로컬의 마지막 commit에서 구사일생으로 코드를 구할 수 있었습니다.
(이전에 깃 클론을 몇번이나 했는지 모르겠읍니다 흐규흑)</p>
<p>그래서 쓴 마법의 주문이오니</p>
<p>f가 달린 주문은 절대 절대 절대
주의해서 사용하세요</p>
<p>이 글을 보신다면 꼭..!! f를 조심하십쇼</p>
<p><strong>p.s. f를 조심해요...!!!(3번 말함)</strong></p>
<p>이상 한달이상 만들고 배포까지 한 프로젝트 날릴뻔한 개발자 올림</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[xcode가 날 힘들게해 🥲 / 어플 이름 변경, 무한로딩 해결]]></title>
            <link>https://velog.io/@twolove-sarang/xcode%EA%B0%80-%EB%82%A0-%ED%9E%98%EB%93%A4%EA%B2%8C%ED%95%B4-%EC%96%B4%ED%94%8C-%EC%9D%B4%EB%A6%84-%EB%B3%80%EA%B2%BD-%EB%AC%B4%ED%95%9C%EB%A1%9C%EB%94%A9-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@twolove-sarang/xcode%EA%B0%80-%EB%82%A0-%ED%9E%98%EB%93%A4%EA%B2%8C%ED%95%B4-%EC%96%B4%ED%94%8C-%EC%9D%B4%EB%A6%84-%EB%B3%80%EA%B2%BD-%EB%AC%B4%ED%95%9C%EB%A1%9C%EB%94%A9-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Tue, 22 Aug 2023 04:39:59 GMT</pubDate>
            <description><![CDATA[<p><strong>1. xcode 어플 이름변경</strong>
<a href="https://blog.dglee.co.kr/35">info - bundle display name 변경</a></p>
<p><strong>2. xcode 무한 로딩해결</strong>
pod install 하거나 새로 열 때 무한 로딩에 갇혔다면
icloud에서 실행되고 있진 않은지 체크하길 바란다.
icloud연동 해제하고 맥자체에서 여니 꽤 빨라졌다.
이것도 모르고 4시간씩 기다렸다..ㅠㅠ</p>
<p><strong>3. build service could not create build operation unknown error while handling message</strong>
xcode를 완전히 껐다가 켜보길 바란다.</p>
<p><strong>4. [!] Could not automatically select an Xcode project. Specify one in your Podfile like so:</strong></p>
<pre><code>project &#39;path/to/Project.xcodeproj&#39;</code></pre><p>프로젝트 ios폴더에 xcworkspace가 두개인지 확인해보고 필요 없는 파일은 지우면 된다.</p>
<p><strong>5. build fail</strong>
build service could not create build operation unknown error while handling message</p>
<p>xcode 열자마자 indexing되기전에 build를 하면 이런 에러가 나온다. 간단하게 xcode를 껐다 다시 켜보자.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[sign in with apple 구현]]></title>
            <link>https://velog.io/@twolove-sarang/sign-in-with-apple-%EA%B5%AC%ED%98%84</link>
            <guid>https://velog.io/@twolove-sarang/sign-in-with-apple-%EA%B5%AC%ED%98%84</guid>
            <pubDate>Mon, 14 Aug 2023 03:14:47 GMT</pubDate>
            <description><![CDATA[<p><a href="https://twih1203.medium.com/%EC%95%A0%ED%94%8C-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-sign-in-with-apple-1-5db7606867">01. 공식 사이트 keys 설정</a>
<a href="https://velog.io/@jinsunee/react-native-firebase-auth%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-apple-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0">02. react native, firebase 설정</a></p>
<h3 id="q-위에-글대로-다-했는데도-로그인이-안된다면">Q. 위에 글대로 다 했는데도 로그인이 안된다면?</h3>
<p>A1. <strong>bundleID 설정</strong>이 xcode랑 firebase랑 일치하는지 확인할 것!
A2.xcode에 GoogleService-Info.plist넣을 때 xcode안에 프로젝트 폴더 우클릭-Add files to &quot;projectName&quot;으로 넣으면 간단히 해결된다
<strong>(드래그 앤 드롭 하지 말고!)</strong></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[github remote error]]></title>
            <link>https://velog.io/@twolove-sarang/github-remote-error</link>
            <guid>https://velog.io/@twolove-sarang/github-remote-error</guid>
            <pubDate>Tue, 08 Aug 2023 01:23:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>  error: &lt; remote address &gt; did not send all necessary objects</p>
</blockquote>
<p>  무슨짓을 해도 문제가 해결 안되어 강제로 깃허브 연결 삭제하고 다시 repository를 만들었다.</p>
<p>  <strong>경고 : 잘못하면 지금까지 만든 코드 다 날라가니까 조심히 사용할 것!</strong></p>
<pre><code>1) 깃허브 연결 해제 및 삭제
rm -r -f .git
2) vscode source control에서 public으로 publish</code></pre><p>  대충 간단한 방법이지만 코드 다 날릴수 있으므로 깃허브에대한 이해도가 어느정도 있다면 사용할 것! (두번 경고했음!!)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[react native with firebase]]></title>
            <link>https://velog.io/@twolove-sarang/react-native-with-firebase</link>
            <guid>https://velog.io/@twolove-sarang/react-native-with-firebase</guid>
            <pubDate>Sat, 29 Jul 2023 08:41:24 GMT</pubDate>
            <description><![CDATA[<p>#React Native Firebase 공식문서
<a href="https://rnfirebase.io/">공식문서 바로가기</a></p>
<hr>
<p>#firebase setup_1
<a href="https://devbksheen.tistory.com/entry/React-Native-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-Firebase-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0">how to set up the firebase in react-native with x code</a></p>
<hr>
<p>#firebase setup_2
<a href="https://velog.io/@ddowoo/react-native-firebase-%EC%97%B0%EB%8F%99">react native with firebase</a></p>
<hr>
<p>#issue 1 =&gt; google-info.list xcode에 올바르게 적용시키는 방법
<a href="https://stackoverflow.com/questions/45317777/could-not-find-a-valid-googleservice-info-plist-in-your-project">add google-info.list in xcode</a></p>
<hr>
<p>#issue 2 =&gt; 각종 이슈 잘 정리해 주심
<a href="https://velog.io/@qkr135qkr/firebase%EB%A5%BC-iOS%EC%97%90-%EC%A0%81%EC%9A%A9%ED%95%98%EB%A9%B4%EC%84%9C-%EB%A7%9E%EB%8B%A6%EB%93%A4%EC%9D%B8-%EB%AC%B8%EC%A0%9C%EB%93%A4">issue from firebase setup</a></p>
<hr>
<p>#issue 3 =&gt; pod 라이브러리 오류</p>
<blockquote>
<p>[!] The following Swift pods cannot yet be integrated as static libraries:The Swift pod <code>FirebaseStorage</code> depends upon <code>FirebaseAppCheckInterop</code>, <code>FirebaseAuthInterop</code>, <code>FirebaseCore</code>, <code>FirebaseCoreExtension</code>, and <code>GTMSessionFetcher</code>, which do not define modules. To opt into those targets generating module maps (which is necessary to import them from Swift when building as static libraries), you may set <code>use_modular_headers!</code> globally in your Podfile, or specify <code>:modular_headers =&gt; true</code> for particular dependencies.</p>
</blockquote>
<p><a href="https://storing.tistory.com/14">set up pod file</a></p>
<p>위에 나열된 라이브러리들을 pod.file에 추가해 주어야 한다.</p>
<pre><code>pod &#39;GoogleUtilities&#39;, :modular_headers =&gt; true
pod &#39;Firebase&#39;, :modular_headers =&gt; true
pod &#39;FirebaseCoreInternal&#39;, :modular_headers =&gt; true
pod &#39;FirebaseAppCheckInterop&#39;, :modular_headers =&gt; true
pod &#39;FirebaseAuthInterop&#39;, :modular_headers =&gt; true
pod &#39;FirebaseCore&#39;, :modular_headers =&gt; true
pod &#39;FirebaseCoreExtension&#39;, :modular_headers =&gt; true
pod &#39;GTMSessionFetcher&#39;, :modular_headers =&gt; true</code></pre><p>이런식으로!</p>
<hr>
<p>제일 중요한거..! podfile 내용변경하고 나서 꼭 <strong>pod update &amp;&amp; pod install</strong> 할것!!! 
( 대충 이거 안해서 이틀 버림 )</p>
<p><a href="https://onelife2live.tistory.com/30">pod intall, pod update 잘 정리된 글</a></p>
<hr>
<p>#google login 1 =&gt; 공식 문서
<a href="https://github.com/react-native-google-signin/google-signin#project-setup-and-initialization">github react-native-google-signin/google-signin</a></p>
<hr>
<p>#google login 2 =&gt; 구글 로그인 코드
<a href="https://juzero-space.tistory.com/288">google log-in </a></p>
<pre><code>  const userInfo = auth().currentUser;
  console.log(userInfo?.displayName, userInfo?.email);</code></pre><p><strong>auth().currentUser</strong>를 통해 User의 정보를 알 수있다.</p>
<hr>
<p>#googld login 3 =&gt; ios에서 구글 로그인 안될 때</p>
<blockquote>
<p>Thread 1: &quot;Your app is missing support for the following URL schemes</p>
</blockquote>
<p><a href="https://chc3484.tistory.com/34">google sign in crash</a></p>
<hr>
<p>#firebase Cloud Storage &amp;&amp; Realtime Database</p>
<pre><code>npm install @react-native-firebase/database
npm install @react-native-firebase/storage</code></pre><hr>
<p>#react native image upload with firebase
<a href="https://devbksheen.tistory.com/entry/React-Native-%EC%9D%B4%EB%AF%B8%EC%A7%80-Firebase-Storage%EC%97%90-%EC%97%85%EB%A1%9C%EB%93%9C%ED%95%98%EA%B8%B0">react-native-image-picker 잘 정리된 글</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[import 자동 정리]]></title>
            <link>https://velog.io/@twolove-sarang/import-%EC%9E%90%EB%8F%99-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@twolove-sarang/import-%EC%9E%90%EB%8F%99-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 19 Jul 2023 05:57:38 GMT</pubDate>
            <description><![CDATA[<ol>
<li>설정으로 이동한다. (단축키 command⌘ + , )</li>
<li>동그라미친 곳을 누른다.
<img src="https://velog.velcdn.com/images/twolove-sarang/post/bbe839c1-b481-4fcf-be3a-2b68690fb115/image.png" alt=""></li>
<li>setting.json에서 아래 코드를 추가한다.<pre><code>&quot;editor.codeActionsOnSave&quot;: {
 &quot;source.organizeImports&quot;: true
}</code></pre></li>
</ol>
<p>저장하면 끝!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[If your query function depends on a variable, include it in your query key]]></title>
            <link>https://velog.io/@twolove-sarang/If-your-query-function-depends-on-a-variable-include-it-in-your-query-key</link>
            <guid>https://velog.io/@twolove-sarang/If-your-query-function-depends-on-a-variable-include-it-in-your-query-key</guid>
            <pubDate>Mon, 20 Feb 2023 01:35:06 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이슈 : 
Tanstack 쿼리를 사용하는데 페이지를 새로고침하거나 뒤로가기했다 돌아오면 데이터가 불러와지지 않았다.</p>
</blockquote>
<pre><code>  const getMate = useQuery(
    {
      queryKey: [&quot;mate&quot;],
      queryFn: () =&gt; getMateEditForm(uid),
    },
    { staleTime: 1000 * 6 * 10 }
  );</code></pre><p>처음 코드를 보면 mate쿼리키를 이용해 등록된 firebase함수를 불러와줄 때 uid를 넘겨만 주고 쿼리 키로 설정해 주지 않았다.</p>
<hr>
<p><strong>해결</strong></p>
<p><a href="https://tanstack.com/query/v4/docs/react/guides/query-keys#if-your-query-function-depends-on-a-variable-include-it-in-your-query-key">✅ Query Keys</a>
<img src="https://velog.velcdn.com/images/twolove-sarang/post/7e9289d4-dda8-4b8e-a05a-0489393c58f8/image.png" alt="">
Fetching된 쿼리키들이 동일하지않게 나타난다면
다른 범위의  당신이 사용하고 있는 &#39;변화되는&#39;다른 키들을 포함해야 합니다.</p>
<pre><code>  const getMate = useQuery(
    {
      queryKey: [&quot;mate&quot;, uid],
      queryFn: () =&gt; getMateEditForm(uid),
    },
    { staleTime: 1000 * 6 * 10 }
  );</code></pre><p>쿼리키에 uid(변화되는 내가 사용하는 키)를 넣어주니 다시 동작한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Failed to load resource: net::ERR_NAME_NOT_RESOLVED]]></title>
            <link>https://velog.io/@twolove-sarang/Failed-to-load-resource-netERRNAMENOTRESOLVED</link>
            <guid>https://velog.io/@twolove-sarang/Failed-to-load-resource-netERRNAMENOTRESOLVED</guid>
            <pubDate>Fri, 17 Feb 2023 05:29:59 GMT</pubDate>
            <description><![CDATA[<p>쇼핑몰 사이트 배포하는데 자꾸 이런 에러가 떴다.
콘솔에서는
<strong>[Violation] Avoid using document.write(). <URL></strong></p>
<p>  <img src="https://velog.velcdn.com/images/twolove-sarang/post/8d59b539-36bb-48d3-93db-fbb92dbf1527/image.png" alt=""></p>
<p>  그리고 Elements에서는
**  You need to enable JavaScript to run this app.**</p>
<p>  <img src="https://velog.velcdn.com/images/twolove-sarang/post/5cb3a65e-fd51-4001-97cb-f8a6256c1feb/image.png" alt=""></p>
<p>  구글링을 해 본 결과 자바스크립트를 허용하면 된다고 한다.
<a href="https://support.google.com/adsense/answer/12654?hl=en">✅ Activate JavaScript in your browser</a></p>
<p>  그런데 이미 활성화로 설정이 되어 있었다 😱
  <img src="https://velog.velcdn.com/images/twolove-sarang/post/6be7dbd2-08d0-48d8-837d-098f9d5eadd8/image.png" alt=""></p>
<p>  무엇이 문제일까??
지난번 experiment프로젝트도 netlify로 배포했을때 같은 이슈가 있었는데
  이번에 확실히 해결해야겠다.</p>
<p>  콘솔에서 하나 더 확인할 수 있는 오류로
**  GET net::ERR_NAME_NOT_RESOLVED** 이게 뜨던데</p>
<p><a href="https://www.hostinger.com/tutorials/err_name_not_resolved">✅ ERR_NAME_NOT_RESOLVED: 6 Proven Methods to Fix It</a>
  이 사이트를 참고해 보기로 했다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[20230217 오늘의 일정]]></title>
            <link>https://velog.io/@twolove-sarang/20230217-%EC%98%A4%EB%8A%98%EC%9D%98-%EC%9D%BC%EC%A0%95</link>
            <guid>https://velog.io/@twolove-sarang/20230217-%EC%98%A4%EB%8A%98%EC%9D%98-%EC%9D%BC%EC%A0%95</guid>
            <pubDate>Fri, 17 Feb 2023 00:11:31 GMT</pubDate>
            <description><![CDATA[<ol>
<li>쇼핑몰 제작 마무리하기 ✅ 11:37</li>
<li>experiment 레이아웃 재구성하기</li>
<li>노션 정리하기 ✅ 2/18 9:50</li>
</ol>
<ul>
<li>기술스택</li>
<li>개발자로서의 생각 / 포부</li>
<li>매일 할일 목록 만들기</li>
</ul>
<ol start="4">
<li>node.js 강의 듣기</li>
<li>영어 말하기 연습 1시간</li>
</ol>
<hr>
<p>후후 오늘은 좀 깨운한데..?
함 마 팍팍 달려보자~</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[쇼핑몰 프로젝트 03 withwith 마무리 하기]]></title>
            <link>https://velog.io/@twolove-sarang/%EC%87%BC%ED%95%91%EB%AA%B0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-03-withwith-%EB%A7%88%EB%AC%B4%EB%A6%AC-%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@twolove-sarang/%EC%87%BC%ED%95%91%EB%AA%B0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-03-withwith-%EB%A7%88%EB%AC%B4%EB%A6%AC-%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 17 Feb 2023 00:07:08 GMT</pubDate>
            <description><![CDATA[<p><strong>목표</strong>
아직 미완성이던 withwitth를 오늘 안에 완성한다.</p>
<ol>
<li>썸네일 크기 맞추기 ✅</li>
<li>mutation, invalidate로 실시간 업데이트 ✅</li>
<li>배너 삽입 ✅</li>
<li>experiment에 추가하기</li>
<li>netlify 업로드 ✅</li>
<li>git read.me 작성하기 ✅</li>
</ol>
<p><strong>DeadLine</strong></p>
<ul>
<li>2/17 오후 1시 30분까지</li>
</ul>
<p><strong>진행사항</strong></p>
<ol>
<li>썸네일 크기 맞추면서 배너도 넣고 전체 크기도 조정했다.</li>
<li>mutation, invalidateQuery로 실시간 업데이트 완성.</li>
<li>netlify, github-read.me 완성</li>
</ol>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/dd37cda9-4afc-4b04-a932-ef67cafc4bba/image.gif" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[html <a>태그 숨은 기능]]></title>
            <link>https://velog.io/@twolove-sarang/html-a%ED%83%9C%EA%B7%B8-%EC%88%A8%EC%9D%80-%EA%B8%B0%EB%8A%A5</link>
            <guid>https://velog.io/@twolove-sarang/html-a%ED%83%9C%EA%B7%B8-%EC%88%A8%EC%9D%80-%EA%B8%B0%EB%8A%A5</guid>
            <pubDate>Thu, 16 Feb 2023 12:27:14 GMT</pubDate>
            <description><![CDATA[<p><a href="https://developer.mozilla.org/ko/docs/Web/HTML/Element/a">✅ a태그 기능 MDN에서 알아보기</a>
<a href="https://developer.mozilla.org/en-US/docs/Web/Security/Referer_header:_privacy_and_security_concerns">✅ Referer header: privacy and security concerns</a></p>
<p>단순히 하이퍼링크만 되는줄 알았는데
doc에 와보니 더 많은 기능들이 있었다.
html을 자세하게 공부해야 하는 이유.</p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/2873da59-a1cb-496d-9755-294c9213b8af/image.png" alt=""></p>
<p><a href="https://3rabbitz.com/blog_ko/08d34c69855fbcad">도움 감사 🤟</a></p>
<ul>
<li>rel=&#39;noopener&#39;를 같이 사용해줘야 한다.</li>
<li>rel는 relationahip의 약자</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[랜덤 색 추출로 css 컬러가이드 만들기 07]]></title>
            <link>https://velog.io/@twolove-sarang/%EB%9E%9C%EB%8D%A4-%EC%83%89-%EC%B6%94%EC%B6%9C%EB%A1%9C-css-%EC%BB%AC%EB%9F%AC%EA%B0%80%EC%9D%B4%EB%93%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-07</link>
            <guid>https://velog.io/@twolove-sarang/%EB%9E%9C%EB%8D%A4-%EC%83%89-%EC%B6%94%EC%B6%9C%EB%A1%9C-css-%EC%BB%AC%EB%9F%AC%EA%B0%80%EC%9D%B4%EB%93%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0-07</guid>
            <pubDate>Thu, 16 Feb 2023 12:03:38 GMT</pubDate>
            <description><![CDATA[<p>정확하게 두달 만에 다시 꺼내본 프로젝트
이 프로젝트를 끝내기위해 다음과 같은 프로세스를 진행할 예정</p>
<ol>
<li>Major 프로세스</li>
</ol>
<ul>
<li>그동안 다시배운 JS,리액트 기술로 깔끔하게 리팩토링 한다. ✅</li>
<li>불변성의 법칙 꼭 지키기 ✅</li>
<li>history click하면 정보 보여주기 ✅</li>
</ul>
<ol start="2">
<li>experiment에 gif/site형식으로 업로드 하기 ✅</li>
<li>github read.me 꼼꼼하게 작성하기 ✅</li>
</ol>
<p><strong>Dead Line</strong></p>
<ul>
<li>2/16 오후 10시까지</li>
</ul>
<p><strong>Finish Time</strong></p>
<p>2/16 오후 10:22</p>
<ol>
<li>Major 프로세스 완료 :</li>
</ol>
<ul>
<li>전체적으로 정리가 안된 함수들을 따로 구분해줌</li>
<li>useState의 개념이 안잡혔을 때 만들었던 프로젝트여서 정리하는데 약간의 시간 소요됨</li>
<li>히스토리 기능 구현 완료
(히스토리 섹션에 있는 컬러를 누르면 전체적으로 다시 히스토리 확인 가능)</li>
</ul>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/f6fba39c-b437-4152-a464-f810794eba05/image.gif" alt=""></p>
<ol start="2">
<li>github read.me 완료</li>
<li>experiment 완료</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[230216 포트폴리오 귀신]]></title>
            <link>https://velog.io/@twolove-sarang/20230216-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EA%B7%80%EC%8B%A0</link>
            <guid>https://velog.io/@twolove-sarang/20230216-%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EA%B7%80%EC%8B%A0</guid>
            <pubDate>Thu, 16 Feb 2023 07:56:56 GMT</pubDate>
            <description><![CDATA[<p>하나를 다 끝내기도 전에 다른 하나를 시작하는 나
(미완성)포트폴리오 무한생성중이다.</p>
<h4 id="진행중인-포트폴리오-목록">진행중인 포트폴리오 목록</h4>
<ul>
<li>experiment : side프로젝트 모아놓기</li>
<li>css guide : experiment포폴안에 gif/링크 삽입 ✅</li>
<li>withwith shoppingmall : experiment 포폴안에 gif/링크 삽입 ✅</li>
<li>콩비찌 : 메인 서비스 제작</li>
</ul>
<h4 id="진행-예정">진행 예정</h4>
<ol>
<li>css guide, withwith의 로직을 모두 정리, 끝내기..!
(dead line 2/17 fri) ✅</li>
<li>experiment에 삽입하기 (dead line 2/18 fri) </li>
<li>콩비찌 마무리하기(dead line 2/22 wed)</li>
</ol>
<p>제발 하나라도 잘 마무리하기!
<strong>맘에 들지 않더라도 마무리하는게 중요하다.</strong></p>
<hr>
<p><strong>사담</strong></p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/dcd7013a-1e8a-4306-9ba1-1bca73b79d16/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/6924eaf2-a458-444c-80c3-f75b31613676/image.png" alt=""></p>
<p>네 뒷동산 갔다가 발목인대가 파열되어 전치 2주진단을 받았습니다^^
(첫 반 깁스)
하루라도 조용할날 없네요
(집에서 조용히 개발공부 하라는 계시)</p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/eb6d742e-83b5-4e4e-974f-6186dd312336/image.png" alt="">
히히 더글로리 재밌따(과자냠냠)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[포트폴리오 시리즈 04 - 내새끼 자랑 웹페이지 제작]]></title>
            <link>https://velog.io/@twolove-sarang/%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EC%8B%9C%EB%A6%AC%EC%A6%88-04-%EB%82%B4%EC%83%88%EB%81%BC-%EC%9E%90%EB%9E%91-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%A0%9C%EC%9E%91</link>
            <guid>https://velog.io/@twolove-sarang/%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EC%8B%9C%EB%A6%AC%EC%A6%88-04-%EB%82%B4%EC%83%88%EB%81%BC-%EC%9E%90%EB%9E%91-%EC%9B%B9%ED%8E%98%EC%9D%B4%EC%A7%80-%EC%A0%9C%EC%9E%91</guid>
            <pubDate>Thu, 16 Feb 2023 07:45:45 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>그렇습니다.
포트폴리오를 두개 제작중입니다.
번뜩이는 아이디어와 실행력
(하지만 오래가지 못하는 지속력)
ENFP의 고유한 특징이죠.</p>
</blockquote>
<p><strong>하지만 이번엔 각잡고 앉아 제대로 만들어 보려고 합니다.</strong></p>
<p>현재 진행중인 두번째 프로젝트는
반려동물을 자랑하고싶지만
마땅히 자랑할 곳 없는 주인(집사)들을 위한
<em>내새끼 자랑 커뮤니티</em>
<strong>콩.비.찌</strong> 를 제작중입니다 🐶
(콩이,루비,햄찌)</p>
<p>어느정도 틀을 만들고 중간 리팩토링을 진행하고 있는데
코드가 아까울정도로 겹치는 부분이 있어
수정 과정을 적어보려고 합니다.</p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/4002dc39-f109-4d0b-a174-bc6bdbc9274f/image.png" alt="">
무서울정도로 겹치는 두 파일의 커스텀 훅스..!
<strong>이번 리팩토링 목표는 재사용성을 높이는 것입니다.</strong></p>
<p>사실 두 커스텀 훅스에서 다른 점은 QueryKey로 사용하고 있는 mate/user의 차이입니다.</p>
<p>왜이렇게 겹치는지를 되짚어보니 실행하려고 하는 기능이 똑같다는 것입니다.
<img src="https://velog.velcdn.com/images/twolove-sarang/post/203283b5-e07b-4992-a55f-a82b21892912/image.png" alt="">
<img src="https://velog.velcdn.com/images/twolove-sarang/post/88e390a5-904e-4edb-a56a-e33049c50ecf/image.png" alt="">
파이어베이스의 데이터베이스에 사용자 정보 업로드 =&gt; 가져오기 =&gt; mutation의 invalidate를 사용해 데이터 실시간 동기화</p>
<p>그리고 계속 만들다보니 여러모로 많이 사용 할 것 같아 미리 리팩토링해서 재사용성을 높이기로 결정했습니다.</p>
<pre><code>코드를 한줄이라도 압축하는것이 목표
</code></pre><h2 id="firebase-set">Firebase set</h2>
<p>먼저 파이어베이스의 set부분을 살펴보면
<strong>받아오는 정보를 저장하는 카테고리 부분</strong>만 개선하면 된다.
<img src="https://velog.velcdn.com/images/twolove-sarang/post/4754baa2-a714-4c78-91a8-de247ae18dbd/image.png" alt="">
<img src="https://velog.velcdn.com/images/twolove-sarang/post/ed01b7e9-1d4b-4509-aa67-08f82f00a1e2/image.png" alt="">
useState를 통해 설정한 info를 각각 넘겨주었다.</p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/734c1663-8e73-4813-9c1a-eaf1417602ca/image.png" alt=""></p>
<p>넘어오는 info의 정보를 배열화 시켜
includes로 검사해 set부분을 조건문으로 검사하도록
정말 간단히 리팩토링 해주었다.</p>
<p>앞으로 추가되는 set부분을 계속 이어나가주면 될 것 같다.</p>
<h2 id="firebase-get">Firebase get</h2>
<p>다음 부분은 정보를 get해오는 부분인데
(생각보다 쉽지 않다.)</p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/478cd487-424f-4224-ba26-b3919589361a/image.png" alt="">
단순히 &#39;mypage / user&#39; or &#39;mypage / mate&#39;의 차이인데
어떻게 하면 필요한 getEditForm()함수를 불러올 수 있을까?</p>
<p>getEditForm부르는 조건 =&gt; useQuery의 queryFn으로!</p>
<p>조금 더 생각해보기로 하고
다른 구현사항들을 진행해 보기로 한다.</p>
<hr>
<p><strong>여담</strong>
사실 리팩토링은 코드 다 짠 다음 하려고했는데
스파게티 코드가 보기좋지 않아 일찍 진행했다.
덕분에 더 빠르게 프로젝트 마무리 할 수 있을 것 같다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Uncaught TypeError: Cannot convert undefined or null to object]]></title>
            <link>https://velog.io/@twolove-sarang/Uncaught-TypeError-Cannot-convert-undefined-or-null-to-object</link>
            <guid>https://velog.io/@twolove-sarang/Uncaught-TypeError-Cannot-convert-undefined-or-null-to-object</guid>
            <pubDate>Tue, 07 Feb 2023 09:07:58 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>이슈
Uncaught TypeError: Cannot convert undefined or null to object</p>
</blockquote>
<p><a href="https://velog.io/@yjs3819/cannot-convert-undefined-or-null-to-object-%EC%97%90%EB%9F%AC">✅ 감사합니다ㅠㅠ</a></p>
<p>이슈</p>
<ul>
<li>유즈쿼리로 데이터를 불러온 컴포넌트에서 새로고침을 하면 화면이 죽어버림</li>
</ul>
<p>해결</p>
<ul>
<li>유즈 쿼리로 불러온 데이터는 객체이거나 null인 상태이다. 그래서 각각의 상태를 핸들링해 주어야 한다.</li>
</ul>
<pre><code>  const contactValues = () =&gt; {
    if (contact == null) {
      return {};
    } else {
      return Object.values(contact);
    }
  };</code></pre><ul>
<li>유즈쿼리로 불러온 데이터 = contact</li>
<li>contact가 null인 경우 {} 빈 객체를 리턴해주고 아닌 경우 내용을 배열로 리턴해 주었다.</li>
</ul>
<hr>
<p><strong>여담</strong></p>
<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/0530db69-72da-4283-a202-9960ed8de9c8/image.gif" alt=""></p>
<p>이제 업로드 하고 배포하자!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[netlify 배포 Document.write()]]></title>
            <link>https://velog.io/@twolove-sarang/netlify-%EB%B0%B0%ED%8F%AC-Document.write</link>
            <guid>https://velog.io/@twolove-sarang/netlify-%EB%B0%B0%ED%8F%AC-Document.write</guid>
            <pubDate>Tue, 07 Feb 2023 08:43:43 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/twolove-sarang/post/efa55d5b-4f86-4f3a-b0b2-b078e0a92c2a/image.gif" alt="">
<del>배포하기 참 힘들다^^</del></p>
<p><a href="https://developer.mozilla.org/ko/docs/Web/API/Document/write">✅ Document.write()</a>
[Violation] Avoid using document.write().
다큐멘트에서 스크립트를 쓰지 말라고 한다!!
한참 찾아봤는데</p>
<pre><code>  const {
    isLoading,
    error,
    data: contact,
  } = useQuery(
    {
      queryKey: [&quot;contact&quot;],
      queryFn: viewContact,
    },
    { staleTime: 1000 * 5 * 10 }
  );

  const { user } = useUserContext();

  if (isLoading) return &lt;p&gt;loading...&lt;/p&gt;;
  if (error) return &lt;p&gt;error...&lt;/p&gt;;</code></pre><p>마지막 두 부분이 문제였던것..!
쿼리쓸때 확인용으로 써놨던것이 배포를 막아두고 있더랬다ㅠㅠㅠ
암튼 지우고 나서 배포했더니 성공!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[netlify / firebase authentication 설정하기]]></title>
            <link>https://velog.io/@twolove-sarang/%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EC%8B%9C%EB%A6%AC%EC%A6%88-03-%EB%84%A4%ED%8A%B8%EB%A6%AC%ED%8C%8C%EC%9D%B4-%EC%97%85%EB%A1%9C%EB%93%9C</link>
            <guid>https://velog.io/@twolove-sarang/%ED%8F%AC%ED%8A%B8%ED%8F%B4%EB%A6%AC%EC%98%A4-%EC%8B%9C%EB%A6%AC%EC%A6%88-03-%EB%84%A4%ED%8A%B8%EB%A6%AC%ED%8C%8C%EC%9D%B4-%EC%97%85%EB%A1%9C%EB%93%9C</guid>
            <pubDate>Tue, 07 Feb 2023 07:50:23 GMT</pubDate>
            <description><![CDATA[<p>파이어베이스에서 auth를 사용하고 있다면
netlify에 업로드할때 도메인 설정이 필요하다.</p>
<ol>
<li><p>파이어베이스 콘솔에서 authentication탭으로 이동한다.</p>
</li>
<li><p>세팅 탭의 승인된 도메인탭으로 이동한다.
<img src="https://velog.velcdn.com/images/twolove-sarang/post/d952d2c2-ac50-4dd6-92c5-334b23aa1893/image.png" alt=""></p>
</li>
<li><p>도메인 추가를 눌러준다.
<img src="https://velog.velcdn.com/images/twolove-sarang/post/5bdc74d1-791b-4531-b395-82edd41400dd/image.png" alt=""></p>
</li>
<li><p>네트리파이에서 생성된 도메인을 추가해준다.
<img src="https://velog.velcdn.com/images/twolove-sarang/post/4375a909-13f7-4913-9d3a-ad6bd3dc7cb5/image.png" alt=""></p>
</li>
</ol>
<p>그러면 깔끔하게 성공한다 :)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[리액트 쿼리 - 뮤테이션 뿌시기]]></title>
            <link>https://velog.io/@twolove-sarang/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EC%BF%BC%EB%A6%AC-%EB%AE%A4%ED%85%8C%EC%9D%B4%EC%85%98-%EB%BF%8C%EC%8B%9C%EA%B8%B0</link>
            <guid>https://velog.io/@twolove-sarang/%EB%A6%AC%EC%95%A1%ED%8A%B8-%EC%BF%BC%EB%A6%AC-%EB%AE%A4%ED%85%8C%EC%9D%B4%EC%85%98-%EB%BF%8C%EC%8B%9C%EA%B8%B0</guid>
            <pubDate>Mon, 06 Feb 2023 14:26:24 GMT</pubDate>
            <description><![CDATA[<p><a href="https://tkdodo.eu/blog/mastering-mutations-in-react-query">✅ Mastering Mutations in React Query</a></p>
<p>뮤테이션 사용중 찾은 좋은 글
꼭 읽어보기!! </p>
]]></description>
        </item>
    </channel>
</rss>