<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sy_kang013.log</title>
        <link>https://velog.io/</link>
        <description>두잇.</description>
        <lastBuildDate>Mon, 26 Jun 2023 07:44:37 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>sy_kang013.log</title>
            <url>https://velog.velcdn.com/images/sy_kang013/profile/c47ae16d-68e2-4fbf-8ae6-47ae5920414b/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. sy_kang013.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sy_kang013" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[번역) [RN] Navigating Between Screens]]></title>
            <link>https://velog.io/@sy_kang013/%EB%B2%88%EC%97%AD-RN-Navigating-Between-Screens</link>
            <guid>https://velog.io/@sy_kang013/%EB%B2%88%EC%97%AD-RN-Navigating-Between-Screens</guid>
            <pubDate>Mon, 26 Jun 2023 07:44:37 GMT</pubDate>
            <description><![CDATA[<p><strong>들어가기 전에</strong></p>
<ul>
<li>요새는 번역기가 잘 되어있다 보니, 번역기를 사용하면 어느정도 문맥 등을 파악할 수 있는 것이 사실이다. 하지만 어떤 사람에게는/혹은 어떤 날에는 그것 조차 눈에 잘 들어오지 않을 때가 있을 것이다. 1차적으로는 나 자신에게 도움이 되고, 2차적으로는 필요한 누군가에게 도움이 될 수 있지 않을까 싶어 소소하게나마 번역을 해보았다.</li>
<li>오류가 있을 시 댓글로 알려주시면 감사하겠습니다.🙂</li>
<li>이 페이지는 React Native 공식 문서의 개인적인 번역본입니다.<ul>
<li><a href="https://reactnative.dev/docs/navigation">https://reactnative.dev/docs/navigation</a><ul>
<li>Last updated on Jun 21, 2023</li>
</ul>
</li>
</ul>
</li>
</ul>
<hr>
<h1 id="🏁-화면간의-탐색-기능">🏁 화면간의 탐색 기능</h1>
<p>모바일 앱은 대부분 여러 개의 화면으로 이루어져 있습니다. &#39;Navigatior(네비게이터(탐색기))&#39;라고 불리는 것이 여러 화면들의 표시 및 전환을 관리합니다.</p>
<p>이 가이드는 리액트 네이티브에서 사용가능한 다양한 네비게이션 컴포넌트를 다룹니다. 탐색 기능을 시작하려면, <code>React Navigation</code> 을 사용할 수 있습니다. <code>React Navigation</code> 은 안드로이드, IOS 양쪽 모두에게 공통적인 stack navigation과 tabbed navigation 패턴을 나타낼 수 있는 기능을 가진, 간단한 탐색 솔루션을 제공합니다.</p>
<p>이미 네비게이션을 기본적으로 관리하고 있는 앱에 리액트 네이티브를 통합하고 싶거나, 혹은 리액트 네비게이션의 대안을 찾고 있다면 다음 라이브러리가 양 플랫폼에게 기본 네비게이션을 제공합니다  <a href="https://github.com/wix/react-native-navigation">react-native-navigation.</a></p>
<h2 id="reactnavigation리액트-네비게이션">ReactNavigation(리액트 네비게이션)</h2>
<p>개발자들가 몇 줄의 코드로 앱의 화면을 설정하게 해주는, 독립적인 라이브러리 입니다.</p>
<h3 id="설치-및-설정">설치 및 설정</h3>
<p>먼저, 프로젝트에 설치해야합니다.</p>
<blockquote>
<p><code>npm install @react-navigation/native @react-navigation/native-stack</code></p>
</blockquote>
<p>그 다음, 필요한 peer 종속성을 설치합니다. Expo가 프로젝트를 관리하는지 또는 기본 리액트 네이티브 프로젝트인지에 따라 다른 명령어를 사용해야 합니다.</p>
<ul>
<li><p>엑스포가 관리하는 프로젝트라면, <code>expo</code>로 설치</p>
<blockquote>
<p><code>npx expo install react-native-screens react-native-safe-area-context</code></p>
</blockquote>
</li>
<li><p>기본 리액트 네이티브 프로젝트라면, <code>npm</code>으로 설치</p>
<blockquote>
<p><code>npm install react-native-screens react-native-safe-area-context</code></p>
</blockquote>
<ul>
<li>ios를 위한 기본 리액트 네이티브 프로젝트인 경우, <a href="https://cocoapods.org/">Cocoapod</a>이 설치되어있어야 합니다. 그 후 pods를 설치해서 과정을 완료합니다.<blockquote>
</blockquote>
<code>cd ios</code>
<code>pod install</code>
<code>cd ..</code></li>
</ul>
<p><strong>NOTE</strong>
설치 후에 peer 종속성 관련 경고가 뜰 수도 있습니다. 이런 경고들은 대체로 몇 패키지들의 버젼이 맞지 않아 생깁니다. 앱이 문제없이 빌드되는 한 대부분의 경고는 무시할 수 있습니다.</p>
</li>
</ul>
<br>

<p>이제 전체 앱을 <code>NavigationContainer</code> 로 감싸야합니다. 보통 <code>index.js</code> 나 <code>App.js</code> 같은 entry file(진입 파일)에 많이 합니다.</p>
<blockquote>
<pre><code>import * as React from &#39;react&#39;;
import {NavigationContainer} from &#39;@react-navigation/native&#39;;
const App = () =&gt; {
  return (
    &lt;NavigationContainer&gt;
      {/* Rest of your app code */}
    &lt;/NavigationContainer&gt;
  );
};
export default App;
export default App;</code></pre></blockquote>
<pre><code>
디바이스/시뮬레이터에서 앱 빌드 및 실행할 준비가 끝났습니다.


### Usage
이제 홈 화면과 프로필 화면이 있는 app을 생성할 수 있습니다.

&gt;```
import * as React from &#39;react&#39;;
import {NavigationContainer} from &#39;@react-navigation/native&#39;;
import {createNativeStackNavigator} from &#39;@react-navigation/native-stack&#39;;
const Stack = createNativeStackNavigator();
const MyStack = () =&gt; {
  return (
    &lt;NavigationContainer&gt;
      &lt;Stack.Navigator&gt;
        &lt;Stack.Screen
          name=&quot;Home&quot;
          component={HomeScreen}
          options={{title: &#39;Welcome&#39;}}
        /&gt;
        &lt;Stack.Screen name=&quot;Profile&quot; component={ProfileScreen} /&gt;
      &lt;/Stack.Navigator&gt;
    &lt;/NavigationContainer&gt;
  );
};</code></pre><p>위 예제에서, 홈과 프로필 화면 두 가지는 <code>Stack.Screen component</code> 를 사용해 정의됩니다. 이와 같은 방법으로 원하는 만큼의 화면을 정의할 수 있습니다.</p>
<p><code>Stack.Screen</code>의 prop인 <code>options</code>로 화면제목을 설정할 수 있습니다.</p>
<p>각 화면은 리액트 컴포넌트인 <code>component</code> prop을 사용합니다. 이 컴포넌트들은 다양한 메소드를 가진<code>navigation</code>이란 prop을 받습니다. 예를들어, <code>navigation.navigate</code> 를 사용해 Profile 스크린으로 이동할 수 있습니다.</p>
<blockquote>
<pre><code>const HomeScreen = ({navigation}) =&gt; {
  return (
      &lt;Button
      title=&quot;Go to Jane&#39;s profile&quot;
      onPress={() =&gt;
        navigation.navigate(&#39;Profile&#39;, {name: &#39;Jane&#39;})
      }
    /&gt;
  );
};
const ProfileScreen = ({navigation, route}) =&gt; {
  return &lt;Text&gt;This is {route.params.name}&#39;s profile&lt;/Text&gt;;
};</code></pre></blockquote>
<pre><code>
```native-stack``` 네비게이터는 기본적인 API들을 사용합니다.
- IOS 의 경우 : ```UINavigationController```
- Android의 경우 : ```Fragment```

```createNativeStackNavigator``` 으로 구축된 네비게이션은 API 위에 기본적으로 구축된 앱과 동일하게 동작하며, 성능 특성이 동일합니다.


 리액트 네비게이션은 tabs나 drawer같은 다양한 네비게이터를 위한 패키지도 있습니다. 이를 사용해 앱에서 다양한 패턴을 구현할 수 있죠.

리액트 네비게이션 인트로를 완료하려면, 아래의 리액트 [React Navigation Getting Started Guide](https://reactnavigation.org/docs/getting-started/) 를 따라해보세요.



[끝]

---</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[error] .command가 터미널에서 문서를 열도록 허용되지 않았기 때문에 ...]]></title>
            <link>https://velog.io/@sy_kang013/%EC%97%90%EB%9F%AC</link>
            <guid>https://velog.io/@sy_kang013/%EC%97%90%EB%9F%AC</guid>
            <pubDate>Tue, 23 May 2023 15:00:38 GMT</pubDate>
            <description><![CDATA[<h3 id="하려고-한것">하려고 한것</h3>
<blockquote>
<p>1) 리액트 네이티브 환경을 구축하고 안드로이드 시뮬레이터를 돌리기 위해 아래 명령어를 입력했다.</p>
</blockquote>
<pre><code>npx react-native run-android</code></pre><h3 id="문제발생">문제발생</h3>
<blockquote>
<p>1) 터미널에서 build는 6s만에 성공적으로 되었다고 나오는데,
<img src="https://velog.velcdn.com/images/sy_kang013/post/16f41e76-0d66-4cb8-a544-f5e8aa1d58fe/image.png" alt="">
2) 아래와 같은 경고창이 뜬다.
<img src="https://velog.velcdn.com/images/sy_kang013/post/a27aab84-b4c7-46c4-8984-fdaf87939af4/image.png" alt="">
3) 안드로이드 스튜디오 내의 화면에서도 script를 불러올 수 없다는 경고가 뜬다.
<img src="https://velog.velcdn.com/images/sy_kang013/post/8c37a0b9-f46b-496a-96a1-b0c1c64c2051/image.png" alt=""></p>
</blockquote>
<h3 id="문제-해결">문제 해결</h3>
<blockquote>
<p>1) 아래 링크를 참고해서 해결했다. 경고창의 메시지대로 itearm2 / 터미널에서 문서를 여는 권한을 주지 않아 나타난 문제인듯하다.
<a href="https://stackoverflow.com/questions/74187734/launchpackager-command-can-t-be-opened">https://stackoverflow.com/questions/74187734/launchpackager-command-can-t-be-opened</a></p>
</blockquote>
<blockquote>
<p>2) 다시 실행해보니 작동이 잘 된다.
<img src="https://velog.velcdn.com/images/sy_kang013/post/b3fc8a1e-dd62-4f61-8312-291c19524df6/image.png" alt=""></p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[macOS)리액트 네이티브 개발환경 구축]]></title>
            <link>https://velog.io/@sy_kang013/macOS%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%B8%8C-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95</link>
            <guid>https://velog.io/@sy_kang013/macOS%EB%A6%AC%EC%95%A1%ED%8A%B8-%EB%84%A4%EC%9D%B4%ED%8B%B0%EB%B8%8C-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95</guid>
            <pubDate>Tue, 23 May 2023 14:45:49 GMT</pubDate>
            <description><![CDATA[<h3 id="선행해야할것">선행해야할것</h3>
<blockquote>
<p>1) 아래 링크를 참고해서 설치를 진행했다. 
<a href="https://dev-yakuza.posstree.com/ko/react-native/install-on-mac/">https://dev-yakuza.posstree.com/ko/react-native/install-on-mac/</a></p>
</blockquote>
<blockquote>
<p>2) 1번 항목의 링크에 있는 설치 순서 및 목적을 한 눈에 보고싶어, 아래와 같이 적어둔다.</p>
</blockquote>
<ul>
<li>Homebrew<ul>
<li>mac에서 필요한 패키지를 설치 및 관리.</li>
</ul>
</li>
<li>rbenv<ul>
<li>(리액트 네이티브에 필요한)Ruby를 버전별로 설치하고 관리할 수 있게 도와주는 툴.(프로젝트 마다 사용하는 Ruby 버젼이 다를 수 있어서 그렇다.)</li>
<li><a href="https://github.com/rbenv/rbenv">  공식 깃헙 링크
</a> </li>
</ul>
</li>
<li>Node.js<ul>
<li>JS의 런타임(실행기).</li>
</ul>
</li>
<li>Watchman<ul>
<li>특정 폴더/파일 감시중 변화가 생기면 특정 동작을 실행하도록 설정. 리액트 네이티브에서는 소스코드의 추가, 변경 발생시 재빌딩 위해 사용.</li>
</ul>
</li>
<li>React Native CLI</li>
<li>Xcode<ul>
<li>ios 개발 툴.</li>
</ul>
</li>
<li>Cocoapods<ul>
<li>ios 개발에 사용되는 의존성 관리자.</li>
</ul>
</li>
<li>JDK<ul>
<li>Java Development Kit.</li>
</ul>
</li>
<li>Android Studio<ul>
<li>안드로이드 앱 개발시 필요.</li>
<li>안드로이드 스튜디오 SDK 설정.</li>
<li>안드로이드 스튜디오 환경 변수 설정.</li>
</ul>
</li>
<li>리액트 네이티브 프로젝트 생성<ul>
<li>ios 에뮬레이터 작동 확인.</li>
<li>안드로이드 에뮬레이터 작동 확인 .</li>
</ul>
</li>
</ul>
<hr>
<h3 id="과정">과정</h3>
<blockquote>
<p>1) 프로젝트 초기화</p>
</blockquote>
<pre><code>npx react-native@latest init 프로젝트명</code></pre><blockquote>
<p>2)에러발생
<img src="https://velog.velcdn.com/images/sy_kang013/post/4d4ed0c5-622b-486c-8880-a6b5f8b7e92f/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>3)</p>
</blockquote>
<pre><code>npm uninstall -g react-native-cli @react-native-community/cli</code></pre><blockquote>
<p>4)해당 프로젝트 폴더로 이동</p>
</blockquote>
<pre><code>cd 해당 프로젝트명</code></pre><blockquote>
<p>5)vsc에서 아래 명령어로 서버를 먼저 실행</p>
</blockquote>
<pre><code> npx react-native start</code></pre><p><img src="https://velog.velcdn.com/images/sy_kang013/post/5b0b4075-f769-4775-88f2-24a4f6d1586f/image.png" alt=""></p>
<blockquote>
<p>6)다른 터미널을 열어 아래 명령어 입력</p>
</blockquote>
<pre><code>npx react-native run-ios</code></pre><blockquote>
<p>7)에러 발생</p>
</blockquote>
<pre><code>npx react-native run-ios
warn Multiple Podfiles were found: ios/Podfile,vendor/bundle/ruby/2.6.0/gems/cocoapods-core-1.12.1/lib/cocoapods-core/Podfile. Choosing ios/Podfile automatically. If you would like to select a different one, you can configure it via &quot;project.ios.sourceDir&quot;. You can learn more about it here: https://github.com/react-native-community/cli/blob/master/docs/configuration.md
error str.replace is not a function.
TypeError: str.replace is not a function
    at inlineString (/Users/soo/AwesomeProject/node_modules/@react-native-community/cli-tools/build/errors.js:25:33)
    at new CLIError (/Users/soo/AwesomeProject/node_modules/@react-native-community/cli-tools/build/errors.js:13:11)
    at getProjectInfo (/Users/soo/AwesomeProject/node_modules/@react-native-community/cli-platform-ios/build/tools/getProjectInfo.js:29:11)
    at Object.runIOS [as func] (/Users/soo/AwesomeProject/node_modules/@react-native-community/cli-platform-ios/build/commands/runIOS/index.js:82:58)
    at Command.handleAction (/Users/soo/AwesomeProject/node_modules/@react-native-community/cli/build/index.js:108:23)
    at Command.listener [as _actionHandler] (/Users/soo/AwesomeProject/node_modules/commander/lib/command.js:482:17)
    at /Users/soo/AwesomeProject/node_modules/commander/lib/command.js:1283:65
    at Command._chainOrCall (/Users/soo/AwesomeProject/node_modules/commander/lib/command.js:1177:12)
    at Command._parseCommand (/Users/soo/AwesomeProject/node_modules/commander/lib/command.js:1283:27)
    at /Users/soo/AwesomeProject/node_modules/commander/lib/command.js:1081:27</code></pre><blockquote>
<p>8) 비슷한 이슈 링크(댓글의 Apolloseven 작성자 참고)
<a href="https://github.com/CocoaPods/CocoaPods/issues/11641">https://github.com/CocoaPods/CocoaPods/issues/11641</a></p>
</blockquote>
<pre><code>sudo gem install cocoapods --pre -n /usr/local/bin</code></pre><pre><code>sudo xcode-select --switch /Applications/Xcode.app.</code></pre><pre><code>sudo xcodebuild -license accept</code></pre><pre><code>npx react-native@latest init AwesomeProject1</code></pre><blockquote>
<p>9) 리액트 네이티브 실행 에러는 해결.
<img src="https://velog.velcdn.com/images/sy_kang013/post/b0c407df-1eec-4698-a7c0-eb84e447d266/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>10) ios 에뮬레이터 재실행</p>
</blockquote>
<pre><code>npx react-native start</code></pre><pre><code>npx react-native run-ios</code></pre><blockquote>
<p>11) 문제 발생
<img src="https://velog.velcdn.com/images/sy_kang013/post/21c1653f-2366-4802-9e98-7ae8a6262459/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>12) ios simulator 잘 작동 (어떻게 해결한건지 까먹음...)
<img src="https://velog.velcdn.com/images/sy_kang013/post/31217e1e-d5be-451f-87d1-1e98f851c8be/image.png" alt=""></p>
</blockquote>
<hr>
<h3 id="안드로이드-에뮬레이터-실행">안드로이드 에뮬레이터 실행</h3>
<blockquote>
<p>1) 실행중인 안드로이드 디바이스 시뮬(?)을 확인할 수 있는 CLI</p>
</blockquote>
<pre><code>adb devices</code></pre><blockquote>
<p>2) Android Debug Bridge(ADB) 버젼 확인 CLI</p>
</blockquote>
<pre><code>adb</code></pre><p><img src="https://velog.velcdn.com/images/sy_kang013/post/9d43b2d1-36b4-4537-8aa1-512c084ba23e/image.png" alt=""></p>
<blockquote>
<p>3) 안드로이드 에뮬레이터 실행을 위해 명령어 입력 하였으나,</p>
</blockquote>
<pre><code>npx react-native run-android</code></pre><blockquote>
<p>4) 에러발생
<img src="https://velog.velcdn.com/images/sy_kang013/post/ac3ef393-e480-4b97-9704-fe1d4c14755f/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>5) 문제 해결 시도1</p>
</blockquote>
<pre><code>export ANDROID_HOME=&lt;sdk위치&gt;
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/tools/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools</code></pre><blockquote>
<p>6) 에러 메시지
<img src="https://velog.velcdn.com/images/sy_kang013/post/6b17bbf2-5f12-470b-adc0-74ba8cbc45e9/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>7) 문제해결 시도2 (액세스 문제로 추정)
<a href="https://stackoverflow.com/questions/75731330/still-getting-error-spawn-gradlew-eacces-even-after-chmod-755-android-gradlew">https://stackoverflow.com/questions/75731330/still-getting-error-spawn-gradlew-eacces-even-after-chmod-755-android-gradlew</a></p>
</blockquote>
<pre><code>chmod 755 android/gradlew</code></pre><blockquote>
<p>8) 재시도</p>
</blockquote>
<pre><code>npx react-native run-android</code></pre><blockquote>
<p>9) 여전히 에러 출력
<img src="https://velog.velcdn.com/images/sy_kang013/post/52c47e9e-9071-454e-b054-ae254b51d60f/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>10) 안드로이드 스튜디오에서 버젼을 오라클로 설정
settings-&gt;build,execution(...)-&gt;build tools-&gt;gradle 
<img src="https://velog.velcdn.com/images/sy_kang013/post/2e6a0360-fdc6-4d2b-970c-429459dfe99e/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>11) 여기서도 뭔가 했는데...이 부분을 뭘 한건지 까먹었다()
<img src="https://velog.velcdn.com/images/sy_kang013/post/73d6651e-e087-4cc4-8c29-9f5543f580f9/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>공식문서도 참고했음.
<a href="https://reactnative.dev/docs/environment-setup?os=macos&amp;platform=android">https://reactnative.dev/docs/environment-setup?os=macos&amp;platform=android</a></p>
</blockquote>
<h3 id="기타-노트">기타 노트</h3>
<blockquote>
<p><strong>[note1]</strong> ios앱을 만드는 것은 맥북에만 있는 Xcode를 사용하기 때문에, 맥북에서만 가능하다. </p>
</blockquote>
<blockquote>
<p><strong>[note2]</strong> 에뮬레이터와 시뮬레이터는 같지 않다. 
아직 완벽히 이해되지는 않았으니 에뮬레이터는 &#39;실제&#39; &#39;행동&#39; &#39;복제&#39; 와 같은 키워드가 많이 도출되고, 시뮬레이터는 &#39;모의실험&#39; &#39;모델링&#39; 과 같은 키워드가 많이 보인다.
(내 생각에는) 에뮬레이터는 작동 기전까지 똑같이 복제해서 따라하는것 같고, 시뮬레이터는 에뮬레이터 보다는 얕게 모방해내는것 같다.</p>
</blockquote>
<pre><code>에뮬레이터(Emulator)는 한 시스템에서 다른 시스템을 복제한다.
그리하여 두 번째 시스템이 첫 번째 시스템을 따라 행동하는 것이다.
외부의 행동에 대해 똑같이 따라하려고 하는 이 관점은 시뮬레이션과는 정 반대이다. 
왜냐하면, 시뮬레이션은 자주 내부 상태와 관련하여, 
흉내내는 시스템의 추상적인 모델과 관계가 있기 때문이다.</code></pre><p>참고문서1 <a href="https://ko.wikipedia.org/wiki/%EC%97%90%EB%AE%AC%EB%A0%88%EC%9D%B4%ED%84%B0">위키백과</a>
참고문서2
<a href="https://giantsol.github.io/emulator-vs-simulator/">https://giantsol.github.io/emulator-vs-simulator/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[GH CLI로 터미널에서 깃헙 이슈생성 및 작성해보기]]></title>
            <link>https://velog.io/@sy_kang013/gh-cli</link>
            <guid>https://velog.io/@sy_kang013/gh-cli</guid>
            <pubDate>Wed, 01 Mar 2023 08:46:09 GMT</pubDate>
            <description><![CDATA[<h1 id="스토리">스토리</h1>
<blockquote>
<p>프로젝트/공부시 깃헙 이슈와 커밋내역을 연동하는것을 좋아하는데(기록으로 남으니까!), 하나하나 GUI로 등록하자니 비효율적이라고 느껴졌다. 그래서 &quot;git cli로 커밋시 이슈 연결/닫기는 가능한데, 이슈 생성은 못하는건가?&quot;하는 의문이 들어 방법을 찾아보았다. 결론적으로는, GH CLI(GitHub Command-Line Interface)가 필요하다고 한다.</p>
</blockquote>
<hr>
<h1 id="과정">과정</h1>
<h3 id="1-참고문서_gh-cli-설치">1. 참고문서_GH CLI 설치</h3>
<blockquote>
<p><a href="https://github.com/cli/cli#installation">https://github.com/cli/cli#installation</a></p>
</blockquote>
<h3 id="2-gh-cli-설치-및-깃헙-사용자-인증">2. GH CLI 설치 및 깃헙 사용자 인증</h3>
<blockquote>
</blockquote>
<p>나는 homebrew로 설치했다.</p>
<pre><code>brew install gh</code></pre><p><img src="https://velog.velcdn.com/images/sy_kang013/post/e270edf9-40d3-416e-ae7b-f2be001b43d6/image.png" alt=""></p>
<blockquote>
</blockquote>
<p>아래 명령어로 잘 설치되었는지 확인해본다.</p>
<pre><code>gh version</code></pre><p><img src="https://velog.velcdn.com/images/sy_kang013/post/7c778a65-de6f-4d6b-b0d9-1c4c60b41704/image.png" alt=""></p>
<blockquote>
</blockquote>
<p>설치확인 후 이슈를 등록하려고 제시된 명령어를 사용했는데, 그 전에 gh auth login을 구동해달라고 한다.
사용자 인증이 필요하다는 내용인것 같다. auth는 authorized(인증된)의 줄임말로 추정된다.</p>
<pre><code>gh auth login</code></pre><p><img src="https://velog.velcdn.com/images/sy_kang013/post/bf813b10-45cc-47c4-9619-141b3674a8ab/image.png" alt=""></p>
<blockquote>
</blockquote>
<p>명령어를 입력하면 여러가지 묻는데, 사용자 인증에 필요한 내용들이다.
모두 대답하면 8자리의 인증 코드가 뜨면서 Enter를 누르라고 한다.(혹시몰라 캡쳐하지 않았다.)
<img src="https://velog.velcdn.com/images/sy_kang013/post/2278f63a-0faf-43cd-bd7e-9994f128f9fd/image.png" alt="">Entert시 새 브라우저 창이 뜨고, 8자리의 인증 코드를 입력하면 아래와 같이 인증완료되었다는 화면이 나온다.
<img src="https://velog.velcdn.com/images/sy_kang013/post/31b4eb66-a40b-498f-98d6-345e70687d72/image.png" alt=""></p>
<h3 id="3참고문서_gh-cli">3.참고문서_GH CLI</h3>
<blockquote>
<p>링크에서 필요한 부분(issue 등록, 완료 등)에 가면 GUI를 사용한 방법과 CLI를 사용한 방법 모두 나와있다.
<a href="https://docs.github.com/en/issues/tracking-your-work-with-issues">https://docs.github.com/en/issues/tracking-your-work-with-issues</a></p>
</blockquote>
<h3 id="4-gh-cli-를-이용한-issue-등록-및-커밋시-issue링크--issue닫기">4. GH CLI 를 이용한 &#39;issue 등록&#39; 및 &#39;커밋시 issue링크 &amp; issue닫기&#39;</h3>
<blockquote>
</blockquote>
<p>GH CLI를 사용해서, 이슈를 등록했다.(제목, 본문, 담당자 뿐만 아니라 레이블 등등 모두 설정가능하다. 다만 이미 설정되어있는 레이블만 가져올 수 있다.)
<strong>case1.</strong>이슈 제목과 본문만 적는 경우</p>
<pre><code>gh issue create --title &quot;이슈 제목&quot; --body &quot;본문 내용 작성하면 됩니다.&quot;</code></pre><p><strong>case2.</strong>담당자, 레이블 등 기타정보도 적는 경우
(담당자는 @ 뒤에 이름을 적어주면 된다. 자신인 경우 @me 로 하면 된다.)</p>
<pre><code>gh issue create --title &quot;이슈 제목&quot; --body &quot;본문 내용 작성하면 됩니다.&quot; --assignee @담당자 --label &quot;레이블명&quot; --project 프로젝트명 --milestone &quot;마일스톤명&quot;</code></pre><p><img src="https://velog.velcdn.com/images/sy_kang013/post/ebabece3-05f6-4082-bc4b-49d11ba49ee0/image.png" alt=""></p>
<blockquote>
<p>그리고 commit을 하면서 이슈를 링크하고 닫는 명령어를 입력했다.
<img src="https://velog.velcdn.com/images/sy_kang013/post/d9d889b8-b3bf-4db5-ada1-5c53d61984ec/image.png" alt=""></p>
</blockquote>
<h3 id="4-1문제발생">4-1.문제발생</h3>
<blockquote>
<p>그런데, 깃헙 레포에 가보니 커밋내역에는 분명히 이슈넘버가 잘 반영되어 있는데, 이슈가 close 되지 않았다.
아마 main 브랜치에 반영되어야만 close 되는 모양이다.(나는 develop 브랜치에 커밋했었다.)
<img src="https://velog.velcdn.com/images/sy_kang013/post/773cf900-83b5-443f-915b-210b799169eb/image.png" alt=""><img src="https://velog.velcdn.com/images/sy_kang013/post/45ce227c-13ac-44c9-8ebf-b429ccd8a664/image.png" alt=""></p>
</blockquote>
<h3 id="4-2문제해결">4-2.문제해결</h3>
<blockquote>
</blockquote>
<p>브랜치 병합을 위해 main 브랜치로 이동하여 병합 후 푸쉬해주었다.(내 경우 upstream)</p>
<pre><code>git switch main</code></pre><pre><code>git merge &lt;main에 합칠 브랜치 이름&gt;</code></pre><pre><code>git push upstream</code></pre><blockquote>
<p><img src="https://velog.velcdn.com/images/sy_kang013/post/510fa2c4-80fe-4713-acfa-5b80c94ec30c/image.png" alt=""></p>
</blockquote>
<blockquote>
<p>예상대로 merge 해주었더니 3번 이슈는 GUI를 건드리지 않았는데도 닫힘처리 되었다.
<img src="https://velog.velcdn.com/images/sy_kang013/post/da26f8b0-9bb0-47b6-854e-8fc2f4267f54/image.png" alt=""> 그런데 4번 이슈는 여전히 닫히지 않았음을 알 수 있었는데, 
<img src="https://velog.velcdn.com/images/sy_kang013/post/5f1de102-93d0-4887-9fd4-fc2472963f08/image.png" alt=""> 아마 이슈를 여러개 링크할 시, 이슈넘버 앞에 각각 close 라고 써주어야 하는 것 같다.
(여러개의 이슈에 연결되어있는 commit 이더라도 어떤 이슈에는 완료이고, 어떤 이슈에는 완료가 아닐 수 있으니)
<img src="https://velog.velcdn.com/images/sy_kang013/post/51daabe8-3ad6-47bd-aeb1-4026ed71d432/image.png" alt="">
4번 이슈는 GUI로 닫힘 처리하고, 다음에 여러 이슈를 닫아야 할 일이 생기면 적용해보자.</p>
</blockquote>
<h2 id="소감">소감</h2>
<blockquote>
<p>이렇게 찬찬히 적어보니 좀 더 잘 머리에 들어오는 것 같다. 다만 마크다운을 좀 써서 꾸밀 필요가 더 있을까...싶긴하다.</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[맥북 에어 m1 환경설정(임시공개)]]></title>
            <link>https://velog.io/@sy_kang013/%EB%A7%A5%EB%B6%81-%EC%97%90%EC%96%B4-m1-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@sy_kang013/%EB%A7%A5%EB%B6%81-%EC%97%90%EC%96%B4-m1-%ED%99%98%EA%B2%BD%EC%84%A4%EC%A0%95</guid>
            <pubDate>Sat, 18 Feb 2023 04:34:22 GMT</pubDate>
            <description><![CDATA[<h1 id="상황">상황</h1>
<p>맥북 에어 m1 을 장만했다! 그런데 환경설정 세팅할 생각에 한숨부터 나온다... 그렇지만 언젠가는 해야할 일이라 생각하고 진행했다. 첫번째 실패는 뭔가 중간에 꼬여버리고, 너무 무지성으로 아무거나 때려박고 입력한것 같다 처음부터 찬찬히 진행하기로 했다. 중간에 혹시 마이그레이션을 하면 npm 등 다 딸려오는걸까 해서 두 번 시도해봤는데, 적용되지 않아 다시 공장초기화를 진행했다.
Q. npm은 대체 어디에 설치되는거고, 왜 마이그레이션에 안 딸려올까?</p>
<p>zsh, bash 차이
터미널은 무엇인가</p>
<h2 id="홈브루">홈브루</h2>
<p>1)brew list로 따로 관리가능하여 용이함. 오...홈브루도 git 기반으로 되어있다네. 
-&gt;node
-&gt;git</p>
<p>이 링크에 들어가면 홈브루로 많이 설치하는 것을 볼 수 있다. </p>
<p>홈브루 설치가 완료되면 아래의 명령어를 입력했을 때 결과가 잘 나온다.
(버젼은 시기에 따라 다를 수 있다.)</p>
<pre><code>soo@suyeongui-MacBookAir ~ % brew -v                    
Homebrew 4.0.1
Homebrew/homebrew-core N/A</code></pre><p>반대로, 아직 nvm을 설치하지 않았기 때문에(또는 제대로 설치되지 않았기 때문에) 아래 명령어는 오류가 난다. </p>
<pre><code>soo@suyeongui-MacBookAir ~ % nvm -v
zsh: command not found: nvm</code></pre><p>nvm 설치를 위해서는 최초 명령어 이후 두번 더 해줘야한다.
명령어들의 해석에 대해서는 다른 블로그를 참고하시라.</p>
<pre><code>soo@suyeongui-MacBookAir ~ % export NVM_DIR=&quot;$HOME/.nvm&quot;
  [ -s &quot;/opt/homebrew/opt/nvm/nvm.sh&quot; ] &amp;&amp; \. &quot;/opt/homebrew/opt/nvm/nvm.sh&quot;    soo@suyeongui-MacBookAir ~ %  [ -s &quot;/opt/homebrew/opt/nvm/etc/bash_completion.d/nvm&quot; ] &amp;&amp; \. &quot;/  </code></pre><p> 나는 아래와 같은 내용이 나왔는데, 무슨 소리인지는 모르겠다. 나의 경우 cmd+c로 그냥 나왔다.</p>
<pre><code>cmdand dquote&gt; </code></pre><p>아래 명령어로 설치할 수 있는 node.js 버젼을 출력해본다.</p>
<pre><code>soo@suyeongui-MacBookAir ~ % nvm ls-remote
</code></pre><p>그러면 아래와 같이 설치할 수 있는 목록이 쭉 뜨는데, 나는 안정성을 위해 가장 최근의 LTS 버젼을 설치했다.(LTS는 안정적인 버젼이며, 최신의 버젼이 꼭 LTS는 아니다.)
<img src="https://velog.velcdn.com/images/sy_kang013/post/15755f29-c252-4565-95a4-09263229827a/image.png" alt=""></p>
<p>아래 처럼 nvm install (설치할 node.js 버젼) 을 입력하면 설치가 진행된다. </p>
<pre><code>nvm install 18.14.1</code></pre><p>제대로 설치되었는지 확인을 위해, 아래와 같이 입력해보면 정상적으로 출력된다. </p>
<pre><code>soo@suyeongui-MacBookAir ~ % node -v
v18.14.1</code></pre><p>npm(노드 패키지 매니저) node.js의 패키지를 관리해주는 도구. npm은 의존성이 강하다.)</p>
<p>npx</p>
<p>nvm(노드 버젼 매니저)</p>
<h2 id="깃-설치하기">깃 설치하기</h2>
<p>아래 명령어를 실행하면 홈브루가 git 설치를 해준다. </p>
<pre><code>brew install git</code></pre><p>아래 명령어 중 하나를 입력해보고, 버젼이 제대로 뜬다면 성공적인 설치이다. </p>
<pre><code>git --version</code></pre><pre><code>git -v</code></pre><h2 id="깃과-깃헙은-다르다">깃과 깃헙은 다르다.</h2>
<p>깃헙은 설치하는게 아니라, 접속하는 것이다. (플랫폼이다)</p>
<p>깃 최초설정(user.name &quot;내용&quot;, 
<a href="https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95">https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%B5%9C%EC%B4%88-%EC%84%A4%EC%A0%95</a></p>
<p>위 문서에서 &quot; 환경 설정은 한 컴퓨터에서 한 번만 하면 된다. 설정한 내용은 Git을 업그레이드해도 유지된다.&quot; 라고 표시되고 있다. </p>
<p>사용할 수 잇는 깃 컨피그 명령어들을 보여주는것 같다. </p>
<pre><code>git config --system</code></pre><p>아래 명령어들로 유저 네임과 유저 이메일 입력. </p>
<pre><code>git config --global user.name &quot;sykang013&quot;</code></pre><pre><code>git config --global user.email sy.kang013@gmail.com</code></pre><p>아래 명령어로 방금 입력한 유저네임과 이메일이 잘 입력되었는지 확인</p>
<pre><code>git config ls</code></pre><p>git의 기본 편집기로 vsc 설정
--await 은실수 방지용이다.(cli로 vsc 실행했을시, vsc 끄기 전까지 command를 대기시킨다는데 먼소린지 모르겠음. 여튼 브렌치 머지할때 유용하다함)</p>
<p>tip
파일 이름 앞에 .가 있다면 숨김파일이므로, ls 를 해도 보이지 않는다. 숨김파일까지 보려면 ls -a 을 입력해서 모든 파일을 표시해야한다. </p>
<pre><code>git config --global core.editor &quot;code --wait&quot;</code></pre><h2 id="cask-설치">cask 설치</h2>
<p>맥용 어플리케이션 설치를 터미널에서 가능하게 해주는 것이라고 한다. 
설치 명령어</p>
<pre><code>brew install cask</code></pre><p>이러면 뭔가 엄청 많이 뜨면서 설치된다. </p>
<p>그리고 cask로 vsc를 설치했다.</p>
<pre><code>brew install --cask visual-studio-code</code></pre><h2 id="윈도우와-맥의-공백문자-설정">윈도우와 맥의 공백문자 설정</h2>
<p>윈도우와 맥으로 협업시, 공백문자 때문에 불필요한 충돌이 많이 난다고 알고있다. 
해당 문제를 방지하기 위해 아래 명령어를 입력한다.</p>
<pre><code>git config --global core.autocrlf input</code></pre><p>git config에 잘 들어갔는지 확인한다. 아래 명령어를 입력했을 때 뜨는 목록들 중에 core.autocrlf=input이 있다면 잘 등록된거다.</p>
<pre><code>git config --list</code></pre><h2 id="iterm2-설치">iterm2 설치</h2>
<h2 id="vsc와-깃헙-연동">vsc와 깃헙 연동</h2>
<p>vsc 좌측 하단의 프로필 이미지를 클릭해서, terning on setting sync를 클릭하고, 깃헙으로 로그인을 선택한다. vsc와 깃헙이 연동되어있으면 로컬의 저장소를 깃헙에 그대로 푸쉬 가능해서 편하다. </p>
<h2 id="terminal-vsc-현재-브랜치-보이도록-설정">terminal, VSC 현재 브랜치 보이도록 설정</h2>
<p>깃 익스텐션 읽어보기
<a href="https://inpa.tistory.com/entry/VSCode-%F0%9F%92%BD-GIT-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98-%EC%B6%94%EC%B2%9C#Git_History">https://inpa.tistory.com/entry/VSCode-%F0%9F%92%BD-GIT-%EC%9D%B5%EC%8A%A4%ED%85%90%EC%85%98-%EC%B6%94%EC%B2%9C#Git_History</a></p>
<p>tip
최상위 폴더에 git을 설정해두면 커밋할게 많아져서 추천하지 않는다 &lt;- 다시 알아보기.</p>
<p>바벨
:리액트 문법을 위한? pars?</p>
<p>사실 설치를 하거나 하다보면 주룩주룩 뜨는걸 읽어보기 싫은 마음이 드는데, 그렇다고 해서 막상 읽어보면 아주 어려운 내용도 아니다. 그리고 의외로 이런 문제가 있는거 같은데 이렇게 해결해봐! 라고 알려주는걸 그대로 따라해서 문제를 해결한 경우도 더러 있으니, 아주 친절한 도구이다. 중요한것은 익숙해지는 것이다. 메시지를 읽고 도움말을 읽는 연습을 가져야 혼자 공부할 수 있고, 툴에 상관없이 원리와 기본을 이해해야 나중에 또다른 유행으로 툴이 바뀌더라도 크게 흔들리지 않고 꾸준히 성장할 수 있다. </p>
<p>아래 명령어는, npm에게 무엇무엇을 설치해달라고 하는 것이다. 구체적으로 원하는게 있다면 뒤에 그것을 붙이지만, 다른 사람의 레포를 가졍ㄴ 경우, package.json이 있는 경우를 볼 수 있다. 그러면 우리는 터미널에 npm i 만 입력하면, npm이 package.json을 훑어서 흠 이러이러한게 필요하군! 하고 설치해준다. 그러면 node_modules 라는 개발 의존 모듈이 생긴다. </p>
<pre><code>npm i</code></pre><p>기타 설정
xhtml 셀프 클로징? </p>
<h2 id="아름다운-iterm2">아름다운 iterm2</h2>
<p><a href="https://so-es-immer.tistory.com/entry/iterm2-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-%EC%83%89%EA%B9%94-%EC%9E%85%ED%9E%88%EA%B8%B0">https://so-es-immer.tistory.com/entry/iterm2-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-vim-%EC%83%89%EA%B9%94-%EC%9E%85%ED%9E%88%EA%B8%B0</a></p>
<p>이 분의 블로그를 참고했으니(아주 상세하게 설명해주시고 계신다) 관심 있으시다면 정독을 추천합니다.</p>
<p>다만, 코드를 수정해도 금방금방 적용되지 않는것 같을텐데, 그럴때는 아래 명령어를 입력하면 됩니다.</p>
<pre><code>❯ source ~/.zshrc</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[왜 됐는지 모르겠다고! Git : fork 하고 브랜치 가져오기(임시 공개)]]></title>
            <link>https://velog.io/@sy_kang013/Git-fork-%ED%95%98%EA%B3%A0-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@sy_kang013/Git-fork-%ED%95%98%EA%B3%A0-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Mon, 13 Feb 2023 12:41:00 GMT</pubDate>
            <description><![CDATA[<h3 id="1문제상황">1.문제상황</h3>
<p>1)선생님의 레포지토리를 fork 해와서, 로컬에 clone 하고, 로컬의 origin은 forked 레포, upstream은 원본 레포지토리로 두었다.
2)그런데, main 브랜치만 fork 되었다.
=&gt; 왜 main 브랜치만 fork될까?
3)그리고 로컬에 새 브랜치 a를 파서 원본 레포의 브랜치 a를 가져오려고 했다.</p>
<h3 id="2문제해결과정">2.문제해결과정</h3>
<p>이 문제를 해결하고나서 처음 내뱉은 말은...
&quot;뭐야! 왜 되지! 왜 됐는지 모르겠다고!ㅠㅠ&quot; 였다.
분명 에러 메시지에서 권해주는대로 하긴 했는데, 그래서 왜 충돌이 났고 왜 해결이 되었는가? </p>
<h3 id="3분석">3.분석</h3>
<p>첫 에러메시지: 구체적인 pull 옵션이 필요하다.
행동1: git config pull.rebase false 로 선택</p>
<p>두번째 에러메시지: 상관없는 히스토리라 머지가 거절되었다.
행동: --allow-unrelated-histories 로 강제하기</p>
<p>세번째 에러메시지: 머지 전 package-lock.json을 옮기거나 지워달라
행동: 해당파일 삭제</p>
<p>다시 시도: 됨.</p>
<p><img src="https://velog.velcdn.com/images/sy_kang013/post/17d11d72-665a-49b0-b674-d9bd60c3c2e3/image.png" alt=""><img src="https://velog.velcdn.com/images/sy_kang013/post/a9e333dc-1bbe-46fa-bccc-1e6cc6003473/image.png" alt=""></p>
<p>npm i 를 했고, npm start도 문제없이 동작한다. </p>
]]></description>
        </item>
    </channel>
</rss>