<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dev_hyemi.log</title>
        <link>https://velog.io/</link>
        <description>기억보단 기록을📓</description>
        <lastBuildDate>Sun, 09 May 2021 14:15:19 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>dev_hyemi.log</title>
            <url>https://images.velog.io/images/dev_hyemi/profile/c2ebb43b-cc9b-4142-8d02-548b7a2ec3b0/Image from iOS (3).jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. dev_hyemi.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dev_hyemi" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[TIL.React Router]]></title>
            <link>https://velog.io/@dev_hyemi/React-Router</link>
            <guid>https://velog.io/@dev_hyemi/React-Router</guid>
            <pubDate>Sun, 09 May 2021 14:15:19 GMT</pubDate>
            <description><![CDATA[<h1 id="spa">SPA</h1>
<ul>
<li>Single Page Application의 약자로  페이지가 1개인 어플리케이션을 말한다.</li>
<li>전통적인 웹어플리케이션의 구조는 여러 페이지로 구성되어져 있다. 유저가 요청할 때마다 서버로부터 리소스를 전달 받아서 렌더링을 해왔다. 하지만 이러한 면은 정보가 많은 요즘의 웹에서는 속도적인 측면에도 문제가 되며,  렌더링하는 만큼 서버의 자원이 사용되어 불필요한 낭비가 발생하게 된다. </li>
</ul>
<p>그래서 SPA라는 개념이 나타나게 되었는데, 기존의 방식대로 서버가 페이지 구성에 필요한 리소스를 매번 전송하는 것이 아니라, 파일은 처음에 한번 송수신 하고 그 뒤로는 실시간 데이터만 주고받게 되는 것이다. </p>
<p>이렇게 제일 처음 전송된 단일 HTML 페이지에 포함되어 있는 JS에서 필요한 데이터를 서버로 부터 호출하여 화면을 새롭게 구성해주는 방식이 되는 것이다.</p>
<h1 id="routing">Routing</h1>
<ul>
<li>라우팅은 다른 경로 (url 주소)에 따라 다른 화면을 보여주는 것</li>
</ul>
<h1 id="react-router">React-Router</h1>
<ul>
<li>React-Router는 써드파티 라이브러리로서, 라우팅을 위한 가장 인기있는 라이브러리 이다.</li>
</ul>
<h2 id="그래서-어떻게-사용하는-건데🧐">그래서 어떻게 사용하는 건데?🧐</h2>
<h3 id="1-react-router-설치">1. React Router 설치</h3>
<pre><code class="language-jsx">npm install react-router-dom --save</code></pre>
<h3 id="2-routes-컴포넌트-구현하기">2. Routes 컴포넌트 구현하기</h3>
<pre><code class="language-jsx">import React from &#39;react&#39;;
import {
  BrowserRouter as Router,
  Switch,
  Route,
} from &#39;react-router-dom&#39;;

import Login from &#39;./pages/Login/Login&#39;;
import Signup from &#39;./pages/Signup/Signup&#39;;
import Main from &#39;./pages/Main/Main&#39;;

class Routes extends React.Component {
  render() {
    return (
      &lt;Router&gt;
        &lt;Switch&gt;
          &lt;Route exact path=&quot;/&quot; component={Login} /&gt;
                    &lt;Route exact path=&quot;/signup&quot; component={Signup}/&gt;
          &lt;Route exact path=&quot;/main&quot; component={Main} /&gt;
        &lt;/Switch&gt;
      &lt;/Router&gt;
    )
  }
}

export default Routes;</code></pre>
<pre><code class="language-jsx">&lt;Route path=&quot;주소규칙&quot; component={보여주고싶은 컴포넌트}&gt;</code></pre>
<h3 id="3-routes-컴포넌트-indexjs-에-import시키기">3. Routes 컴포넌트 index.js 에 import시키기</h3>
<pre><code class="language-jsx">ReactDOM.render(&lt;Routes /&gt;, document.getElementById(&#39;root&#39;));</code></pre>
<ul>
<li>CRA로 개발 환경을 세팅했을 경우 routing 기능을 적용하기 위해서는 <code>index.js</code>를 수정해야한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. React- LifeCycle(생명주기)]]></title>
            <link>https://velog.io/@dev_hyemi/React-LifeCycle</link>
            <guid>https://velog.io/@dev_hyemi/React-LifeCycle</guid>
            <pubDate>Mon, 26 Apr 2021 14:48:08 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>컴포넌트는 LifeCycle (생명주기)를 가진다.
 생명주기란 컴포넌트가 생성되고 사용되고 소멸될 때 까지의 일련의 과정을 말한다.</p>
</blockquote>
<h1 id="lifecycle-기본순서">LifeCycle 기본순서</h1>
<ol>
<li>constructor</li>
<li>render</li>
<li>componentDidMount (ex: 데이터를 받는 fetch함수와 setState함수가 있을경우)</li>
<li>(fetch 완료)</li>
<li>render</li>
<li>(setState)</li>
<li>componentDidUpdate (setState가 되었기 때문에 업데이트 발생)</li>
<li>componentWillUnmount</li>
</ol>
<h1 id="lifecycle-api">LifeCycle API</h1>
<h2 id="🔹constructor">🔹constructor</h2>
<pre><code class="language-jsx">constructor(props){
super();
this.state = { 
    data:[]
    }
}</code></pre>
<ul>
<li>컴포넌트가 생성될 때 단 한번 만실행된다.</li>
<li>초기 state를 정의 할 수 있다.<br>

</li>
</ul>
<h2 id="🔹render">🔹render</h2>
<ul>
<li>컴포넌트 렌더링을 담당한다.<br>

</li>
</ul>
<h2 id="🔹componentdidmount">🔹componentDidMount</h2>
<pre><code class="language-jsx">componentDidMount(){
// 컴포넌트에서 필요한 데이터 요청
// 외부라이브러리 연동
// dom에 관련된 작업
};</code></pre>
<ul>
<li><p>컴포넌트가 만들어지고 <code>render</code> 가 호출 된 이후에 호출된다.</p>
</li>
<li><p>필요한 데이터를 axios, fetch 를 통해서 AJAX요청을  할 때,  외부 라이브러리를 연동할 때 , DOM에 관련된 작업(ex: 스크롤 설정)을 할 때 사용한다.</p>
<br>
## 🔹componentDidUpdate
</li>
<li><p>컴포넌트가 setState로 업데이트 되고 리렌더링을 마친 후에 실행된다.</p>
<br>
## 🔹componentWillUnmount

</li>
</ul>
<pre><code class="language-jsx">componentWillUnmount(){
    console.log(&quot;componentWillUnmount&quot;);
}</code></pre>
<ul>
<li>컴포넌트가 DOM에서 사라진 후 실행된다.</li>
<li>컴포넌트 제거<br>
<br>
📚**Reference**</li>
<li><a href="https://velopert.com/1130">LifeCycle</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL.React- component]]></title>
            <link>https://velog.io/@dev_hyemi/React-component</link>
            <guid>https://velog.io/@dev_hyemi/React-component</guid>
            <pubDate>Thu, 22 Apr 2021 14:43:11 GMT</pubDate>
            <description><![CDATA[<h1 id="component란">component란?</h1>
<blockquote>
<p>React에 재활용가능한 UI단위</p>
</blockquote>
<h2 id="왜-component를-쓰는가">왜 component를 쓰는가?</h2>
<ul>
<li>재활용하여 사용할 수 있다.</li>
<li>코드 유지보수에 좋다.</li>
<li>해당 페이지가 어떻게 구성되어 있는지 한 눈에 파악하기 좋다.</li>
<li>컴포넌트는 또 다른 컴포넌트를 포함할 수 있다. (부모 컴포넌트 - 자식 컴포넌트)</li>
</ul>
<hr>
<br>

<blockquote>
<p>React의 컴포넌트를 만드는 방법에는 Class 컴포넌트와 함수 컴포넌트가 있다. </p>
</blockquote>
<h1 id="class-component">Class component</h1>
<p><img src="https://images.velog.io/images/dev_hyemi/post/936a9a8d-56e9-4805-aefd-5371007bf1f0/image.png" alt=""></p>
<ul>
<li>리액트에서 제공하는 클래스컴포넌트를 를 상속하여 만든다.</li>
<li>컴포넌트 안에 들어있는 data를 담고있는 <strong>state 객체</strong> 와 ui를 나타내는 <strong>render 함수</strong>로 이루어져 있다.</li>
<li>컴포넌트에 상태가 있고, 주기적으로 업데이트 되어야 한다면 클래스 컴포넌트</li>
<li>상태에 따른 (Dom tree에 올라갔거나, 나왔을 때, 컴포넌트가 업데이트 되었을 때, 등등)life cycle method 가 있다.</li>
</ul>
<h1 id="함수형-component">함수형 component</h1>
<p><img src="https://images.velog.io/images/dev_hyemi/post/98919c88-8535-4620-8fd3-efb0c3b9a6f1/image.png" alt=""></p>
<ul>
<li>함수로 컴포넌트를 만든다.</li>
<li>상태가 없고 정적으로 데이터가 표기가 된다면 간단하게 만들기 함수형을 만드는 방법이 있다.</li>
<li>state 오브젝트가 따로 없고 라이프사이클 메소드가 없다.
→ 그렇기 때문에 16.8 버전부터는  <strong>React Hook</strong>이라는 개념이 도입되었다. hook을 통해서 함수형 컴포넌트에서 state도 가질 수 있고 life cycle method 도 사용할 수있다.</li>
</ul>
<h3 id="why-function-component">Why function component?</h3>
<ul>
<li>기존 스크립팅 언어를 사용하는 개발자나, 디자이너와 협업시에 클래스를 이해하는데 의 개념은 어려움을 겪었다.</li>
<li>멤버 변수에 접근할 때, this 바인딩 이슈가 생긴다.</li>
<li>클래스 컴포넌트에는 라이프사이클 등의 세부적으로 함수들이 나누어져 있어서, 중복되는 코드들을 작성하게 되었었는데, react hook을 쓰면서 중복된 것을 줄일 수 있어졌다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL.React Tool]]></title>
            <link>https://velog.io/@dev_hyemi/React-Tool</link>
            <guid>https://velog.io/@dev_hyemi/React-Tool</guid>
            <pubDate>Sun, 18 Apr 2021 14:36:05 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>React 프로젝트를 진행하기 위한 작업환경을 세팅에 필요한 Tool에 대해서 알아보려고 한다.</p>
