<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>developer_kimsky.log</title>
        <link>https://velog.io/</link>
        <description>아 응애에요🐥</description>
        <lastBuildDate>Wed, 25 Jan 2023 15:57:40 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>developer_kimsky.log</title>
            <url>https://velog.velcdn.com/images/developer_kimsky/profile/3524f633-e12a-4cc6-9efe-8f19d663e3e4/social_profile.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. developer_kimsky.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/developer_kimsky" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Redux Toolkit 사용법]]></title>
            <link>https://velog.io/@developer_kimsky/Redux-Toolkit-%EC%82%AC%EC%9A%A9%EB%B2%95</link>
            <guid>https://velog.io/@developer_kimsky/Redux-Toolkit-%EC%82%AC%EC%9A%A9%EB%B2%95</guid>
            <pubDate>Wed, 25 Jan 2023 15:57:40 GMT</pubDate>
            <description><![CDATA[<p><strong>설치</strong></p>
<pre><code>npm install @reduxjs/toolkit react-redux
yarn add redux react-redux @reduxjs/toolkit</code></pre><p><strong>사용</strong></p>
<p>스토어에 등록하는것은 이렇게!!!!!!</p>
<pre><code>index.js

import { Provider } from &quot;react-redux&quot;;
import store from &quot;./store&quot;;

  &lt;Provider store={store}&gt;
    &lt;BrowserRouter&gt;
      &lt;App /&gt;
    &lt;/BrowserRouter&gt;
  &lt;/Provider&gt;
</code></pre><p> Provider 로 감싸주고 store.js 파일 생성해서 넘겨준다!</p>
<pre><code>store.js

import { configureStore } from &#39;@reduxjs/toolkit&#39;
import cart from &quot;./store/cartSlice&quot;;

export default configureStore({
  reducer: { 
    cart: cart.reducer,
  }
}) </code></pre><pre><code>cartSlice.js

import { createSlice } from &quot;@reduxjs/toolkit&quot;;

let cart = createSlice({
  name: &quot;cart&quot;,
  initialState: [
    { id: 0, name: &quot;White and Black&quot;, count: 2 },
    { id: 2, name: &quot;Grey Yordan&quot;, count: 1 },
  ],
  reducers: {
    minusCount(state, action) {
      let idx = state.findIndex((x) =&gt; x.id == action.payload);
      if (state[idx].count &gt; 1) {
        state[idx].count--;
      } else {
        alert(&quot;최소 수량입니다.&quot;);
      }
    },
    addCount(state, action) {
      let idx = state.findIndex((x) =&gt; x.id == action.payload);
      state[idx].count++;
    },
  },
});

export let { minusCount, addCount } = cart.actions;

export default cart;</code></pre><p>스토어를 사용할때엔!!!</p>
<pre><code>cart.js

import { useDispatch, useSelector } from &quot;react-redux&quot;;
import { minusCount, addCount } from &quot;../../store/cartSlice&quot;;

let state = useSelector((state) =&gt; state.cart);
let dispatch = useDispatch(); // store.js 로 요청 보내주는 함수

&lt;button onClick={()=&gt;{ dispatch(minusCount(item.id)); }}&gt;-&lt;/button&gt;
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[react-router-dom@6]]></title>
            <link>https://velog.io/@developer_kimsky/react-router-dom6</link>
            <guid>https://velog.io/@developer_kimsky/react-router-dom6</guid>
            <pubDate>Mon, 23 Jan 2023 16:55:34 GMT</pubDate>
            <description><![CDATA[<p><strong>설치</strong></p>
<pre><code>npm install react-router-dom@6</code></pre><pre><code>yarn add react-router-dom@6</code></pre><p><strong>사용</strong></p>
<p>index.js</p>
<pre><code>import { BrowserRouter } from &quot;react-router-dom&quot;;

const root = ReactDOM.createRoot(document.getElementById(&quot;root&quot;));
root.render(
  &lt;React.StrictMode&gt;
    &lt;BrowserRouter&gt;
      &lt;App /&gt;
    &lt;/BrowserRouter&gt;
  &lt;/React.StrictMode&gt;
</code></pre><p>app.js</p>
<pre><code>import { Routes, Route } from &quot;react-router-dom&quot;;

&lt;BrowerRouter&gt;
  &lt;Routes&gt;
      &lt;Route path=&quot;/&quot; element={&lt;Home /&gt;} /&gt;
    /* nested routers */
    &lt;Route path=&quot;/about&quot; element={&lt;About /&gt;}&gt;
      &lt;Route path=&quot;member&quot; element={&lt;div&gt;member info&lt;/div&gt;} /&gt;
      &lt;Route path=&quot;location&quot; element={&lt;div&gt;location info&lt;/div&gt;} /&gt;
    &lt;/Route&gt;
    &lt;Route path=&quot;/detail/:id&quot; element={&lt;Detail /&gt;} /&gt;
    &lt;Route path=&quot;/*&quot; element={&lt;NotFound /&gt;} /&gt;
  &lt;/Routes&gt;
&lt;/BrowerRouter&gt;</code></pre><p>about.js</p>
<pre><code>import { Outlet } from &quot;react-router-dom&quot;;

&lt;div&gt;
  &lt;h4&gt;회사정보 페이지&lt;/h4&gt;
  &lt;Outlet&gt;&lt;/Outlet&gt;
&lt;/div&gt;</code></pre><p>/about/member 로 들어올 시, About 화면도 보여지고 Outlet 부분에 member info 부분도 보여진다! /about/location 도 마찬가지..</p>
<p>++</p>
<ul>
<li><p>useHistory 대신 useNavigate</p>
<pre><code>import { useNavigate } from &#39;react-router-dom&#39;;

const navigate = useNavigate();
navigate(&quot;/&quot;, state: { id: userId });
</code></pre></li>
</ul>
<pre><code>받을 때엔,</code></pre><p>import { useLocation } from &#39;react-router-dom&#39;;</p>
<p>  const location = useLocation();
  const { id } = location.state;
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript Promise]]></title>
            <link>https://velog.io/@developer_kimsky/Javascript-Promise</link>
            <guid>https://velog.io/@developer_kimsky/Javascript-Promise</guid>
            <pubDate>Wed, 28 Sep 2022 13:07:33 GMT</pubDate>
            <description><![CDATA[<p>!youtube[JB_yU6Oe2eE]</p>
<p>!youtube[aoQSOZfz3vQ]</p>
<p>promise 는 자바스크립트 비동기 처리에 사용되는 객체!</p>
<ul>
<li>State: 대기(pending)-&gt;이행(fulfilled) or 실패(rejected)</li>
<li>Producer vs Consumer</li>
</ul>
<ol>
<li>Producer
새로운 promise 가 만들어질 때는 우리가 전달한 executor 라는 콜백함수가 자동적으로 실행된다..! 꼭 염두하기..!!!</li>
</ol>
<pre><code>const promise = new Promise((resolve, reject) =&gt; {
  // doing some heavy work (network, read files)
  // resolve();
  // reject();
});</code></pre><ol start="2">
<li>Consumers: then, catch, finally
성공했을때 then, 실패했을때 catch, 성공/실패와 상관없이 실행 finally</li>
</ol>
<p>++ then 은 값을 바로 전달해도 되고, 다른 promise를 전달해도 됨다</p>
<pre><code>promise
  .then(value =&gt; {
      console.log(value);
  })
  .catch(error =&gt; {
      console.log(error);
  })
  . finally(() &gt; {
      console.log(&#39;finally&#39;);
  });</code></pre><ol start="3">
<li>Promise.all
promise 배열을 전달하면 모든 promise 들이 병렬적으로 다 받을때까지 모아준다!</li>
</ol>
<pre><code>function pickAllFruits() {
    return Promise.all([getApple(), getBanana()]).then(fruits =&gt; fruits.join(&#39; + &#39;));
}

pickAllFruits().then(console.log);</code></pre><p>4.Promise.race
배열에 전달된 promise 들 중에서 가장 먼저 값이 리턴 된 것만 전달되어진다</p>
<pre><code>function pickOnlyOne() {
    return Promise.race([getApple(), getBanana()]);
}

pickOnlyOne().then(console.log);</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[Javascript 배열 함수]]></title>
            <link>https://velog.io/@developer_kimsky/Javascript-%EB%B0%B0%EC%97%B4-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@developer_kimsky/Javascript-%EB%B0%B0%EC%97%B4-%ED%95%A8%EC%88%98</guid>
            <pubDate>Thu, 22 Sep 2022 18:20:18 GMT</pubDate>
            <description><![CDATA[<p>!youtube[3CUjtKJ7PJg]</p>
<p><strong>1. join</strong>
배열을 문자열로 반환. 구분자 넣을 수 있다.</p>
<p><strong>2. split</strong>
문자열을 배열로 만듦. 구분자를 넣어야 하고, limit 을 넣을 수 있다.
구분자는 문자열이나 정규식 가능.</p>
<p><strong>3. reverse</strong>
배열의 순서를 거꾸로 만듦.</p>
<p><strong>4. slice</strong>
배열의 특정한 부분을 잘라 반환. 시작 인덱스와 종료 인덱스를 넣을 수 있다. 종료 인덱스 값은 배제되어진다.
(<strong>splice</strong>는 기존 배열에서 삭제되고, 삭제된 요소들이 반환됨!!!!!)</p>
<p><strong>5. find</strong>
검색된 결과 첫번째로 찾아진 하나만 반환. 배열이 아니다. </p>
<pre><code>const result  = students.find((student) =&gt; student.score === 90);</code></pre><p><strong>6. filter</strong>
검색된 결과 모두 반환. 배열!</p>
<pre><code>const result  = students.filter((student) =&gt; student.enrolled);</code></pre><p><strong>7. map</strong>
배열을 이용해서 새로운 원소들을 가진 새로운 배열을 만듦.</p>
<p><strong>8. some, every</strong>
배열안의 원소를 검사해서 boolean 반환. 
some 배열 중에 하나라도 조건을 만족하면 true.
every 배열의 모든 요소들이 조건을 만족해야 true.</p>
<p><strong>9. reduce</strong>
배열을 돌며 값을 누적. 누산기! 리턴값을 넣어줘야 함. 초기값 세팅할 수도 있다. 
(초기값부터 시작해서 리턴한 값이 prev로 들어가고 또 리턴한 값이 prev로 들어가고 해서 누적..)</p>
<pre><code>const result  = students.reduce((prev, curr) =&gt; {
  return prev + curr.score;
},0); // 0 이 초기값</code></pre><p><strong>10. sort</strong>
배열 정렬. </p>
<p>++
<strong>같이 활용하기!!!!!!(함수형 프로그래밍)</strong></p>
<pre><code>const result = students
 .map((student) =&gt; student.score)
 .filter((score) =&gt; score &gt;= 50)
 .join();</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[forEach vs map]]></title>
            <link>https://velog.io/@developer_kimsky/forEach-vs-map</link>
            <guid>https://velog.io/@developer_kimsky/forEach-vs-map</guid>
            <pubDate>Thu, 22 Sep 2022 17:45:11 GMT</pubDate>
            <description><![CDATA[<ol>
<li>array.forEach
배열을 돌면서 주어진 콜백함수를 실행한다.<pre><code>const array = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];
</code></pre></li>
</ol>
<p>array.forEach(element =&gt; console.log(element));
// a, b, c</p>
<pre><code>
2. array.map
배열을 돌면서 주어진 콜백함수를 실행해 새로운 배열을 반환한다.
기존의 배열이 변경되지 않는다.</code></pre><p>const array = [1, 2, 3, 4];</p>
<p>const newAraay = array.map(x =&gt; x * 2);</p>
<p>console.log(newAraay);
// [2, 4, 6, 8]</p>
<p>```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[for...in vs for..of]]></title>
            <link>https://velog.io/@developer_kimsky/for...in-vs-for..of</link>
            <guid>https://velog.io/@developer_kimsky/for...in-vs-for..of</guid>
            <pubDate>Wed, 21 Sep 2022 16:53:07 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>*<em>for...in *</em>
object 안에 있는 key 들이 모두 출력된다!</p>
<pre><code>const obj = { name: &#39;sky&#39;, age: 20 }; 
for (key in obj) {
console.log(key)
}
// name, age</code></pre></li>
<li><p><strong>for...of</strong>
배열 값들이 모두 출력된다!</p>
<pre><code>const array = [1, 2, 3, 4, 5];
for (value of array) {
console.log(value);
}
// 1, 2, 3, 4, 5</code></pre></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[async 와 defer의 차이점]]></title>
            <link>https://velog.io/@developer_kimsky/async-%EC%99%80-defer%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90</link>
            <guid>https://velog.io/@developer_kimsky/async-%EC%99%80-defer%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90</guid>
            <pubDate>Tue, 20 Sep 2022 15:55:36 GMT</pubDate>
            <description><![CDATA[<p>드림코딩 엘리님 유튜브 강의 참조~!</p>
<p>!youtube[tJieVCgGzhs]</p>
<p><strong>1. head+async</strong></p>
<pre><code>&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Document&lt;/title&gt;
    &lt;script async src=&quot;main.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;</code></pre><p>async 는 boolean 타입의 속성값. 선언하는 것만으로도 true.
브라우저가 html 을 파싱 하다가 병렬로 js를 다운로드 받자~! 라고 명령만 해놓고 다시 파싱. js가 다운로드 완료되면 파싱을 멈추고 js를 실행 후 다시 html을 파싱.
장점은 다운로드 받는 시간을 절약할 수 있다. 하지만 html이 전부 파싱되기도 전에 js가 실행 되기 때문에 위험! 그리고 js가 실행되는 동안 html 파싱을 멈추기 때문에 사용자가 페이지를 보는데 시간이 좀 더 걸릴 수도 있다.</p>
<p><strong>2. head+defer</strong></p>
<pre><code>&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;title&gt;Document&lt;/title&gt;
    &lt;script defer src=&quot;main.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;</code></pre><p>브라우저가 html 을 파싱 하다가 병렬로 js를 다운로드 받자~! 라고 명령만 해놓고 다시 파싱. 그리고 파싱이 끝나면 js가 실행!
아무래도 defer가 안전😊</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS Relative length units]]></title>
            <link>https://velog.io/@developer_kimsky/CSS-Relative-length-units</link>
            <guid>https://velog.io/@developer_kimsky/CSS-Relative-length-units</guid>
            <pubDate>Thu, 15 Sep 2022 17:12:16 GMT</pubDate>
            <description><![CDATA[<p>오늘도 드림코딩 엘리님 히히😘</p>
<p>!youtube[7Z3t1OWOpHo]</p>
<p>CSS Units 에는 절대적인 유닛과 상대적인 유닛이 있다!
절대적인 유닛은 대표적으로 px 이 있고~~
오늘 정리해볼 것은 상대적인 유닛!!!!!!!! 백엔드로 일할 때 em이 뭐고 rem이 뭐고 vh가 뭐고..vw는 또 뭐야..? 이랬는데 앨리님 강의로 알게 되었다!!!!!! (이 짤 안쓸 수 없어..!)</p>
<p><img src="https://velog.velcdn.com/images/developer_kimsky/post/ed545a99-91ff-469d-bad9-9fc87d470fcc/image.png" alt=""></p>
<p>ㅎㅎㅎ암튼 알아보자^^!</p>
<p><strong>1. em</strong> (releative to parent element)
em 은 부모의 폰트 사이즈에 상대적으로 크기가 계산되어진다! 
(특별히 html이나 body에 폰트사이즈를 지정하지 않는 이상 기본적으로 브라우저에서 html에 할당되는 폰트사이즈는 16px이다.)
(++추가. 현재 요소에 폰트 사이즈가 있다면! 현재 요소의 폰트 사이즈 기준으로 계산한다. 예를 들어..</p>
<pre><code>.contents {
  font-size: 1rem;
  padding: 0.5em;
}</code></pre><p>이렇게 되어 있다면 1rem값 * 0.5 가 되는것..!!!!!!!! 중요하다 중요해!!! )</p>
<p><img src="https://velog.velcdn.com/images/developer_kimsky/post/49bfcb02-4c32-4a62-9cc0-6cd48579655b/image.png" alt=""></p>
<p><strong>2. rem</strong> (releative to root element)
rem 은 최상위 태그의 폰트 사이즈가 기준이 된다. rem의 r은 root!ㅎㅎ
위의 jsbin 캡쳐에서 em 을 rem 으로 바꾸면 parent 는 그대로 128px 이지만 child 는 16 * 0.5 = 8px 이 된다.ㅎㅎㅎ</p>
<p><strong>3. vw</strong> (viewport width)
부모 요소와는 상관없이 브라우저 너비에 따라서 변경된다.
현재 브라우저 width 가 1000px 이라면 50vw 는 500px!</p>
<p><strong>4. vh</strong> (viewport height)
부모 요소와는 상관없이 브라우저 높이에 따라서 변경된다.
현재 브라우저 height 가 800px 이라면 50vh 는 400px!</p>
<p><strong>5. %</strong>
부모요소의 상대적으로 크기가 계산되어진다! em 대신 % 사용 가능ㅎㅎ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS Item Flexbox]]></title>
            <link>https://velog.io/@developer_kimsky/CSS-Item-Flexbox-b01a5so2</link>
            <guid>https://velog.io/@developer_kimsky/CSS-Item-Flexbox-b01a5so2</guid>
            <pubDate>Wed, 14 Sep 2022 16:03:43 GMT</pubDate>
            <description><![CDATA[<p>드림코딩 엘리님의 유튜브 강의를 보고 정리!!!!🤣
!youtube[7neASrWEFEM]</p>
<p><strong>0. item 을 감싸고있는 container 는 역시 display: flex; 여야함!</strong></p>
<p><strong>1. order: 0; // 기본값 0</strong>
order 는 item 들의 순서를 지정할 수 있다. 현업에선 별로 사용하지않는다고ㅎㅎㅎ</p>
<pre><code>.item1 {
 order: 0;
}</code></pre><p><strong>2. flex-grow: 0; // 기본값 0</strong>
flex-grow 는 item 이 container 안에서 할당 가능한 공간의 정도를 선언한다. 형제 요소가 모두 같은 값이라면 형제 모두 동일한 공간을 할당 받고 각각 다른 값이라면 각각 다른 공간을 할당받게 된다.</p>
<pre><code>.item1 {
  flex-grow: 1;
}</code></pre><p><strong>3. flex-shrink: 0; // 기본값 0</strong>
flex-shrink 는 container가 작아졌을 때, 어떻게 행동하느냐를 지정한다. flex-grow 처럼 형제 요소가 모두 같은 값이라면 형제 모두 같은 크기로 작아지고 각각 다른 값이라면 각각 다른 크기로 작아진다. 값이 클수록 더 작게 작아진다!</p>
<pre><code>.item1 {
  flex-grow: 1;
  flex-shrink: 1;
}</code></pre><p><strong>4. flex-basis: auto; // 기본값 auto</strong>
flex-basis는 공간을 얼마나 차지해야하는지 좀 더 세부적으로 명시할 수 있게 한다. 
auto 로 하게되면 flex-grow 나 flex-shrink 에 지정된 값에 맞춰서 item 이 변형된다. auto 가 아닌 width 값을 지정할 수 있다. (ex. px, %, em, ...)</p>
<pre><code>.item1 {
  flex-grow: 1;
  flex-shrink: 1;
  flex-basis: 50%;
}</code></pre><p><strong>5. flex: 1 1 50%;</strong>
flex-grow, flex-shrink, flex-basis 를 묶어 flex 로 사용한다.</p>
<pre><code>.item1 {
  flex: 1 1 50%;
}</code></pre><p><strong>6. align-self: auto; // 기본값 auto</strong>
align-self 는 item 별로 정렬할 수 있다. cross axis 기준으로 정렬!</p>
<pre><code>.item1 {
  flex: 1 1 50%;
  align-self: center;
}</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[CSS Container Flexbox ]]></title>
            <link>https://velog.io/@developer_kimsky/CSS-Container-Flexbox</link>
            <guid>https://velog.io/@developer_kimsky/CSS-Container-Flexbox</guid>
            <pubDate>Tue, 13 Sep 2022 16:55:02 GMT</pubDate>
            <description><![CDATA[<p>드림코딩 엘리님 유튜브 강의를 보고 내가 나중에 참고하려구 정리해놓는 글!!!!🤣</p>
<p>!youtube[7neASrWEFEM]</p>
<p><strong>1. display: flex;</strong>
일단 flexbox를 사용하기 위해선 item 을 감싸고 있는 container를 display: flex; 로 지정해줘야한다.</p>
<pre><code>.container {
  display: flex;
}</code></pre><p><strong>2. flex-direction: row; // 기본값 row</strong>
flex-direction은 container 내의 item 을 배치할 때 main axis 및 방향(정방향, 역방향)을 지정한다.
row 는 왼쪽에서 오른쪽,
row-reverse 는 오른쪽에서 왼쪽,
column은 위에서 아래,
column-reverse는 아래에서 위로!</p>
<pre><code>.container {
  display: flex;
  flex-direction: row;
}</code></pre><p><strong>3. flex-wrap: nowrap; // 기본값 nowrap</strong>
flex-wrap은 item 들이 한줄로 배치되게 할것인지, 또는 가능한 영역 내에서 벗어나지 않고 여러행으로 나누어 표현 할것인지를 지정한다.
nowrap 은 화면의 크기가 줄어들어도 item 들이 밑으로 떨어지지않고 한줄로 붙어있다. 이건 랩핑을 안하겠다고 지정이 되어있기 때문이다.
wrap 은 화면의 크기가 줄어들때 자동으로 다음 라인으로 아이템이 떨어지게 되고,
wrap-reverse 은 반대로 랩핑이 된다. 
(ex. 
4 5 6
1 2 3)</p>
<pre><code>.container {
  display: flex;
  flex-direction : row;
  flex-wrap : nowrap;
}</code></pre><p><strong>4. flex-flow: row nowrap;</strong>
flex-derection, flex-wrap 을 한번에 묶어서 표현할 수 있다.</p>
<pre><code>.container {
  display: flex;
  /* flex-direction: row;
  flex-wrap: nowrap; */
  flex-flow: row nowrap;
}</code></pre><p><strong>5.justify-content: flex-start; // 기본값 flex-start</strong>
justify-content 는 main axis 에서 item 들을 어떻게 배치할껀지를 결정해준다.
flex-start 는 main axis 가 수평축이라면 왼쪽에서 오른쪽으로, 수직축이라면 위쪽에서 아래쪽으로.
flex-end 는 item의 순서는 유지하되, item들이 오른쪽/아래쪽 으로 배치된다.
center 는 말그대로 가운데에 배치.
그 외 space-around, space-evenly, space-between 등은 item 사이에 간격을 띄워 배치한다. 차이가 있는데 말로 설명하기가 어렵다^^........ jsbin으로 코드쳐서 만들어온 이미지라도 첨부..😿
<img src="https://velog.velcdn.com/images/developer_kimsky/post/5d5c0fc2-91a8-4134-96b8-5f010ee2cc08/image.png" alt="">
순서대로 space-around, space-evenly, space-between!
around는 item 양쪽으로 간격이 일정하게 생기는거 같고, evenly는 item 처음과 끝을 포함하여 일정한 공백이 생기도록 하는거 같고, between은 item 처음과 끝은 공백없이 나머지 사이사이에만 일정한 공백이 생기도록 하는거같다!ㅎㅎㅎ^^...................</p>
<pre><code>.container {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  /* flex-flow: row nowrap; */
  justify-content: flex-start;
}</code></pre><p><strong>6. align-items: stretch; // 기본값 stretch</strong>
align-items 는 cross axis 에서 item을 어떻게 배치할껀지를 결정해준다. 
하나의 줄 내에 있는 요소들에 적용된다!!!!!
center 는 말그대로 가운데에 배치된다.
baseline 은 폰트를 기준으로 배치된다.</p>
<pre><code>.container {
  display: flex;
  flex-direction: row;
  flex-wrap: nowrap;
  /* flex-flow: row nowrap; */
  justify-content: flex-start;
  align-items: stretch;
}</code></pre><p><strong>7. align-content: stretch; // 기본값 stretch</strong>
align-content 도 cross axis 에서 item 배치를 결정해준다.
flex-wrap: wrap; 필수!!!!!!!!!!!!!!!!!!!! item 들이 여러 줄로 배치되어 있을 때 적용된다!!!
justify-content 와 같은 속성값들을 사용할 수 있다.</p>
<pre><code>.container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap; // 필수!
  /* flex-flow: row nowrap; */
  justify-content: flex-start;
  align-items: stretch;
  align-content: center;
}</code></pre><p>🐥오늘의 사족🐥
어제 그냥 인강을 보기만 했을 때는 와 그렇구나 신기하다~ 이러고 이해한 줄 알았는데, 이렇게 블로그에 글을 쓰다보니 어 잘 모르겠는데..? 싶은것이다..? 그래서 구글링해서 조금 더 설명을 덧붙였다..ㅎㅎㅎ아마 이렇게 글을 쓰고도 완벽히 이해하진 못한거같아서 좀 더 공부해야할꺼같다!!!!!!!!!! 화이팅!!!!!!</p>
]]></description>
        </item>
    </channel>
</rss>