</blockquote>
<h2 id="nodejs">Node.js</h2>
<blockquote>
<p>자바스크립트를 실행할 수 있는 환경</p>
</blockquote>
<ul>
<li>어느 곳에서나 자바스크립트로 프로그래밍이 가능하게 하는 프레임워크</li>
<li>백엔드 서버를 만들 때도 쓰고, 서버사이드 렌더링 할 때도 이용하고, 스크립트를 만들때도 쓰인다.</li>
</ul>
<h2 id="npm-node-package-manager">npm (node package manager)</h2>
<blockquote>
<p>패키지(외부 라이브러리) 매니저</p>
</blockquote>
<ul>
<li>node.js 를 설치하면 자동적으로 설치 되는 것인데, 패키지(외부 라이브러리)를 설치/관리할 수 있는 패키지 매니저이다.</li>
<li>npm을 이용하면 간단하게 명령어 하나로 라이브를 설치할 수 있고, 버전을 업데이트하거나 삭제할 수 있다.</li>
<li>npm을 이용하면 package.json이라는 파일이 생기는데, 그 안에는 우리가 쓰고 있는 외부 라이브러리들과 그들의 버전의 정보가 담겨있다.</li>
</ul>
<h2 id="npx">npx</h2>
<blockquote>
<p>패키지 실행 도구</p>
</blockquote>
<ul>
<li>패키지(외부 라이브러리)를 실행할 수 있게 도와주는 도구</li>
</ul>
<h2 id="cra-creat-react-app">CRA (Creat-React-App)</h2>
<blockquote>
<p>리액트 프로젝트를 시작하는데 필요한 환경을 세팅 해주는 도구(toolchain)</p>
</blockquote>
<ul>
<li>CRA는 react 배우기에 간편한 환경입니다.  이것은 개발 환경을 설정하고, 최신 자바스크립트를 사용하게 해주며, 좋은 개발 경험과 프로덕션 앱 최적화를 해줍니다. (출처: <a href="https://ko.reactjs.org/docs/create-a-new-react-app.html#more-flexible-toolchains">리액트 공식페이지</a>)</li>
<li>CRA에는 바벨과 웹팩과 같이 리액프 애플리케이션 실행에 필요한 다양한 패키지가 포함되어 있으며, 테스트 시스템, ES6+ 문법, CSS 후처리 등의 개발 환경을 구축해 준다.</li>
</ul>
<h2 id="웹팩">웹팩</h2>
<blockquote>
<p>소스코드 번들링 라이브러리</p>
</blockquote>
<ul>
<li>여러개로 나누어져 있는 파일들을 하나의 자바스크립트 코드로 압축하고 최적화하는 라이브러리</li>
<li>의존성을 분석해 모듈을 번들(여러 개를 하나로 묶어주는)시켜주는 역할을 한다.</li>
</ul>
<h2 id="바벨">바벨</h2>
<blockquote>
<p>코드 컴파일러</p>
</blockquote>
<ul>
<li>타입스크립트나 JSX처럼 순수 자바스크립트가 아닌 것들을 변환해주거나 최신 자바스크립트 문법을 구형 브라우저에서도 이해할 수 있는 소스코드로 변환해주는 코드 컴파일러</li>
</ul>
<h2 id="jest">Jest</h2>
<blockquote>
<p>유닛테스트를 할 수 있도록 해주는 프레임워크</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL.What's React?]]></title>
            <link>https://velog.io/@dev_hyemi/Whats-React-pxzizh3m</link>
            <guid>https://velog.io/@dev_hyemi/Whats-React-pxzizh3m</guid>
            <pubDate>Thu, 15 Apr 2021 13:38:21 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>React가 무엇인지,  중요한 컨셉은 무엇인지 정리해보려고 한다.</p>
</blockquote>
<h1 id="whats-react">What&#39;s React</h1>
<ul>
<li>UI를 만들 수 있는 <strong>자바스크립트 라이브러리</strong>이다.</li>
<li><strong>Component</strong> 로 이루어진 UI 라이브러리 이다.</li>
<li>재사용 가능한 Component를 모아서 원하는 웹 어플리케이션을 만들 수 있다.</li>
<li>리액트는 <strong>가상돔(Virtual Dom)</strong>을 통해 UI를 빠르게 업데이트 한다 .</li>
</ul>
<br>

<h3 id="가상-돔virtual-dom">가상 돔(Virtual DOM)</h3>
<ul>
<li>변화가 많은 View를 실제 DOM에서 처리하는 방식이 아닌 Virtual DOM과 메모리에서 미리 처리하고 저장한 후 , 실제 변화가 일어난 부분만 연산을해서 실제 DOM과 동기화 하는 프로그래밍 개념이다.</li>
</ul>
<br>


<h2 id="프레임워크-vs-라이브러리">프레임워크 vs 라이브러리</h2>
<h3 id="span-stylebackground-colorlightgrey-프레임워크span"><span style="background-color:lightgrey"> 프레임워크</span></h3>
<ul>
<li><p>정해진 골격 안에서 원하는 기능을 구현 해야한다.</p>
</li>
<li><p>UI뿐만아니라 라우팅, 스테이트 등을 관리할 수 있는 방식 등 다양한 기능들이 한번에 묶여져서 제공되는 것.</p>
</li>
<li><p>많이 쓰이는 프론트엔드 웹어플리케이션 프레임워크로 Agular, Vue 가 있다.</p>
<h3 id="span-stylebackground-colorlightgrey-라이브러리span"><span style="background-color:lightgrey"> 라이브러리</span></h3>
</li>
<li><p>프레임워크와 달리, ui를 담당하는 라이브러리 / 라우팅을 담당하는 라이브러리 처럼 구현하고자 하는 기능들이 작은 단위로 구현한 것.</p>
</li>
<li><p>따로 정해진 골격이 없기 때문에 원하는 구조의 골격을 만들어 나갈 수 있다.</p>
</li>
</ul>
<br>

<h1 id="component란">Component란?</h1>
<blockquote>
<p>한 가지의 기능을 수행하는 ui의 단위</p>
</blockquote>
<p><img src="https://images.velog.io/images/dev_hyemi/post/3c5942ab-e03a-4125-b3dd-93864b380da3/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-04-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.39.42.png" alt=""></p>
<ul>
<li>React에서 제공하는 컴포넌트라는 클래스를 상속하여 사용한다.</li>
<li>컴포넌트 안에는 이 컴포넌트 안에 들어있는 데이터를 담고있는 <strong>State 객체</strong>와 사용자에게 UI를 표기하는 <strong>render 함수</strong>가 있다.</li>
<li>State 의 상태가 변경되면 render 함수가 다시 호출되면서 UI를 업데이트 해준다.</li>
<li>Component의 가독성이 매우 높고 간단하여 쉬운 유지보수, 간편한 UI 수정 및 재사용이 용이하다.</li>
</ul>
<h1 id="why-react">Why React</h1>
<ul>
<li>페이스북에서 만들어진 이후로 강력한 커뮤니티가 형성 되어있고 때문에 문서화가 잘 되어 있다.</li>
<li>페이스북의 지속적인 관리와 함께 생태계가 활성화 되어 있으며 다양한 자료가 존재한다.</li>
</ul>
<h1 id="✅-react-의-중요한-컨셉">✅ React 의 중요한 컨셉</h1>
<ul>
<li><p>React는 데이터가 변경 될 때마다 어플리케이션 전체를 다시 렌더링하여 <strong>UI를 자동으로 업데이트</strong> 해준다.
→ 데이터가 변경되는 부분에 대해서 한 번만 정리 해놓으면 React가 알아서 상태가 변경되면 render 함수를 다시 호출해주기 때문에 다시 해당하는 부분을 업데이트 해야되는 걱정을 하지 않아도 된다. </p>
</li>
<li><p>React 내부에서 <strong>가상의 돔(Virtual DOM)</strong>트리를 메모리에 보관해 놓고 있기 때문에 업데이트가 일어날 때마다 이전의 트리와 비교해서 돔트리를 업데이트 하기때문에 성능을 보장할 수 있다.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. 동기 / 비동기]]></title>
            <link>https://velog.io/@dev_hyemi/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0</link>
            <guid>https://velog.io/@dev_hyemi/%EB%8F%99%EA%B8%B0-%EB%B9%84%EB%8F%99%EA%B8%B0</guid>
            <pubDate>Tue, 13 Apr 2021 14:06:08 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/dev_hyemi/post/93b03b17-52d5-419b-9dfc-d709d64c8cb8/%E1%84%87%E1%85%B5%E1%84%83%E1%85%A9%E1%86%BC%E1%84%80%E1%85%B5%20%E1%84%83%E1%85%A9%E1%86%BC%E1%84%80%E1%85%B5.png" alt=""></p>
<p><a href="https://learnjs.vlpt.us/async/">이미지출처</a> </p>
<h1 id="동기">동기</h1>
<blockquote>
<p>동기는 <strong>데이터의 요청과 결과가 한 자리에서 동시에 일어난다.</strong> 간딘히 말해 사용자가 데이터를 서버에게 요청한다면 그 서버가 데이터 요청에 따른 응답을 사용자에게 다시 리턴해주기 전까지 사용자는 다른 활동을 할 수 없으며 기다려야 한다.</p>
</blockquote>
<ul>
<li>장점 : 설계가 매우 간단하고 직관적이다.</li>
<li>단점 : 요청에  따른 결과가 반환되기 전까지 아무것도 못하고 대기해야한다.<br>
<br>

</li>
</ul>
<h1 id="비동기">비동기</h1>
<blockquote>
<p>비동기는 데이터의 요청과 결과가 동시에 일어나지 않는다. 서버에게 데이터를 요청한 후 요청에 따른 응답을 계속 기다리지 않아도 되며 다른 외부 활동을 수행하여도되고 서버에게 다른 요청사항을 보내도 된다.</p>
</blockquote>
<ul>
<li>장점 : 요청에 따른 결과가 반환되는 시간동안 다른 작업을 수행할 수 있으며, 자원을 효율적으로 사용할 수 있다.</li>
<li>단점 : 동기보다 설계가 복잡하다.</li>
</ul>
<p>다음과 같은 작업들은 주로 비동기적으로 처리한다</p>
<ul>
<li><strong>Ajax Web API 요청</strong> : 서버쪽에서 데이터를 받아와야 할 때는, 요청을 하고 서버에서 응답을 할 때 까지 대기를 해야 되기 때문에 작업을 비동기적으로 처리한다.</li>
<li><strong>파일 읽기</strong> : 주로 서버 쪽에서 파일을 읽어야 하는 상황에는 비동기적으로 처리한다.</li>
<li><strong>암호화/복호화</strong> : 암호화/복호화를 할 때에도 바로 처리가 되지 않고, 어느정도 시간이 걸리는 경우가 있기 때문에 비동기 적으로 처리한다.</li>
<li><strong>작업 예약</strong> : 단순히 어떤 작업을 몇 초 후에 동작해야 하는 상황에는 setTimeout 을 사용하여 비동기 처리한다.</li>
</ul>
<blockquote>
<p>자바스크립트에서 비동기 프로그래밍을 하기 위해서 <strong>callback 함수</strong> , <strong>Promise</strong>, <strong>async/await</strong> 라는 문법을 사용한다.</p>
</blockquote>
<br>
<br>

<p>📚<strong>Reference</strong></p>
<ul>
<li><a href="https://juyeop.tistory.com/22">동기와 비동기에 대해서</a></li>
<li><a href="https://learnjs.vlpt.us/async/">자바스크립트에서 비동기 처리 다루기</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. REST API]]></title>
            <link>https://velog.io/@dev_hyemi/REST-API</link>
            <guid>https://velog.io/@dev_hyemi/REST-API</guid>
            <pubDate>Sun, 21 Mar 2021 23:10:39 GMT</pubDate>
            <description><![CDATA[<h1 id="rest란">REST란?</h1>
<p>REpresentational State Transfer의 약자로 전반적인 웹 어플리케이션에서 상호작용하는데 사용되는 웹 아키텍쳐 모델이다. 즉, <strong>자원을 주고받는 웹 상에서의 통신 체계에 있어서 범용적인 스타일을 규정한 아키텍쳐</strong></p>
<h1 id="api란">API란?</h1>
<p>Application Programming Interface의 약자로 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 하는 것. </p>
<p>API를 통해 소스 및 DB에는 접근하지 못하게 하고 해당 프로그램을 사용할 수 있도록 기능을 제공하게 하는 것.</p>
<h1 id="rest의-특징들">REST의 특징들</h1>
<h3 id="균등한-인터페이스-uniform-interface">균등한 인터페이스 (Uniform Interface)</h3>
<ul>
<li>REST는 HTTP 표준만 따른다면, 어떠한 기술이든 사용이 가능한 인터페이스 스타일이다.</li>
</ul>
<h3 id="무상태성-stateless">무상태성 (Stateless)</h3>
<ul>
<li>서버는 클라이언트의 상황을 고려하지 않고 API 요청에 대해서만 처리하기 때문에 이를 &quot;상태가 없다&quot;라고 표현한다.</li>
</ul>
<h3 id="캐싱-가능-cacheable">캐싱 가능 (Cacheable)</h3>
<ul>
<li>HTTP 표준을 기반으로 만들어졌기 때문에 HTTP의 특징인 캐싱을 사용할 수 있다. 이렇게 캐시를 사용하게 되면 네트워크 응답시간 뿐만 아니라,  REST 컴포넌트가 위치한 서버에 트랜젝션을 발생시키지 않아, 응답시간과 성능 그리고 서버의 자원 사용률의 부담을 덜 할 수 있다.</li>
</ul>
<h3 id="자체-표현성-self-descriptiveness">자체 표현성 (Self-Descriptiveness)</h3>
<ul>
<li>REST API의 자원명시 규칙 및 메소드는 그 자체로 의미를 지니기 때문에 요청에 있어서 그 요청 자체로 어떤 것을 표현하는지 알아보기 쉽다.</li>
</ul>
<h3 id="클라이언트-서버-구조client-server-architecture">클라이언트-서버 구조(Client-Server Architecture)</h3>
<ul>
<li>REST 서버가 API를 제공하는 방식이기 때문에 클라이언트에서 처리하는 부분과 독립적으로 동작하기 때문에 서로간의 의존성이 줄어들어, 최대한 독립적으로 개발할 수 있도록 도와준다.</li>
</ul>
<h3 id="계층형-구조-layered-system">계층형 구조 (Layered System)</h3>
<ul>
<li>서버는 클라이언트가 모르게 API 서버에 여러 계층(사용자인증, 암호화 등)을 추가하여 유연한 구조로 개발 될 수 있다.</li>
</ul>
<p>→ 이러한 특징들을 잘 지켜서 디자인을 한 것을 Restful 하다고 할 수 있다.</p>
<h1 id="rest-api란">REST API란?</h1>
<blockquote>
</blockquote>
<p>HTTP URI를 통해 자원을 명시하고, HTTP Method를 통해 해당 자원에 대한 CRUD를 적용하는 것을 의미한다. </p>
<blockquote>
<p>한마디로, <strong>별도의 설명없이 명시적으로 구분 가능한 API</strong>를 말한다.</p>
</blockquote>
<br>

<h3 id="참고-http-method의-알맞은-역할">[참고] HTTP Method의 알맞은 역할</h3>
<p>HTTP Method(POST, GET, PUT, DELETE) 를 가지고 자원을 CRUD를 할 수 있다.</p>
<ul>
<li>Create(생성)</li>
<li>Read(조회)</li>
<li>Update(수정)</li>
<li>Delete(삭제)<br>

</li>
</ul>
<p>📚 <strong>Reference</strong></p>
<ul>
<li><a href="https://velog.io/@taylorkwon92/REST-API%EB%9E%80">REST API란</a></li>
<li><a href="https://meetup.toast.com/posts/92">REST API 제대로 알고 사용하기</a></li>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/network/rest-api.md">REST API</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL.MVC]]></title>
            <link>https://velog.io/@dev_hyemi/mvc</link>
            <guid>https://velog.io/@dev_hyemi/mvc</guid>
            <pubDate>Thu, 18 Mar 2021 12:06:15 GMT</pubDate>
            <description><![CDATA[<h2 id="mvc란">MVC란?</h2>
<blockquote>
<p>Model, View, Controller의 합성어로 소프트웨어 공학에서 상용되는 소프트웨어 디자인패턴.
애플리케이션을 세가지의 역할로 구분한 개발 방법론.</p>
</blockquote>
<p>** 디자인 패턴
: 프로그램 개발에서 자주 나타나는 문제를 해결하기 위한 방법 중 하나로, 개발 과정 중 발견된 설계의 노하우를 재사용하기 좋은 형태로 특정 규약을 묶어서 정리한 것.</p>
<h3 id="model">Model</h3>
<ul>
<li>애플리케이션의 정보/데이터를 나타내며, 백그라운드에서 동작하는 로직을 처리한다.</li>
</ul>
<h3 id="view">View</h3>
<ul>
<li>사용자가 보게 될 결과 화면을 출력한다.</li>
<li>데이터를 기반으로 사용자들에게 보여주는 화면을 나타낸다.</li>
</ul>
<h3 id="controller">Controller</h3>
<ul>
<li>데이터와 사용자 인터페이스 요소를 컨트롤 한다.</li>
<li>사용자가 접근한 URL에 따라서 사용자의 요청을 파악한 후, 그 요청에 맞는 데이터를 Model에 보내고, 그 데이터를 View에 반영해서 사용자에게 알려준다.</li>
</ul>
<p><img src="https://images.velog.io/images/dev_hyemi/post/db8eeac5-89f7-4e56-b4b7-3c3f6ea206d5/mvc.png" alt=""></p>
<h3 id="web과-mvc">Web과 MVC</h3>
<p>mvc의 개념을 웹에 적용해보자!</p>
<ol>
<li>사용자가 웹사이트에 접속한다.</li>
<li>Controller는 사용자가 요청한 웹페이지를 서비스 하기 위해서 모델을 호출한다.</li>
<li>Model은 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.</li>
<li>Controller는 Model이 리턴한 결과를 View에 반영한다.</li>
<li>데이터가 반영된 View는 사용자에게 보여진다. </li>
</ol>
<h3 id="정리하자면">정리하자면!</h3>
<blockquote>
<p> Model 은 <strong>무엇</strong>을 할지 정의한다. 
-비즈니스 로직에서의 알고리즘, 데이터 등의 기능을 처리한다.
Controller 는 <strong>어떻게</strong> 할지를 정의한다.
 -요청을 받아서 Model과 View를 연결시켜주는 역할을 한다.
View 는 <strong>무엇을 화면으로 보여주는</strong> 역할을 한다.
 -웹이라면 웹페이지, 모바일이라면 어플의 화면의 보여지는 부분이다.</p>
</blockquote>
<p> 📚Reference</p>
<ul>
<li><a href="https://opentutorials.org/course/697/3828">MVC 디자인 패턴</a></li>
<li><a href="https://medium.com/@jang.wangsu/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-mvc-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80-1d74fac6e256">[아키텍처 패턴] MVC 패턴이란?</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. HTTP-요청 메소드/응답 코드]]></title>
            <link>https://velog.io/@dev_hyemi/HTTP-%EC%9A%94%EC%B2%AD%EB%A9%94%EC%86%8C%EB%93%9C-%EC%9D%91%EB%8B%B5%EC%BD%94%EB%93%9C</link>
            <guid>https://velog.io/@dev_hyemi/HTTP-%EC%9A%94%EC%B2%AD%EB%A9%94%EC%86%8C%EB%93%9C-%EC%9D%91%EB%8B%B5%EC%BD%94%EB%93%9C</guid>
            <pubDate>Tue, 02 Mar 2021 14:15:01 GMT</pubDate>
            <description><![CDATA[<h1 id="request-methods">Request Methods</h1>
<blockquote>
<p>자주 사용되는 HTTP 통신 메소드 &#39;GET, POST, DELETE&#39; 의 대해서 알아보자. 
해당 메소드는 클라이언트의 입장의 요청의 의도가 담긴 것이다.</p>
</blockquote>
<h3 id="get">GET</h3>
<ul>
<li>데이터를 서버로 부터 받아 올 때 주로 사용하는 메소드</li>
<li>데이터를 받아오기만 할 때 사용된다.</li>
<li>가장 간단하고 빈번히 사용되는 HTTP 메소드<ul>
<li>ex) 장바구니에 담은 제품을 조회한다.</li>
</ul>
</li>
</ul>
<h3 id="post">POST</h3>
<ul>
<li>데이터를 생성 / 수정 할 때 주로 사용되는 메소드</li>
<li>데이터를 생성 및 수정 할 때 많이 사용 되기 때문에 대부분의 경우 요청의 body 부분에 포함되서 보내진다.<ul>
<li>ex) 장바구니에 맘에 드는 상품을 담는다.</li>
</ul>
</li>
</ul>
<h3 id="delete">DELETE</h3>
<ul>
<li>특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드</li>
</ul>
<h3 id="기타-이외의-method">&gt; 기타 이외의 Method</h3>
<h3 id="put">PUT</h3>
<ul>
<li>기존 존재하는 데이터에 대한 변경, 갱신 할 때 사용되는 메소드</li>
</ul>
<h3 id="option">OPTION</h3>
<ul>
<li>서버 옵션들을 확인하기 위한 요청 할 때 사용되는 메소드. CORS에서 사용<br>

</li>
</ul>
<h1 id="response-status-code">Response Status Code</h1>
<blockquote>
<p>응답 상태를 알려주는 코드. 
HTTP 응답 메세지 Status Line에 &#39;Status Code  : Status Text&#39; 로 표기된다.
Status Code만 보아도 응답이 제대로 됐는지 안 됐는지 파악할 수 있다.</p>
</blockquote>
<p>응답 코드는 5개의 클래스(분류)로 구분된다.</p>
<ul>
<li><strong>1xx (정보)</strong>: 요청을 받았으며 프로세스를 계속한다</li>
<li><strong>2xx (성공)</strong>: 요청을 성공적으로 받았으며 인식했고 수용하였다</li>
<li><strong>3xx (리다이렉션)</strong>: 요청 완료를 위해 추가 작업 조치가 필요하다</li>
<li><strong>4xx (클라이언트 오류)</strong>: 요청의 문법이 잘못되었거나 요청을 처리할 수 없다</li>
<li><strong>5xx (서버 오류)</strong>: 서버가 명백히 유효한 요청에 대해 충족을 실패했다<br>

</li>
</ul>
<blockquote>
<p>💡 <strong><em>주요  status code에 대해서 알아보자!</em></strong></p>
</blockquote>
<h3 id="200-ok">200: OK</h3>
<ul>
<li>가장 자주 보게되는 Status Code</li>
<li>문제없이 요청에 대한 처리가 서버에서 이루어지고 나서 오는 응답코드</li>
</ul>
<h3 id="201-created">201: Created</h3>
<ul>
<li>무언가가 잘 생성되었을 때에(Successfully Created) 오는 Status Code</li>
<li>대게 POST 메소드의 요청에 따라 서버에 데이터가 잘 생성 또는 수정 되었을 때에 보내는 코드</li>
</ul>
<h3 id="400-bad-request">400: Bad Request</h3>
<ul>
<li>해당 요청이 잘못되었을 때 보내는 Status Code</li>
<li>주로 요청의 Body에 보내는 내용이 잘못되었을 때 사용되는 코드 
ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 대신 Body에 담겼을 경우</li>
</ul>
<h3 id="401-unauthorized">401: Unauthorized</h3>
<ul>
<li>유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요하다는 의미 
ex) wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없음</li>
</ul>
<h3 id="403-forbidden">403: Forbidden</h3>
<ul>
<li>유저가 해당 요청에 대한 권한이 없다는 뜻</li>
<li>접근 불가능한 정보에 접근했을 경우
ex) 오직 유료회원만 접근할 수 있는 데이터를 요청 했을 때</li>
</ul>
<h3 id="404-not-found">404: Not Found</h3>
<ul>
<li>요청된 URI 가 존재하지 않는다는 의미</li>
</ul>
<h3 id="500-internal-server-error">500: Internal Server Error</h3>
<ul>
<li>서버에서 에러가 났을 때의 Status Code</li>
</ul>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Status">보다 더 자세한 HTTP Response Status Codes MDN link</a>
<br></p>
<p>📚 <strong>Reference</strong></p>
<ul>
<li>wecode</li>
<li><a href="https://ychae-leah.tistory.com/83">https://ychae-leah.tistory.com/83</a></li>
<li><a href="https://joshua1988.github.io/web-development/http-part1/">https://joshua1988.github.io/web-development/http-part1/</a></li>
<li><a href="https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C">https://ko.wikipedia.org/wiki/HTTP_상태_코드</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. HTTP- Request / Response]]></title>
            <link>https://velog.io/@dev_hyemi/HTTP-Request-Response</link>
            <guid>https://velog.io/@dev_hyemi/HTTP-Request-Response</guid>
            <pubDate>Mon, 01 Mar 2021 07:53:34 GMT</pubDate>
            <description><![CDATA[<h2 id="request요청-메세지의-구조">Request(요청) 메세지의 구조</h2>
<blockquote>
<p>HTTP 요청은 클라이언트와 서버 사이에서 데이터 처리를 시작하게 하기 위해 보내는 메세지이다. 
 이 메세지의 구조는 크게 세 부분으로 구성되어있다</p>
</blockquote>
<p><img src="https://images.velog.io/images/dev_hyemi/post/693f3a83-355d-4f84-8b3d-d1840906ab1b/http%20request.png" alt=""></p>
<h3 id="1-start-line">1. Start Line</h3>
<pre><code> 1) HTTP Method : 해당 요청이 액션을 정의 하는 부분. GET, POST, DELETE
 2) Request target : 해당 요청이 전송되는 목표 url
 3) HTTP version : HTTP 버전. 주로 1.1 버전이 널리 쓰임

ex)
GET/login HTTP/1.1
해석 : GET 메소드로 login 이라는 요청 타겟에 http 1.1 버전으로 요청을 보내겠다!</code></pre><h3 id="2-headers">2. Headers</h3>
<ul>
<li>요청 그 자체에 대한 정보를 담고 있다.</li>
<li>파이썬 딕셔너리 형태 처럼 <code>Key : Value</code> 값으로 되어있다.<ul>
<li>Header 정보<ul>
<li><strong>Host</strong> :  요청을 보내는 타겟의 URL 주소. 즉, 요청을 보내는 웹사이트 주소</li>
<li><strong>User-Agent</strong> : 요청을 보내는 클라이언트의 대한 정보 (ex.chrome, safari .....)</li>
<li><strong>Accept</strong> :<ul>
<li>해당 요청이 받을 수 있응 응답 body 데티어 타입 정보</li>
<li>모든 타입을 허용하는 경우  <code>*/*</code> 로 지정</li>
</ul>
</li>
<li>Connection :<ul>
<li>해당 요청이 끝난 후에 클라이언트와 서버간의 연결을 계속 유지할 것인지 끊을 것인지 알려주는 정보</li>
<li>HTTP 요청 때마다 네트워크 연결을 새로 만드는 건 번거롭기 때문에 요청이 계속되는 한 처음 연결을 재사용하는 것이 바람직하다.</li>
<li><code>keep-alive</code>  : 네트워크 연결을 유지해라</li>
<li><code>close</code>: 더 이상 요청을 보내지 않으니 연결을 닫아라</li>
</ul>
</li>
<li><strong>Content-Type</strong> : HTTP 요청이 보내지는 body 타입 (ex. application/json</li>
<li><strong>Content-Length</strong> : body 내용의 길이</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="3-body">3. Body</h3>
<ul>
<li>HTTP 요청이 전송하는 데이터를 담고 있는 부분</li>
<li>전송하는 데이터가 없다면 body 부분은 비어있다.</li>
</ul>
<h2 id="response응답-메세지-구조">Response(응답) 메세지 구조</h2>
<blockquote>
<p>이 메세지 또한 세 부분으로 구성되어있다.</p>
</blockquote>
<p><img src="https://images.velog.io/images/dev_hyemi/post/86946756-7b92-49b3-813a-e0013794c769/http%20response%20.png" alt=""></p>
<h3 id="1-status-line">1. Status Line</h3>
<p>: 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작한다.</p>
<p>1) HTTP Version : 요청의 HTTP 버전과 동일
2) Status Code : 응답 메세지의 상태 코드
3) Status Text : 응답 메세지의 상태를 간략하게 설명 해주는 텍스트</p>
<pre><code>ex) 
HTTP/1.1 404 Not Found
해석 : HTTP 1.1 버전으로 응답하고 있는데, 요청(ex.로그인시도)에 대해서 유저의 정보를 찾을수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.

HTTP/1.1 200 SUCCESS
해석 : HTTP 1.1 버전으로 응답하고 있는데, 요청에 대해서 성공했기 때문에 200 상태 메세지를 보낸다.</code></pre><h3 id="2-headers-1">2. Headers</h3>
<ul>
<li>HTTP 요청 메세지의 헤더와 동일</li>
<li>단 User-Agent 헤더 대신 <strong>Sever 헤더</strong>가 사용된다.</li>
</ul>
<h3 id="3-body-1">3. Body</h3>
<ul>
<li><p>HTTP 요청의 body와 동일</p>
</li>
<li><p>전송하는 데이터가 없으면 비어 있다.</p>
<br>

</li>
</ul>
<h4 id="📚-reference">📚 Reference</h4>
<ul>
<li>wecode</li>
<li><a href="https://ychae-leah.tistory.com/82">https://ychae-leah.tistory.com/82</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. HTTP-정의,특징]]></title>
            <link>https://velog.io/@dev_hyemi/HTTP</link>
            <guid>https://velog.io/@dev_hyemi/HTTP</guid>
            <pubDate>Sun, 28 Feb 2021 12:17:04 GMT</pubDate>
            <description><![CDATA[<h2 id="httphypertext-transfer-protocol-란">HTTP(HyperText Transfer Protocol) 란?</h2>
<blockquote>
<p>하이퍼텍스트 문서를 교환하기 위하여 사용된 통신규약 이다. 즉, <strong>인터넷에서 데이터를 주고받을 수 있는 통신규약</strong>이다. 이렇게 규칙을 정해두었기 때문에, 모든 프로그램이 이 규약에 맞춰 개발해서 정보를 교환할 수 있게 되었다.</p>
</blockquote>
<p><img src="https://images.velog.io/images/dev_hyemi/post/745ce983-44b0-4886-82b6-b101a75404b2/http-full-structure.png" alt=""></p>
<h2 id="http의-두가지-특징">HTTP의 두가지 특징</h2>
<h3 id="1-request--response-요청--응답">1. Request / Response (요청 / 응답)</h3>
<ul>
<li><h2 id="http-통신의-핵심은-요청과-응답이다-보내는-주체는-받는-주체에게-요청을-보내고-받는-주체는-요청을-보낸-주체에게-응답을-보낸다">HTTP 통신의 핵심은 요청과 응답이다. 보내는 주체는 받는 주체에게 요청을 보내고, 받는 주체는 요청을 보낸 주체에게 응답을 보낸다.</h2>
<h3 id="2-stateless">2. Stateless</h3>
<ul>
<li><p>각각의 HTTP 통신은 독립적이기 때문에 과거의 통신(요청/응답)에 대한 내용(이전 상태)을 전혀 알지 못한다. 그렇기 때문에 <strong>매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 한다.</strong> </p>
<p>따라서, 만일 여러번의 통신의 진행과정에서 연속된 데이터가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능)를 위해 로그인 토큰 또는 브라우저의 쿠키,세션, 로컬스토리지 같은 기술이 필요에 의해 만들어 졌다.</p>
<br>

</li>
</ul>
</li>
</ul>
<h4 id="📚-reference">📚 Reference</h4>
<ul>
<li><a href="https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da">https://www.zerocho.com/category/HTTP/post/5b344f3af94472001b17f2da</a></li>
<li>wecode</li>
<li>이미지 : <a href="https://joshua1988.github.io/web-development/http-part1/">https://joshua1988.github.io/web-development/http-part1/</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. 브라우저 저장소- Local Storage/ Session Storage/ Cookie / IndexedDB]]></title>
            <link>https://velog.io/@dev_hyemi/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%A0%80%EC%9E%A5%EC%86%8C</link>
            <guid>https://velog.io/@dev_hyemi/%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%A0%80%EC%9E%A5%EC%86%8C</guid>
            <pubDate>Thu, 18 Feb 2021 07:17:00 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>브라우저에 데이터를 저장하는 데는 여러가지 종류가 있다. 
애플리케이션 정적 리소스(HTML,JavaScript, CSS, 이미지 등)나 데이터(사용자 데이터, 기사 글 등)를 저장해야하는 것들은 다양하다.</p>
</blockquote>
<h1 id="웹-스토리지web-storage">웹 스토리지(Web Storage)</h1>
<ul>
<li>기존 쿠키(cookie)의 문제점을 극복하기 위해 HTML5 부터 추가된 기능이다.</li>
<li><strong>Local Storage</strong>와 <strong>Session Storage</strong>가 있다. 두 스토리지의 차이점은 <strong>영구성</strong>이다.</li>
<li><strong>Key-Value 객체 형태</strong>로 데이터가 저장된다.</li>
</ul>
<h2 id="로컬-스토리지-local-storage">로컬 스토리지 (Local Storage)</h2>
<ul>
<li><strong>브라우저를 종료해도 유지되는 데이터로, 명시적으로 지우지 않는 이상 영구적으로 저장</strong>된다.</li>
<li><strong>도메인별</strong>로 생성되며, 다른 도메인의 로컬 스토리지에는 접근이 불가능하다.</li>
<li><strong>지속적으로 필요한 정보</strong>를 저장하기에 좋다. (ex. 자동 로그인)</li>
</ul>
<h2 id="세션-스토리지-session-storage">세션 스토리지 (Session Storage)</h2>
<ul>
<li>윈도우나 브라우저 탭을 닫을 경우 제거 된다.</li>
<li>로컬 스토리지와 달리 <strong>윈도우/탭</strong> 별로 생성된다.</li>
<li>동일한 윈도우/탭이라도 다른 도메인이라면 또 다른 세션 스토리지가 생성된다. 서로 독립적으로 동작한다.</li>
<li><strong>잠시 동안 필요한 정보</strong>를 저장하기에 좋다. (ex. 일회성 로그인)</li>
</ul>
<h1 id="쿠키-cookie">쿠키 (Cookie)</h1>
<ul>
<li>로컬 스토리지와 세션 스토리지 이전에 사용되던 저장소 이다.</li>
<li>서버와 클라이언트 간의 지속적인 교환을 위해 만들어 졌기 때문에 <strong>*<em>웹사이트에서 쿠키를 설정하면 이후의 모든 웹 요청은 *</em>생성 될 때 마다 매번 서버에 전송 된다.</strong>  (크기가 클 경우 서버에 부담이 갈 수 있다.)</li>
<li>4KB까지 저장할 수 있는 용량 제한이 있다.</li>
<li>반 영구적으로 데이터 저장이 가능하다. 사용기간을 지정가능 하며 지정하게 되면 명시된 날짜에 삭제 되거나, 명시된 기간 이후에 삭제 된다. → <strong>시간 제한 설정 가능</strong>!</li>
</ul>
<h1 id="indexeddb">IndexedDB</h1>
<ul>
<li>localStorage보다 훨씬 더 많은 양의 데이터를 저장할 수 있다. 위의 스토리지들에 비해 코드가 복잡하다.</li>
<li>네트워크 가능여부에 상관 없이, 온라인과 오프라인 모두에서 동작할 수 있다.</li>
<li>많은 리소스를 저장할 때에 사용될 수 있다.</li>
</ul>
<p>reference</p>
<p><a href="https://it-eldorado.tistory.com/90">https://it-eldorado.tistory.com/90</a></p>
<p><a href="https://web.dev/storage-for-the-web/">https://web.dev/storage-for-the-web/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. JWT(JSON Web Token)]]></title>
            <link>https://velog.io/@dev_hyemi/JWT</link>
            <guid>https://velog.io/@dev_hyemi/JWT</guid>
            <pubDate>Sun, 24 Jan 2021 14:02:59 GMT</pubDate>
            <description><![CDATA[<h2 id="jwt란">JWT란?</h2>
<p>JSON Web Token의 약자로 전자 서명(어떤 데이터가 정말 그 사람의 것이 맞는지 보장해주는것) 된 속성 정보(Claim)를 JSON 데이터 구조로 표현한 토큰. </p>
<p>일반적으로 클라이언트와 서버, 서비스와 서비스 사이 통신 시 권한 인가(Authoriztion)를 위해 사용하는 토큰이다. URL에 대해 안전한 문자열로 구성되어 있기 때문에 HTTP 어디든 위치할 수 있다. </p>
<h2 id="jwt-는-어떤-상황에서-사용될까"><strong>JWT 는 어떤 상황에서 사용될까?</strong></h2>
<p>다음과 같은 상황에서 JWT 가 유용하게 사용 될 수 있습니다:</p>
<ul>
<li><strong>회원 인증:</strong>
유저가 로그인을 하면, 서버는 유저의 정보를 기반한 토큰을 발급하여 유저에게 전달해준다. 그 후,  유저가 서버에 요청을 할 때마다 JWT를 포함하여 전달한다. 서버가 클라이언트에게 요청을 받을 때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 유저가 요청한 작업에 권한이 있는지 확인한 후 작업을 처리한다.</li>
<li><strong>정보 교류</strong>: 
두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법니다. 그 이유는, 정보가 서명(sign)이 되어 있기 때문에 정보를 보낸이가 바뀌진 않았는지, 정보가 도중에 조작되지 않았는지 검증할 수 있다.</li>
</ul>
<h2 id="jwt의-구조">JWT의 구조</h2>
<p><img src="https://images.velog.io/images/dev_hyemi/post/c000118a-04c3-43ab-b253-d15b6c69288e/jwt.png" alt=""></p>
<h3 id="🔹헤더header">🔹헤더(header)</h3>
<p>Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다.</p>
<pre><code class="language-jsx">{
  &quot;typ&quot;: &quot;JWT&quot;,
  &quot;alg&quot;: &quot;HS256&quot;
}</code></pre>
<ul>
<li><strong>typ</strong> : 토큰의 타입</li>
<li><strong>alg</strong> : 해시 알고리즘. 해시 알고리즘은 토큰을 검증 할 때 사용되는 signature 부분에서 사용된다.</li>
</ul>
<h3 id="🔹내용payload">🔹내용(payload)</h3>
<ul>
<li>토큰에 담을 클레임(claim) 정보를 포함하고 있다.</li>
<li>여기에 담는 정보의 한 &#39;조각&#39;을 클레임(claim)이라고 부르고, 이는 name/valu의 한 쌍으로 이뤄져있다. 토큰에는 여러개의 클레임을 넣을 수 있다.<ul>
<li>등록된 (registered) 클레임</li>
<li>공개 (public) 클레임</li>
<li>비공개 (private) 클레임</li>
</ul>
</li>
</ul>
<h3 id="🔹서명signature">🔹서명(signature)</h3>
<p>서명(signature)은 헤더의 인코딩값과, 정보의 인코딩값을 합친 후 scret key를 포함하여 암호하되어 있다.</p>
<br>
<br>

<p><strong>📚 Reference</strong></p>
<p><a href="https://velopert.com/2389">[JWT] JSON Web Token 소개 및 구조</a></p>
<p><a href="https://meetup.toast.com/posts/239">JWT를 소개합니다. : TOAST Meetup</a></p>
<p><a href="http://www.opennaru.com/opennaru-blog/jwt-json-web-token/">JWT (JSON Web Token) 이해하기와 활용 방안 - Opennaru, Inc.</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Agile, Scrum]]></title>
            <link>https://velog.io/@dev_hyemi/Agile-scrum</link>
            <guid>https://velog.io/@dev_hyemi/Agile-scrum</guid>
            <pubDate>Fri, 22 Jan 2021 15:55:34 GMT</pubDate>
            <description><![CDATA[<h3 id="agile">Agile</h3>
<p>애자일 방법론은 소프트웨어 개발 방법에 있어서 아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점을 찾고자 하는 방법론이다.</p>
<p>애자일 개발 방법론은 계획을 통해서 주도해 나갔던 과거의 방법론과는 다르게 앞을 예측하며 개발을 하지 않고, 일정한 주기를 가지고 끊임없이 프로토 타입을 만들어 내며 그때 그때 필요한 요구를 더하고 수정하여 커다란 소프트웨어를 개발해 나가는 개발 프로세스라고 할 수 있다.</p>
<p>애자일 개발 프로세스란 어느 특정 개발 방법론을 가리키는 말은 아니고 <strong>&quot;애자일(Agile = 기민한, 좋은것을 빠르게 낭비없게 만드는 것) 개발을 가능하게 해주는 다양한 방법론 전체</strong>를 일컫는 말이다.</p>
<p>이 애자일 개발 프로세스 중 하나가 &#39;스크럼&#39; 인 것이다.</p>
<h3 id="scrum">Scrum</h3>
<p><img src="https://images.velog.io/images/dev_hyemi/post/a4318e26-6cc6-42c5-b07f-a45c2f2b3371/scrum.jpeg" alt=""></p>
<ul>
<li>애자일 소프트웨어 개발 방법론의 종류중 하나로 반복적이고 점진적인 개발방법</li>
<li>단기적인 계획을 단계적으로 짜는 것을 목표로하여 발생할 수 있는 오류를 최소화한다.</li>
<li>개발 주기마다 적용할 기능이나 개선에 대한 목록을 제공해야 한다. 이 개발 주기를 <code>sprint</code> 라고 한다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL. 디자인 패턴 / 소프트 아키텍처]]></title>
            <link>https://velog.io/@dev_hyemi/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4</link>
            <guid>https://velog.io/@dev_hyemi/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4</guid>
            <pubDate>Mon, 04 Jan 2021 13:56:05 GMT</pubDate>
            <description><![CDATA[<h1 id="디자인-패턴이란">디자인 패턴이란</h1>
<ul>
<li>프로그램 개발 과정 속에서 자주 나타나는 문제들을 쉽게 해결하기 위한 방법</li>
<li>과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 바탕으로 이후에도 재사용할 수 있기 좋은 형태로 가공하여 정리한 것</li>
</ul>
<h2 id="디자인-패턴은-왜-사용하는가">디자인 패턴은 왜 사용하는가?</h2>
<blockquote>
<p>알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, <strong>유사한 상황에서 문제를 해결할 수 있는 방안을 제시</strong>해준다.</p>
</blockquote>
<h2 id="장점">장점</h2>
<ul>
<li>개발자 간의 원활한 의사소통
: 여러 디자인의 패턴의 특성을 잘 알고 있어 문제해결 시 어떤 디자인 패턴을 사용하면 좋을지 해결책을 논의 할 수 있다.</li>
<li>소프트웨어 구조 파악 용이
: 패턴의 특성을 잘 알고 있기에 어떤 디자인 패턴이 설계할 때 사용되었는지 알면 소프트웨어 전체구조를 쉽게 파악 가능</li>
<li>재사용을 통한 개발 시간 단축</li>
<li>설계 변경 요청에 대한 유연한 대처</li>
</ul>
<h2 id="단점">단점</h2>
<ul>
<li>초기 투자 비용 부담<br>

</li>
</ul>
<h1 id="소프트웨어-아키텍처">소프트웨어 아키텍처</h1>
<ul>
<li>시스템을 구성하는 서브 시스템, 컴포넌트와 같이 구성요소 간의 관계를 관리하는 시스템의 구조.</li>
<li>소프트웨어의 전체적인 그림을 만드는 솔루션</li>
</ul>
<h2 id="소프트웨어-아키텍처와-디자인-패턴의-차이점">소프트웨어 아키텍처와 디자인 패턴의 차이점</h2>
<blockquote>
<p>소프트웨어와 디자인 패턴과 비슷하지만 더 넓은 범위에 속한다.</p>
</blockquote>
<p>📚Reference</p>
<p><a href="https://sshoreng.tistory.com/68">https://sshoreng.tistory.com/68</a></p>
<p><a href="https://juyeop.tistory.com/28">https://juyeop.tistory.com/28</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[기업협업 (인턴십) 회고]]></title>
            <link>https://velog.io/@dev_hyemi/%EA%B8%B0%EC%97%85%ED%98%91%EC%97%85%EC%9D%B8%ED%84%B4%EC%8B%AD%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@dev_hyemi/%EA%B8%B0%EC%97%85%ED%98%91%EC%97%85%EC%9D%B8%ED%84%B4%EC%8B%AD%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Sun, 03 Jan 2021 14:55:30 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/dev_hyemi/post/6748757a-72cc-4fcd-a6f0-3ee938d660b9/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202021-03-26%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.43.15.png" alt=""></p>
<blockquote>
<p>💡 기업협업은 2차 프로젝트를 마치고 실제 기업에서 인턴으로 개발자의 업무를 경험 해 볼 수 있는 과정이다. </p>
</blockquote>
<p>우리팀은 프론트엔드 7명으로 구성되었고, 
부동산 서비스를 제공하는 기업인 <strong>uiti</strong>로 인턴십을 나가게 되었다.</p>
<h2 id="인턴-기간">인턴 기간</h2>
<blockquote>
<p>20/11/16 ~ 12/10</p>
</blockquote>
<h2 id="진행한-task">진행한 task</h2>
<p>기업마다 진행되는 방식은  토이프로젝트를 진행하거나 디버깅을 하거나 각각 다른 걸로 알고 있었는데, 우리 팀의 경우에는 실제로 배포예정에 있는 <u style="color:red">스포츠 이커머스 앱 프로젝트</u>의 페이지를 업무 분담 받아서 진행하는 형식이었다. </p>
<h3 id="✅-내가-진행한-task">✅ 내가 진행한 task</h3>
<ul>
<li>영상 상세페이지<ul>
<li>youtube url을 통해 영상을 보여주는 페이지</li>
<li>라이브러리(React-Native-youtube)를 사용하여 페이지 구성</li>
</ul>
</li>
<li>포인트 관리 페이지</li>
<li>쇼핑페이지 내에 가격,수량 컴포넌트<ul>
<li>mock data를 이용해 ui 확인</li>
</ul>
</li>
</ul>
<h3 id="기술스택">기술스택</h3>
<ul>
<li>React Native</li>
<li>React</li>
<li>TypeScript</li>
<li>Axios</li>
<li>Styled component</li>
</ul>
<h3 id="협업툴">협업툴</h3>
<ul>
<li>GitLab</li>
<li>Teamgantt</li>
<li>Yarn</li>
<li>Adobe XD<br>

</li>
</ul>
<h1 id="기업협업인턴십을-마치며">기업협업/인턴십을 마치며</h1>
<h2 id="좋았던-점">좋았던 점</h2>
<ul>
<li><strong><span style="background-color:lightgray"> 현업은 어떤식으로 진행되는 지에 대해서 알 수 있었다.</span></strong>
: 이전 프로젝트에서는 동기들과 실력향상을 위한 과정이었다면, 이번 인턴십은 실제 배포예정인 프로젝트에 합류되어서 생생하게 진행되는 사항들에 내가 참여하고 어떤 플로우로 프로젝트가 진행되는 지에 대해서 알 수 있었다. 아침마다 스크럼미팅을 진행하고, 담당했던 부분의 이슈에 대해서 함께 고민하고, 마무리 단계에서는 실제로 기기에서도 동작이 잘 되는지도 체크하고 피드백 했던 경험들을 할 수 있었다.</li>
<li><strong><span style="background-color:lightgray"> 다양한 직군과의 커뮤니케이션을 통한 작업진행</span></strong>
: 내가 부여받은 업무를 진행 하면서 기획서의 의도를 파악하다가 궁금한 점에 대해서 기획자님에게 질문하고 의견을 조율해서 진행하고, 디자이너님에게 필요한 소스를 부탁드린다던가 하는 커뮤니케이션을 직접 할 수 있었다.</li>
<li><strong><span style="background-color:lightgray"> 팀원들과 함께 끝까지 해결 해 낸 것</span></strong>
: 초기세팅을 하면서 다같이 끝까지 해내려고 밤늦게까지 함께 고생했던 기억이 난다. 세팅을 진행하면서 내가 안되는 점에 대해서 물어보고 도움을 요청했을 때 어느 고민없이 친절하게 도움을 주고 함께 해주었고, 내가 도움을 줄 수 있는 부분 또한 최선을 다해서 도움을 주려고 노력했다. 그렇게 함께 초기세팅을 온전히 마쳤을 때의 기쁨은 잊을 수 없을 것 같다.</li>
</ul>
<h2 id="아쉬운-점">아쉬운 점</h2>
<ul>
<li>어떻게든 혼자서 해결 해보려고 붙잡고 있던 일 때문에 진행사항이 조금은 느렸었다. 
일을 진행 함에 있어서 막히는 부분은 스스로 해결하려고 하는 부분도 중요하지만, 진행상황에 따라서는 질문과 소통을 통해서 진행 해 나가는 방법 또한 피드백 받고 배웠다.</li>
<li>프로젝트에서 요구했던 새로운 기술 스택을 많이 적용해 보지 못했던 점.
이미 진행되고 있는 프로젝트에서 Typescript , axios 등등의 부분에서 기존에 모듈화 된 것을 적용하여 작업을 진행했는데 , 기존의 기술을 온전히 파악하고 진행 했던 것은 아니었던 것 같다.</li>
</ul>
<h2 id="후기">후기</h2>
<p>인턴십을 나가기 전에는 내가 실무에서 도움이 될 만한 일들을 할 수 있을까에 대해서 많이 고민하고 망설였었는데,  하기를 잘했다는 생각이 든다. 일단 부딪히고 경험해봐야 알 수 있는 일이 많다는 걸 배웠다.</p>
<p>그리고 우리가 만든 부분이 실제 배포예정이라는 점이 좋은 동기가 되어서 더욱 책임감을 가지고 일 할  수 있었고, 처음 배워는 React native를 통해서 진행해보는 일들이 어려웠지만 신기하고 흥미로웠다. </p>
<p>무엇보다 매일 오전 진행한 스크럼회의를 참여하면서 내 의견을 어떤식으로 명료하게 전달 할지에 대해서 많이 생각해보고 리마인드 할 수 있어서 좋았다.  작업진행 사항에 대해서 했던 일, 해야할 일, 블로킹 이슈 등을 미리 정리해서 매일 참여하였는데 그 시간이 중요하다는 생각을 하게 되었다. </p>
<p>개발자로 일한다는 것은 단순히 코드만 잘 짜는 것이 아니라 솔직하고 명료하게 올바른 커뮤니케이션 할 수 있는 태도도 중요하다는 것을 느끼게 된 한달이었다. </p>
<p>많이 부족한 상태였음에도 의견들을 존중해주시고 충분히 해낼 수 있도록 이끌어주신 사수 개발자분들과 늘 곁에서 으쌰으쌰하면서 도와주고 함께 했던 좋은 팀원들에게 정말 너무 감사하다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL_논리연산자]]></title>
            <link>https://velog.io/@dev_hyemi/TIL%EB%85%BC%EB%A6%AC%EC%97%B0%EC%82%B0%EC%9E%90</link>
            <guid>https://velog.io/@dev_hyemi/TIL%EB%85%BC%EB%A6%AC%EC%97%B0%EC%82%B0%EC%9E%90</guid>
            <pubDate>Sun, 06 Dec 2020 03:08:27 GMT</pubDate>
            <description><![CDATA[<h3 id="">&lt; &amp;&amp; &gt;</h3>
<ul>
<li>and 의 의미 ( and 연산자 )</li>
<li>좌항과 우항이 모두 true 일 때 &quot; true &quot;</li>
<li>둘 중 하나의 값이 false 이면 false</li>
</ul>
<pre><code class="language-jsx">if(true &amp;&amp; true){
    alert(1); 
}
                       // true

if(true &amp;&amp; false){
    alert(2);
}
                       //false</code></pre>
<h3 id="-1">&lt; || &gt;</h3>
<ul>
<li>or 의 의미 ( or 연산자 )</li>
<li>좌항 우항중 하나라도 true 라면 &quot; true&quot;</li>
<li>둘 다 false 일 때 false</li>
</ul>
<pre><code class="language-jsx">if(true || true){
    alert(1);
}
                       // true

if(true || false){
    alert(2);
}
                       // true</code></pre>
<h3 id="-2">&lt; ! &gt;</h3>
<ul>
<li>부정의 의미 ( not 연산자 )</li>
<li>Boolean 값을 역전시킨다</li>
</ul>
<h1 id="boolean-의-대체제">boolean 의 대체제</h1>
<pre><code class="language-jsx">if(!&#39;&#39;){
    alert(&#39;빈 문자열&#39;)
}
// 결과값 &#39;빈 문자열&#39; 출력됨
// &#39;&#39; (빈문자열은 false)

if(!undefined){
    alert(&#39;undefined&#39;);
}
// 결과값 &#39;undefined&#39; 출력됨
// undefined 는 false 로 간주

var a;
if(!a){
    alert(&#39;값이 할당되지 않은 변수&#39;); 
}

if(!null){
    alert(&#39;null&#39;);
}
//결과값 &#39;null&#39; 출력됨
// null 은 false 로 간주

if(!NaN){
    alert(&#39;NaN&#39;);
// 결과값 &#39;Nan&#39; 출력됨
// Nan 은 false 로 간주</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL_CSS property 순서]]></title>
            <link>https://velog.io/@dev_hyemi/TILCSS-property-%EC%88%9C%EC%84%9C</link>
            <guid>https://velog.io/@dev_hyemi/TILCSS-property-%EC%88%9C%EC%84%9C</guid>
            <pubDate>Sat, 05 Dec 2020 18:23:36 GMT</pubDate>
            <description><![CDATA[<p>css 속성을 적용 할 때 선언 순서가 규칙처럼 우선순위가 있는 것은 아니지만,</p>
<p>기업 협업을 진행하면서 참고 사항으로 알게 된 웹브라우저 제조사인 모질라(Mozilla) 에서 css 속성을 기술할 때 다음 과 같은 순서로 제안하고 있다는 걸 알게 되었다.</p>
<ol>
<li>display <code>-객체의 노출여부/표현방식--</code></li>
<li>list-style</li>
<li>position <code>-위치/좌표--</code></li>
<li>float</li>
<li>clear</li>
<li>width / height <code>-크기/여백--</code></li>
<li>padding / margin</li>
<li>border / background <code>-윤곽/배경--</code></li>
<li>color / font <code>-글자/정렬--</code></li>
<li>text-decoration</li>
<li>text-align / vertical-align</li>
<li>white-space</li>
<li>other text</li>
<li>content <code>-내용--</code></li>
</ol>
<blockquote>
<p><code>위치 선정</code> &gt; <code>윤곽</code> &gt; <code>외곽 디테일링</code> &gt; <code>채색</code> &gt; <code>타이포그래피</code>와 같이 밖에서부터 안쪽으로의 흐름이다.</p>
</blockquote>
<p>참고</p>
<p><a href="https://milooy.wordpress.com/2015/08/21/css-property-%EC%88%9C%EC%84%9C%EC%97%90-%EB%A7%9E%EC%B6%94%EC%96%B4-%EA%B9%94%EB%81%94%ED%9E%88-%EC%A0%81%EA%B8%B0/">https://milooy.wordpress.com/2015/08/21/css-property-순서에-맞추어-깔끔히-적기/</a></p>
<p><a href="https://www.beautifulcss.com/archives/203">https://www.beautifulcss.com/archives/203</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[TIL_Npm Trends]]></title>
            <link>https://velog.io/@dev_hyemi/TILNpm-Trends</link>
            <guid>https://velog.io/@dev_hyemi/TILNpm-Trends</guid>
            <pubDate>Wed, 02 Dec 2020 15:46:08 GMT</pubDate>
            <description><![CDATA[<p>현재 기업협업 과정 중 내가 다니게 된 회사에서는 React Native 를 이용해서 개발을 진행 중이다. React Native는 라이브러리 의존적인 프레임 워크이기 때문에 벌써 라이브러리를 또 써 볼 기회가 생겼다. 이번에는 많은 라이브러리들 중에서 괜찮은 라이브러리를 서치해 보라는 테스크를 받게 되어서 이것 저것 찾아보게 되었다. </p>
<p>어떤 라이브러리가 적합한 라이브러리 일까?</p>
<p>비슷한 라이브러리들이 많기 때문에 어떤 걸 써야할지 고민 될 때가 있다. </p>
<p>이럴때 유용한 사이트인 </p>
<blockquote>
<p><a href="https://www.npmtrends.com/">https://www.npmtrends.com/</a></p>
</blockquote>
<p><img src="https://images.velog.io/images/dev_hyemi/post/181dc5fb-beb6-44f1-8c0e-072795546a6b/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-02%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.35.37.png" alt=""></p>
<p><img src="https://images.velog.io/images/dev_hyemi/post/38050796-963e-4d63-977f-2e986a530a5c/%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202020-12-02%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%206.35.47.png" alt=""></p>
<p>이런 식으로 내가 찾아본 라이브러리의 트렌드에 대해서 파악할 수 있고,
비교도 가능한 사이트 이다.</p>
<p>npm을 사용하는 모듈을 추가하게 되면, 다운로드 수나 이슈, 최근 업데이트 된 날짜 등의 정보들을 비교해 볼 수 있는 유용한 사이트이다.</p>
<p>다운로드 수가 높거나 업데이트가 잘 되고 있는 라이브러리 일 수록 그만큼 버그에 대한 픽스도 잘 이루어지고 있어서 질이 향상된 라이브러리이기 때문에, 이런 비교를 통해서 라이브러리 선택에 도움을 줄 수 있다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Git] 에러노트_ssh key]]></title>
            <link>https://velog.io/@dev_hyemi/Git-error-notessh-key</link>
            <guid>https://velog.io/@dev_hyemi/Git-error-notessh-key</guid>
            <pubDate>Sun, 29 Nov 2020 14:29:29 GMT</pubDate>
            <description><![CDATA[<p>git push를 하는 과정에서 </p>
<pre><code class="language-bash">git@gitlab.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.</code></pre>
<p>라는 에러 메세지가 자꾸 떠서 </p>
<p>구글링을 하다보니 새로운 ssh key를 생성하여 gitlab에 새로 등록하는 방법들을 추천해 줘서 해보았지만  똑같은 에러가 계속 발생하였고, </p>
<p>또 구글링을 해보니 </p>
<blockquote>
<p> 새로운 키를 에이전트에 추가
eval “$(ssh-agent -s)”
<strong>ssh-add ~/.ssh/id_rsa</strong>
출처: <a href="https://nickjoit.tistory.com/94">https://nickjoit.tistory.com/94</a> [nickjoIT]</p>
</blockquote>
<p>라는 것을 활용해서 새로운 ssh 키를 생성하고 해보았지만 연속되는 실패가 이어졌다. 
여기서 더 해지는 상황이 git을 pull 받아보려는 상황에서도 똑같은 상황이 이어져서, 
아예 프로젝트를 clone 받아서 하는 방향으로 로직을 틀었다. </p>
<p>하지만.... 클론과정에서도 </p>
<pre><code class="language-bash">Cloning into &#39;highrun-v2&#39;...
no such identity: /Users/summer/.ssh/gitlab_rsa: No such file or directory
git@gitlab.com: Permission denied (publickey,keyboard-interactive).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.</code></pre>
<p>또 permission denied 상황이 일어나는 것이다. </p>
<p>계속되는 에러에 멘붕이 와서 내가 기업협업에 나간 회사에서 일하고 계신 프론트엔트 분께 질문을 드려서 해결을 할 수 있었다 😭</p>
<p>오랫동안 찾아보다가 해결된 방법은  </p>
<blockquote>
</blockquote>
<p><code>.ssh/gitlab.rsa: No such file or directory</code> 의 명령어를 보고 캐치하신 것이다. 우리가 생성한 ssh key는 다른 이름의 파일인데 요구하는 것은 다른이름의 파일을 찾고 있어서 그런 상황이었 던 것이다.</p>
<ol>
<li>새로운 키를 생성하고 </li>
<li>그 새로운 키의 이름(keyName)을 
<code>ssh-add ~/.ssh/&#39;생성한 keyName&#39;</code>  를 넣어주고</li>
</ol>
<p>3 . 새로 생성한 ssh키를 gitlab에 등록해 준다.</p>
<p> **참고
 <a href="https://devlog.jwgo.kr/2019/04/17/ssh-keygen-and-ssh-agent/">https://devlog.jwgo.kr/2019/04/17/ssh-keygen-and-ssh-agent/</a></p>
]]></description>
        </item>
    </channel>
</rss>