<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>HyunSang Park</title>
        <link>https://velog.io/</link>
        <description>🧑🏻‍💻 다양한 소프트웨어를 개발하고 있습니다</description>
        <lastBuildDate>Sun, 15 Nov 2020 08:21:07 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>HyunSang Park</title>
            <url>https://images.velog.io/images/hyun_sang/profile/a850dec2-d18d-467a-b82c-5b13c9889963/photo_2021-03-01_18-45-56.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. HyunSang Park. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyun_sang" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[WASM(WebAssembly) - 개발환경 구축 및 Hello World 출력]]></title>
            <link>https://velog.io/@hyun_sang/WASMWebAssembly-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EB%B0%8F-Hello-World-%EC%B6%9C%EB%A0%A5</link>
            <guid>https://velog.io/@hyun_sang/WASMWebAssembly-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EA%B5%AC%EC%B6%95-%EB%B0%8F-Hello-World-%EC%B6%9C%EB%A0%A5</guid>
            <pubDate>Sun, 15 Nov 2020 08:21:07 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 오랜만에 블로그에 글을 작성해 보네요.
요즘 학교 생활을 열심히 해서 많이 피곤하네요🔥
그럼 일단 본론으로 들어가겠습니다.</p>
<h2 id="wasmwebassembly란">WASM(WebAssembly)란?</h2>
<p>웹어셈블리는 웹 플랫폼에 있어서 상당히 큰 의의를 갖습니다 — 여러 언어로 작성된 코드들을 네이티브에 가까운 속도로 웹에서 돌릴 수 있는 길을 제공하며, 이전까지는 웹에서 돌려볼 수 없었던 클라이언트 앱들을 웹에서 돌릴 수 있도록 만들어주기 때문입니다.</p>
<p>WebAssembly는 JavaScript와 함께 보완되고 실행되도록 설계되었습니다. WebAssembly JavaScript API를 사용하여 WebAssembly 모듈을 JavaScript 앱에 불러와 둘 사이의 기능을 공유 할 수 있습니다. 따라서 WebAssembly 코드를 작성하는 방법을 몰라도 WebAssembly의 성능과 JavaScript의 편리함 및 유연성을 하나의 응용 프로그램에서 활용할 수 있습니다. <a href="https://developer.mozilla.org/ko/docs/WebAssembly">MDN Web Doc-웹어셈블리</a></p>
<h2 id="개발환경-구축하기">개발환경 구축하기</h2>
<p><a href="https://wasmbyexample.dev/examples/hello-world/hello-world.c.en-us.html">Wasm By Example-Hello World!</a>를 참고하여서 개발환경을 구축하였습니다.</p>
<pre><code class="language-shell">git clone https://github.com/emscripten-core/emsdk.git
cd emsdk</code></pre>
<p>GitHub에서 emsdk를 clone 하시면 됩니다.</p>
<pre><code class="language-shell">./emsdk install latest
./emsdk activate latest
source ./emsdk_env.sh</code></pre>
<p>다음으로 emsdk를 사용하여 Emscripten의 최신 안정 빌드를 얻고 활성화하여 사용할 수 있습니다.
마지막 명령은 emcc, Emscripten 컴파일러 도구 및 기타 필요한 모든 것을 찾을 수 있도록 경로를 설정합니다.</p>
<h2 id="compile">Compile</h2>
<p>일단 자신이 가장 좋아하는 IDE를 사용하시면 됩니다.
필자의 경우에는 VS Code를 사용하여서 개발하였습니다.</p>
<pre><code class="language-c">// hello.c
#include &lt;stdio.h&gt;

int main() {
  printf(&quot;Hello! World!\n&quot;);
  return 0;
}</code></pre>
<p>다음 명령을 활용하여서 컴파일을 할 수 있습니다.</p>
<pre><code class="language-shell">emcc hello.c -o hello.js</code></pre>
<p>간단히 말해서 hello.c를 hello.js로 변환하고 그에 맞는 WASM 파일 생성을 하게 됩니다.</p>
<pre><code class="language-shell">ndoe hello</code></pre>
<p>를 입력하게 되면 정상적으로 Hello! World!가 출력되는 것을 보실 수 있습니다.
또한 HTML 파일로도 출력할 수 있습니다.</p>
<pre><code class="language-shell">emcc hello.c -O3 -o hello.html</code></pre>
<p>위 명령어를 사용하게 되면 간단하게 HTML 파일로 변환하여서 파일을 만들 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[학생 개발자는 어떻게 Notion을 쓰고 있을까?]]></title>
            <link>https://velog.io/@hyun_sang/%ED%95%99%EC%83%9D-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-Notion%EC%9D%84-%EC%93%B0%EA%B3%A0-%EC%9E%88%EC%9D%84%EA%B9%8C</link>
            <guid>https://velog.io/@hyun_sang/%ED%95%99%EC%83%9D-%EA%B0%9C%EB%B0%9C%EC%9E%90%EB%8A%94-%EC%96%B4%EB%96%BB%EA%B2%8C-Notion%EC%9D%84-%EC%93%B0%EA%B3%A0-%EC%9E%88%EC%9D%84%EA%B9%8C</guid>
            <pubDate>Thu, 22 Oct 2020 11:32:37 GMT</pubDate>
            <description><![CDATA[<p>IT 회사에서 요즘 많이 사용하고 있는 Notion을 학생 개발자는 어떻게 쓰고 있는지 이야기 해 보면서 다른 분들은 어떻게 사용했는지 알려 주시면 좋겠습니다.</p>
<h2 id="notion을-어떻게-접하게-되었을까">Notion을 어떻게 접하게 되었을까?</h2>
<p>Notion가 나온지 몇 개월 안 되서 우연히 Facebook에서 개발 그룹에서 Notion에 대해서 대중화가 되어 가고 있는 모습을 보게 되었습니다.
그 이후로 Notion을 잘 사용하게 되었습니다.</p>
<h2 id="학생들이-얻을-수-있는-notion">학생들이 얻을 수 있는 Notion!</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/3b43d243-4bd4-4e96-8b45-f9f42a9763f7/%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-10-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.20.00.png" alt="Notion Plans">
Personal Pro Plan을 학교 메일을 인증하게 되면 공짜로 사용할 수 있습니다. 
제가 살고 있는 도시는 전라남도 교육청에서 o365를 제공하고 있기 때문에 o365 계정으로 학생 계정으로 업그레이드를 해서 사용하고 있습니다.</p>
<p><a href="https://o365.jne.go.kr/"><strong>전라남도 교육청-o365</strong></a></p>
<h2 id="어떻게-잘-사용할-수-있을까">어떻게 잘 사용할 수 있을까?</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/86d676b3-d196-4a47-9116-ce0e9d7cbd8c/%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-10-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.23.17.png" alt="">
프로그래밍을 공부하고 있기 때문에 프로그래밍을 공부하기 위해서도 사용하고 있습니다.
다양한 프로그래밍 언어를 공부하고 있기 때문에 <code>/page</code>를 통해서 다양한 페이지를 만들어서 그 안에 제가 공부하고 있는 내용을 작성해서 공부하고 있습니다.</p>
<p><img src="https://images.velog.io/images/hyun_sang/post/43b121e0-b438-44f6-ad72-2431448ef1fd/%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-10-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.28.09.png" alt="">
씹어먹는 C++를 읽고 공부하고 있습니다. 각 쳅터에서 공부한 내용을 적거나 책의 내용을 적고 있습니다.
<img src="https://images.velog.io/images/hyun_sang/post/460a16df-d84a-40e2-b705-54ca495d6a7c/%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-10-22%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.29.14.png" alt=""></p>
<p>이렇게 사용하면 좋은 방법으로 Notion을 사용하면 됩니다.
궁금한 내용이 있으시면 ! 메일로 연락 주시면 열심히 노션에 대해서 알려 드리겠습니다 ㅎㅎ</p>
<p><a href="https://www.facebook.com/groups/notion.so">Facebook-Notion.so 노션 한국 사용자 모임</a>에서도 궁금하신 내용을 알려주시면 친절하게 알려주실 겁니다 !!</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[명령형 프로그래밍과 선언적 프로그래밍 비교]]></title>
            <link>https://velog.io/@hyun_sang/%EB%AA%85%EB%A0%B9%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-%EC%84%A0%EC%96%B8%EC%A0%81-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B9%84%EA%B5%90</link>
            <guid>https://velog.io/@hyun_sang/%EB%AA%85%EB%A0%B9%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-%EC%84%A0%EC%96%B8%EC%A0%81-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%B9%84%EA%B5%90</guid>
            <pubDate>Fri, 09 Oct 2020 06:25:50 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, Learning React을 통해서 React.js를 공부하고 있습니다.</p>
<h2 id="선언적declarative-programming-프로그래밍이란">선언적(declarative programming) 프로그래밍이란?</h2>
<p>함수형 프로그래밍은 선언적 프로그래밍(declarative programming)이라는 더 넓은 프로그래밍 패러다임의 한 가지입니다.
선언적 프로그래밍은 필요한 것을 달성하는 과정을 하나하나 기술하는 것보다 필요한 것이 어떤 것인지 기술하는 데 방점을 두고 애플리케이션의 구조를 세워 나가는 프로그래밍 구조 입니다.</p>
<p>선언적 프로그래밍을 이해하기 위해 명령형 프로그래밍(imperative programming)과 비교해 보겠습니다.</p>
<h2 id="명령형-프로그래밍imperative-programming이란">명령형 프로그래밍(imperative programming)이란?</h2>
<p>명령형 프로그래밍은 코드로 원하는 결과를 달성해 나가는 과정에만 관심을 두는 프로그래밍 스타일입니다. 어떤 문자열을 URL에서 사용할 수 있게 만드는 일반적인 작업을 살펴 보겠습니다.
공백은 URL에서 사용할 수 있는 문자가 아니므로 문자열을 URL에서 사용할 수 있게 (URL 친화적으로) 만들려면 모든 공백( )을 하이픈(-)으로 바꿔야 합니다. <strong>우선 명령형 프로그래밍를 어떻게 달성할 수 있는지 예제를 통해서 살펴 보겠습니다.</strong></p>
<h3 id="명령형-프로그래밍-예제">명령형 프로그래밍 예제</h3>
<pre><code class="language-javascript">var string = &#39;THis is the midday show with Cheryl Waters&#39;;
var urlFriendly = &quot;&quot;;

for(var i=0; i&lt;string.length; i++){
    if(string[i] === &quot; &quot;){
        urlFriendly += &quot;-&quot;;
    }else{
        urlFriendly += string[i];
    }
}

console.log(urlFriendly);</code></pre>
<p>이 예제는 문자열의 모든 문자를 루프를 돌면서 공백을 만날 때마다 그 공백을 -로 바꿉니다. 이런 구조의 ㅡ로그래밍은 우리가 원하는 것을 달성하는 방법에만 신경을 씁니다. for루프와 if문을 사용하고 대입연산자(+=)를 사용해 값을 설정합니다. 코드 자체를 간단히 살펴보는 것만으로는 우리가 즉시 알 수 있는 것이 많지 않ㅆ습니다. 명령형 프로그래밈에서 코드 안에서 벌어지는 일을 읽는 사람이 더 잘 이해하도록 돕는 주석을 많이 달아 주어야 합니다.</p>
<h3 id="선언적-프로그래밍-예제">선언적 프로그래밍 예제</h3>
<p>명령형 프로그래밍 예제에서 선언적 프로그래밍 예제로 바꾸어 보겠습니다.</p>
<pre><code class="language-js">const string = &#39;This is the midday show with Cheryl Waters&#39;;
const urlFriendly = string.replace(/ /g, &#39;-&#39;);

console.log(urlFriendly);</code></pre>
<p>여기서 string.replace와 정규식을 사용해서 모든 공백을 하이픈으로 변경합니다.
string.replace를 사용하면 모든 공백이 하이픈으로 변경되어야 한다는 사실을 기술할 수 있습니다.
모든 공백을 하이픈으로 변경하는 자세한 방법은 replace 함수 안에 들어가고, 구체적 절차 대신 replace(치환)라는 함수를 사용해 추상적인 개념을 표현합니다. 선언적 프로그래밍의 코드 구문은 어떤 일이 발생해야 하는지 기술하고, 실제로 그 작업을 처리하는 방법은 추상화로 아랫단에 감추어집니다.</p>
<p>선언적 프로그램은 코드 자체가 어떤 일이 벌어진지 설명하기 때문에 좀 더 추론하기 쉽습니다. 다음 에제는 API에서 멤버를 가져온 다음 어떤 일을 해야 하는지 자세히 기술하겠습니다.</p>
<h3 id="api에서-멤버를-가져온-다음-어떤-일을-해야할까요">API에서 멤버를 가져온 다음 어떤 일을 해야할까요?</h3>
<pre><code class="language-js">const loadAndMapMembers = compose(
    combineWith(sessionStorage, &quot;members&quot;),
    save(sessionStorage, &quot;members&quot;),
    scopeMembers(window),
    logMemberInfoToConsole(&quot;name.first&quot;),
    countMemberBy(&quot;location.state&quot;),
    prepStatesForMapping,
    save(sessionStorage, &quot;map&quot;),
    renderUSMap
);

getFakeMembers(100).then(loadAndMapMembers);</code></pre>
<p>선언적 접근 방식이 더 읽기 쉽고, 그래서 더 추론하기 쉽습니다. 각 함수가 어떻게 구현 되었는지는 함수라는 추상화 아래에 감춰집니다. 각각의 작은 함수에는 그 함수가 하는 일을 잘 설명하는 이름을 붙어 있고, 그런 함수들이 조합된 방식을 보면 멤버 데이터를 불러와서 맵에 저장하고 출력하는 과정이 잘 드러납니다. 그리고 그런 과정을 설명하기 위한 주석은 따로 필요 없다. 근본적으로 선언적 프로그래밍은 추론하기 쉬운 애플리케이션을 만들어내며, 애플리케이션에 대한 추론이 쉬우면 그 애플리케이션의 규모를 확장하는 것도 더 쉽기 마련입니다.</p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://lottogame.tistory.com/593">선언적 프로그래밍과 명령형 프로그래밍의 차이점은 무엇입니까?</a></li>
<li><a href="https://ko.wikipedia.org/wiki/%EC%84%A0%EC%96%B8%ED%98%95_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D">선언형 프로그래밍</a></li>
<li><a href="https://boxfoxs.tistory.com/430">명령형 프로그래밍 VS 선언형 프로그래밍</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 입출력과 사칙연산-We love kriii]]></title>
            <link>https://velog.io/@hyun_sang/%EB%B0%B1%EC%A4%80-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EC%82%AC%EC%B9%99%EC%97%B0%EC%82%B0-We-love-kriii</link>
            <guid>https://velog.io/@hyun_sang/%EB%B0%B1%EC%A4%80-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EC%82%AC%EC%B9%99%EC%97%B0%EC%82%B0-We-love-kriii</guid>
            <pubDate>Wed, 07 Oct 2020 13:06:53 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 파이썬을 이용한 백준 알고리즘 공부를 지속적으로 하기 위해서 단계별로 풀고 있습니다.</p>
<h2 id="문제-소개">문제 소개</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/a20ecd88-2c5e-4459-89b7-7190b5c3d5f6/%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-10-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.59.24.png" alt=""></p>
<h2 id="예제-출력1">예제 출력1</h2>
<pre><code>강한친구 대한육군
강한친구 대한육군</code></pre><p>위와 같이 출력이 되어야 합니다. 어떻게 하면 출력할 수 있을까요?</p>
<h2 id="문제-풀이">문제 풀이</h2>
<pre><code class="language-py">data=&quot;강한친구 대한육군&quot;
print(data)
print(data)</code></pre>
<p><img src="https://images.velog.io/images/hyun_sang/post/3304a35e-74cd-4763-b576-2b7db4efd90b/%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-10-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2010.01.08.png" alt=""></p>
<p>위와 같이 풀시면 정상적으로 푸실 수 있습니다.
엄청나게 간단한 문제이기 때문에 제가 따로 설명을 드리지 않고 이해하실 수 있도록 하겠습니다.</p>
<blockquote>
<p><strong>기초 지식 없이 문제 풀이를 하면 무엇이 문제일까요?</strong>
기본 지식이 없다는 것은 마치 수학에서 빼기더하기도 못하는데 곱하기를 한다는 소리와 비슷합니다. 처음에는 간단하게 풀 수 있겠지만 기초가 어렵게 나온 문제를 풀면 힘들어 지기 마련입니다. 기초 지식 있으신 다음에 문제 풀이하시면 좋겠습니다 😆</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 입출력과 사칙연산-Hello World!]]></title>
            <link>https://velog.io/@hyun_sang/%EB%B0%B1%EC%A4%80-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EC%82%AC%EC%B9%99%EC%97%B0%EC%82%B0-Hello-World</link>
            <guid>https://velog.io/@hyun_sang/%EB%B0%B1%EC%A4%80-%EC%9E%85%EC%B6%9C%EB%A0%A5%EA%B3%BC-%EC%82%AC%EC%B9%99%EC%97%B0%EC%82%B0-Hello-World</guid>
            <pubDate>Wed, 07 Oct 2020 12:54:59 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 요즘 Python을 통해서 알고리즘 공부를 하고 있습니다.
그 중에서 <a href="https://www.acmicpc.net/step/1">백준(BaekJoon)</a>을 통해서 알고리즘 공부를 하고 있습니다.</p>
<h2 id="문제-소개">문제 소개</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/a19f5f0c-4453-49d4-bc68-659fc5a446f1/%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-10-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.22.03.png" alt=""></p>
<p><img src="https://images.velog.io/images/hyun_sang/post/50436db4-63ad-408f-a2e7-7d1471a349c4/%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-10-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%209.22.29.png" alt=""></p>
<pre><code>Hello World!</code></pre><p>Hello World!를 출력하면 되는 문제입니다. 
기본적인 파이썬 문법을 알고 계시면 간단하게 풀 수 있으실 겁니다.</p>
<h2 id="문제-풀이">문제 풀이</h2>
<pre><code class="language-py">print(&quot;Hello World!&quot;)</code></pre>
<p><img src="https://images.velog.io/images/hyun_sang/post/54b0d9d2-82be-4092-af51-996283e432c5/%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-10-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.55.03.png" alt="정답"></p>
<p>위와 같이 정답이 나오게 됩니다.
<img src="https://images.velog.io/images/hyun_sang/post/4379f5d4-04cc-4904-8812-9389a77db7ba/%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-10-07%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%208.56.32.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Firebase를 써야하는 이유는?]]></title>
            <link>https://velog.io/@hyun_sang/Firebase%EB%A5%BC-%EC%8D%A8%EC%95%BC%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94</link>
            <guid>https://velog.io/@hyun_sang/Firebase%EB%A5%BC-%EC%8D%A8%EC%95%BC%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0%EB%8A%94</guid>
            <pubDate>Sun, 04 Oct 2020 02:00:09 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요요요요 !! 추석 연휴에는 코로나19로 인해서 <a href="https://nomadcoders.co/nwitter">노마드 코더-트위터 클론코딩</a>를 통해서 열심히 React.js와 Firebase를 통해서 트위터 클론을 하고 있습니다.</p>
<h2 id="firebase란">Firebase란?</h2>
<p>파이어베이스(Firebase, Inc)사가 개발하고 2014년 구글에 인수된 모바일 및 웹 애플리케이션 개발 플랫폼입니다.
파이어베이스는 데이터 베이스를 구현할 필요 없이 프론트엔드에서 파이어베이스 API를 통해서 넘겨 주기만 하면 사용자 계정이 생성되기 때문에 더 간단하게 개발할 수 있습니다.</p>
<h2 id="reactjs와-firebase">React.js와 Firebase</h2>
<p>React.js와 Node.js를 이용해서 직접 DB와 백엔드를 만들어서 서비스를 제작할 수 있지만 백엔드를 모르는 프론트엔드 개발자 분들께도 추천 드립니다.
React.js와 firebase를 사용하게 되면 더 간단하게 서비스를 제작할 수 있습니다.
구지 힘들게 사용자를 관리할 필요 없고 파이어베이스에서 제공해 주는 대쉬보드를 통해서 사용자를 간단하게 확인할 수 있는 것 같습니다.</p>
<p><img src="https://images.velog.io/images/hyun_sang/post/a23cac42-a45d-49f4-9eb9-148128e47d91/%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-10-04%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2010.56.28.png" alt="Firebase DashBoard"></p>
<p><a href="https://github.com/Dev-HyunSang/pwitter"><strong>현상이가 하고 있는 프로젝트 보러 가기</strong></a></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://brunch.co.kr/@second-space/5">소규모 스타트업이 Firebase를 써야 하는 이유</a></li>
<li><a href="http://firebase.google.com/">Google-Firebase</a></li>
<li><a href="https://academy.realm.io/kr/posts/firebase-as-a-real-mobile-backend/">Firebase를 실제 모바일 백엔드로 사용하면 일어날 수 있는 일들</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[어디서 어떻게 기술 정보들을 찾아보고 알게 될까요?]]></title>
            <link>https://velog.io/@hyun_sang/%EC%96%B4%EB%94%94%EC%84%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B8%B0%EC%88%A0-%EC%A0%95%EB%B3%B4%EB%93%A4%EC%9D%84-%EC%B0%BE%EC%95%84%EB%B3%B4%EA%B3%A0-%EC%95%8C%EA%B2%8C-%EB%90%A0%EA%B9%8C%EC%9A%94</link>
            <guid>https://velog.io/@hyun_sang/%EC%96%B4%EB%94%94%EC%84%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EA%B8%B0%EC%88%A0-%EC%A0%95%EB%B3%B4%EB%93%A4%EC%9D%84-%EC%B0%BE%EC%95%84%EB%B3%B4%EA%B3%A0-%EC%95%8C%EA%B2%8C-%EB%90%A0%EA%B9%8C%EC%9A%94</guid>
            <pubDate>Sat, 03 Oct 2020 10:17:29 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요! 어떻게 하면 기술 정보들을 찾아보고 알게 될까요?
종류는 엄청나게 많습니다. 여러가지의 종류가 있습니다.</p>
<ul>
<li>뉴스레터(메일링)</li>
<li>블로그</li>
</ul>
<p>제가 추구하고 있는 방식은 두가지 방식이며 특히 뉴스레터의 경우에는 바로바로 한 눈에 볼 수 있어서 좋은 것 같가고 블로그는 뉴스레터의 여러 가지, 다양한 부분의 소식을 알려주지만 블로그는 한 부분의 내용을 알 수 있게 해 주는 것 같습니다.</p>
<h2 id="📄-medium-newsletter--blog">📄 Medium Newsletter + Blog</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/825aa175-4a6e-442c-910a-ac838c6c939a/%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-10-03%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.08.20.png" alt="Medium Blog"></p>
<p>두가지 다 할 수 있는 것은 바로 Medium에서 보내주는 뉴스레터 입니다.
뉴스레터와 함께 관심 있는 블로그 글을 바로 볼 수 있게 해 주었습니다.
단점은... 영어이라는 점...😭</p>
<h2 id="📹-webrtc-weekly-issue">📹 WebRTC Weekly Issue</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/28a32d75-ab01-4e93-9d9c-4c067d953107/%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-10-03%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.10.55.png" alt="WebRTC Weekly Issue "></p>
<p>WebRTC Issue에 대해서 알려주는 뉴스레터 서비스 입니다.
저는 WebRTC에 대해서 기술적인 부분에서 공부를 하고 있기 때문에 뉴스레터를 신청해서 보고 있습니다.</p>
<p><a href="https://webrtcweekly.com/">WebRTC Weekly Issue 신청하기</a></p>
<p>이 포스팅을 통해서 많은 분들께서 많은 정보를 빠르게 받아보실 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] 시맨틱 마크업]]></title>
            <link>https://velog.io/@hyun_sang/HTML-%EC%8B%9C%EB%A7%A8%ED%8B%B1-%EB%A7%88%ED%81%AC%EC%97%85</link>
            <guid>https://velog.io/@hyun_sang/HTML-%EC%8B%9C%EB%A7%A8%ED%8B%B1-%EB%A7%88%ED%81%AC%EC%97%85</guid>
            <pubDate>Sat, 03 Oct 2020 09:59:10 GMT</pubDate>
            <description><![CDATA[<p>시맨틱(Semantic)이란 &quot;의미론적인&quot;의 뜻을 가지며 마크업(Markup)이란 HTML 태그로 문서를 작성하는 것을 말합니다. 따라서, 시맨틱 마크업이란 <strong>의미를 잘 전달하도록 문서를 작성하는 것을 말합니다.</strong></p>
<h2 id="어떻게-작성할까">어떻게 작성할까?</h2>
<p>시맨틱 마크업을 하기 위해선 각 태그를 용도에 맞게 사용해야 합니다. 즉, 아래와 같은 것들을 말합니다.</p>
<ul>
<li>헤더/푸터에 <code>&lt;header&gt;</code> 와 <code>&lt;footer&gt;</code> 사용</li>
<li>메인 컨텐츠에 <code>&lt;main&gt;</code> 과 <code>&lt;section&gt;</code> 사용</li>
<li>독립적인 컨텐츠에 <code>&lt;article&gt;</code> 사용</li>
<li>최상위 제목으로 <code>&lt;h1&gt;</code> 사용</li>
<li>순서가 없는 목록으로 <code>&lt;ul&gt;</code>과 <code>&lt;li&gt;</code> 사용</li>
<li>내비게이션 <code>&lt;nav&gt;</code> 사용</li>
</ul>
<p>이런 식으로 태그가 가지고 있는 의미에 맞게 사용하는 것인데, 이런 점 이외에도 CSS 스타일을 명시하는 태그를 사용하지 않는 것 또한 시맨틱 마크업의 한 종류 입니다. 즉, 태그가 가지는 의미 자체가 스타일이라면 이는 마크업 자체가 스타일을 갖는 것이기 때문에 시맨틱 마크업에 적합하지 않습니다.</p>
<p>예를 들어보겠습니다, 효과를 부여하는 <code>&lt;strong&gt;</code> 과 <code>&lt;b&gt;</code> 태그가 있습니다. 둘은 동일하게 글자색을 진하게 하지만 <code>&lt;b&gt;</code> 태그의 경우는 그 자체가 &quot;blod&quot;의 약어이기 때문에 태그 자체가 스타일을 가진다고 할 수 있습니다. 하지만 <code>&lt;strong&gt;</code>의 경우는 &quot;그 안의 내용이 다른 내용보다 더 가종되어야 한다.&quot;라는 의미를 가지고 있기 때문에 시맨틱 마크업에 더 적합합니다.</p>
<h2 id="특징">특징</h2>
<ul>
<li>검색엔진이 시맨틱 태그를 중요한 키워드로 간주하기 때문에 <strong>검색엔진 최적화(SEO)에 유리합니다.</strong></li>
<li><strong>웹 접근성</strong> 측면에서, 시각장애가 있는 사용자로 하여금 그 의미를 훨씬 잘 파악할 수 있습니다.</li>
<li>단순한 <code>div</code> , <code>span</code> 으로 둘러싸인 요소들보다 코드를 볼 때 <strong>가독성이 더 좋습니다.</strong></li>
</ul>
<p>실무에서 시맨틱 마크업이 완벽하게 쓰이는 것은 이상적이긴 하지만, 이러한 특징을 고려하여서 웹 사이트를 구성하는 것이 많은 측면에서 바람직하고 좋다고 봅니다.</p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/html/semantic.md">Must Know About Frontend-Semantic</a></li>
<li><a href="https://stackoverflow.com/questions/1729447/what-are-the-benefits-of-using-semantic-html">Stackoverflow-What are the benefits of using semantic HTML?</a></li>
<li><a href="https://stackoverflow.com/questions/271743/whats-the-difference-between-b-and-strong-i-and-em">Stackoverflow-What&#39;s the difference between and,and ?</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Glossary/Semantics">MDN-Semantics</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] script, script async, script defer]]></title>
            <link>https://velog.io/@hyun_sang/HTML-script-script-async-script-defer</link>
            <guid>https://velog.io/@hyun_sang/HTML-script-script-async-script-defer</guid>
            <pubDate>Sat, 03 Oct 2020 08:59:18 GMT</pubDate>
            <description><![CDATA[<ul>
<li><code>&lt;script&gt;</code>: HTML 파싱이 중단되고 즉시 스크립트가 로드되며 로드된 스크립트가 실행되고 파싱이 재개됩니다.</li>
<li><code>&lt;script async</code>: HTML 파싱과 병렬적으로 로드가 되는데, 스크립트를 실행할 때는 파싱이 중단됩니다, 구글 애널리틱스와 같이 다른 스크립트가 의존하지 않는 독자적인 스크립트를 로드할 때 적합합니다.</li>
<li><code>&lt;script defer&gt;</code>: HTML 파싱과 병렬적으로 로드가 되는데, 파싱이 끝나고 스크립트를 로드합니다. <code>&lt;body&gt;</code> 태그 직전에 <code>&lt;script&gt;</code>를 삽입하는 것과 동작은 같지만 브라우저 호환성에서 다를 수 있으므로 그냥 <code>&lt;body&gt;</code> 태그 직전에 삽입하는 것이 좋습니다.</li>
</ul>
<p><strong>주의할 점은 async와 defer의 경우 <code>src</code> 속성이 적용되지 않습니다.</strong></p>
<p><img src="https://images.velog.io/images/hyun_sang/post/4cef38a6-de37-475b-8de4-1a61e12c46cc/script.png" alt="script"></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/html/script-tag-type.md">Must Know About Frontend-Script Tag</a></li>
<li><a href="https://stackoverflow.com/questions/10808109/script-tag-async-defer">Script Tag-async&amp;defer</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Web/HTML/Element/script">MDN-<code>&lt;script&gt;</code>:스크립트 요소</a></li>
<li><a href="http://tcpschool.com/html-tags/script">TCP SCHOOL-HTML <code>&lt;script&gt;</code> 태그</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] local storage VS session storage VS cookie]]></title>
            <link>https://velog.io/@hyun_sang/HTML-local-storage-VS-session-storage-VS-cookie</link>
            <guid>https://velog.io/@hyun_sang/HTML-local-storage-VS-session-storage-VS-cookie</guid>
            <pubDate>Sat, 03 Oct 2020 08:49:47 GMT</pubDate>
            <description><![CDATA[<p>모두 클라이언트 상에서 key/value 쌍을 저장할 수 있는 매커니즘으로 value는 반드시 문자열 이어야 합니다. 또한 모두 동일 출처 정책(SOP)을 따르기 때문에 다른 도메인에서 접근할 수 있습니다.
<img src="https://images.velog.io/images/hyun_sang/post/4d20830b-d2f8-45ee-8185-4a18059554f7/%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-10-03%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.43.40.png" alt="local storage VS session storage VS cookie"></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/html/web-storage-api.md">Must Know About Frontend-Web Storage API</a></li>
<li><a href="https://stackoverflow.com/questions/19867599/what-is-the-difference-between-localstorage-sessionstorage-session-and-cookies">What is the difference between localStorage, sessionStorage, session and cookies?</a></li>
<li><a href="https://stackoverflow.com/questions/3220660/local-storage-vs-cookies">Local Storage vs Cookies</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API">MDN-Web Storage API</a></li>
<li><a href="https://ponyozzang.tistory.com/341">JavaScript LocalStorage 사용 방법과 쿠기와 차이점</a></li>
<li><a href="https://ko.javascript.info/localstorage">JavaScript Info-localStorage와 sessionStorage</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies">MDN-HTTP Cookie</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] data- 속성]]></title>
            <link>https://velog.io/@hyun_sang/HTML-data-%EC%86%8D%EC%84%B1</link>
            <guid>https://velog.io/@hyun_sang/HTML-data-%EC%86%8D%EC%84%B1</guid>
            <pubDate>Fri, 02 Oct 2020 09:45:03 GMT</pubDate>
            <description><![CDATA[<p><a href="https://developer.mozilla.org/ko/docs/Web/API/Document_Object_Model/%EC%86%8C%EA%B0%9C">DOM</a>에 데이터를 저장할 수 있는 사용자 정의 속성으로써 <code>data-</code> 다음 오는 값이 데이터가 됩니다. 이 속성은 사용하고자 하는 용도에 적합한 속성이나 요소가 없을 때 사용하며 해당 웹 페이지가 독자적으로 사용하는 값 입니다. 즉, 웹 페이지와 소프트웨어가 이 속성을 사용해서는 안 됩니다.</p>
<p>예를 들어서, 음악 사이트에서 앨범 트랙의 음악을 리스트 형식으로 나타내는데 그걸 시간 순으로서 정렬하기 위해서 <code>data-</code> 속성으로 음악 시간을 삽입한다고 예를 들면</p>
<pre><code class="language-html">&lt;ol&gt;
  &lt;li data-length=&quot;2m11s&quot;&gt;빨간맛&lt;/li&gt;
  ...
&lt;/ol&gt;</code></pre>
<p>만약 이 음악 사이트와 전혀 상관이 없는 외부에서 음악 시간을 알아내기 위해 사용한다면 목적에 부합하지 않지 않습니다. 따라서 <code>data-</code> 속성은 해당 사이트만의 자체 스크립트를 위한 속성이라고 할 수 있습니다.</p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/html/data.md">Must Know About Frontend-data- 속성</a></li>
<li><a href="https://www.w3.org/TR/2011/WD-html5-20110525/elements.html#custom-data-attribute">W3, Custom Data Attribute</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Learn/HTML/Howto/%EB%8D%B0%EC%9D%B4%ED%84%B0_%EC%86%8D%EC%84%B1_%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0">MDN-데이터 속성 사용하기</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] 표준 모드와 호환 모드]]></title>
            <link>https://velog.io/@hyun_sang/%ED%91%9C%EC%A4%80-%EB%AA%A8%EB%93%9C%EC%99%80-%ED%98%B8%ED%99%98-%EB%AA%A8%EB%93%9C</link>
            <guid>https://velog.io/@hyun_sang/%ED%91%9C%EC%A4%80-%EB%AA%A8%EB%93%9C%EC%99%80-%ED%98%B8%ED%99%98-%EB%AA%A8%EB%93%9C</guid>
            <pubDate>Fri, 02 Oct 2020 09:34:40 GMT</pubDate>
            <description><![CDATA[<p>과거의 웹 페이지는 <a href="https://ko.wikipedia.org/wiki/%EB%84%B7%EC%8A%A4%EC%BC%80%EC%9D%B4%ED%94%84">넷스케이프</a>와 익스플로러 버전이 따로 존재했고 웹 표준이 없었습니다. 그러나 W3C가 웹 표준을 만들면서 브라우저가 웹 사이트를 제대로 표현할 수 없게 되자 렌더링을 할 때 표준 모드(Standards mode)와 호환 모드(Quirks mode)로 렌더링을 할 수 있게 옵션을 제공하였습니다.</p>
<p><strong>브라우저는 HTML 문서가 DOCTYPE을 가지고 있지 않으면 호환 모드로 렌더링을 하고, 가지고 있다면 주어진 DOCTPYE에 맞게 표준 모드로 렌더링을 하게 됩니다.</strong> 호환 모드로 렌더링을 하게 되면 오래된 웹페이지들을 최신 버진의 브라우저에서도 깨지지 않게 하기 때문에 각 브라우저마다 다르게 보일 수 있습니다. 예를 들어서 IE의 경우 호환 모드에서 박스 모델(Box Model)을 잘못 해석하지만, 나머지 브라우저들을 그렇지 않습니다.</p>
<p>결론적으로, 정말 특별한 경우가 아니라면 DOCTPYE을 명시하여 브라우저가 표준 모드로 렌더링 하게 할려면, 현재 시점에서 HTML5에서 권장하는 방식인 <code>&lt;!DOCTYPE html&gt;</code>을 사용하는 것이 가장 바람직 합니다.</p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/html/standard-quirks.md">Must Know About Frontend-표준모드와 호환모드</a></li>
<li><a href="https://xn--xy1bk56a.run/front-end-master/lecture/html-dtd-standard-document.html#%EC%98%81%EC%83%81-%EA%B0%95%EC%9D%98">야무의 Front-End Master-표준 호환모드</a></li>
<li><a href="https://developer.mozilla.org/ko/docs/Web/HTML/Quirks_Mode_and_Standards_Mode">MDN-호환 모드와 표준 모드</a></li>
<li><a href="http://chongmoa.com/441">쿼크모드(Quirks mode)와 표준모드(Standard mode)</a></li>
<li><a href="https://stackoverflow.com/questions/1695787/what-is-quirks-mode">What is quirks mode?</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[HTML] DOCTYPE]]></title>
            <link>https://velog.io/@hyun_sang/DOCTYPE</link>
            <guid>https://velog.io/@hyun_sang/DOCTYPE</guid>
            <pubDate>Fri, 02 Oct 2020 09:11:02 GMT</pubDate>
            <description><![CDATA[<p>Document Type의 약자로써, <strong>HTML이 어떤 버전으로 작성되었는지 미리 선언하여 웹 브라우저가 내용을 올바로 표시할 수 있도록 해 줍니다.</strong> <code>&lt;!DOCTYPE&gt;</code>으로 선언하는데 이걸 해주지 않으면 <strong>호환 모드(quirks mode)</strong> 로 동작합니다. 호환 모드의 경우 각 브라우저마다 문서를 나타내는 방식이 다르기 때문에 크로스 브라우징 이슈가 휠씬 심해지게 됩니다.</p>
<h2 id="dtddocument-type-definition">DTD(Document Type Definition)</h2>
<p>DTD(Document Type Definition)이란 문서 형식을 정의해놓은 것으로 DOCTYPE을 명시할 때 사용하고 있습니다. 즉, HTML 문서가 어떤 문서 형식을 따르는지 DOCTYPE에서 DTD를 지정합니다.</p>
<p>자세한 내용을 알고 싶으시면 <a href="https://www.w3.org/QA/2002/04/valid-dtd-list.html">W3C Recommended list of Doctype declarations </a>에서 확인 하실 수 있습니다.</p>
<ul>
<li>XHTML 1.1</li>
<li>XHTML 1.0</li>
<li>HTML 4.01</li>
<li>HTML5
현 시점에서는 HTML5의 DTD로 DOCTYPE을 명시하는 것이 가장가장 바람직합니다.<pre><code class="language-html">&lt;!DOCTPYE&gt;</code></pre>
</li>
</ul>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/html/doctype.md">Must Know About Frontend-DOCTYPE</a></li>
<li><a href="https://ko.wikipedia.org/wiki/%EB%AC%B8%EC%84%9C_%ED%98%95%EC%8B%9D_%EC%A0%95%EC%9D%98">Wikpedia-문서 형식 정의(Document Type Definition, DTD)</a></li>
<li><a href="http://tcpschool.com/xml/xml_dtd_intro">TCPSchool-DTD 개요</a></li>
<li><a href="https://stackoverflow.com/questions/414891/what-is-doctype">What is DOCTPYE</a></li>
<li><a href="https://aboooks.tistory.com/169">비표준 모드 quirks mode, 표준 모드 standards mode 차이와 DOCTYPE</a></li>
<li><a href="https://webdir.tistory.com/40">DOCTYPE(문서형 정의) 선언</a></li>
<li><a href="https://stackoverflow.com/questions/4153403/what-is-difference-between-xhtml-and-html">What is difference between XHTML and HTML?</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[.env를 사용해야 하는 이유 ❣️]]></title>
            <link>https://velog.io/@hyun_sang/.env%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</link>
            <guid>https://velog.io/@hyun_sang/.env%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0</guid>
            <pubDate>Thu, 01 Oct 2020 08:10:47 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 요즘 추석이지만 코로나19로 인해서 아무곳도 못 가고 있습니다.
그러면서 <a href="https://github.com/Dev-HyunSang/pwitter">Pwitter</a>라는 Twitter를 따라하는 프로젝트를 진행하고 있습니다.
React.js를 사용하면서 새로 알게 된 <code>.env</code>를 사용 해야 하는 이유에 대해서 알아 볼려고 합니다.</p>
<h2 id="env란">.env란?</h2>
<p>엄밀한 정의는 아니지만, 환경변수는 특정 process를 위한 key-value 형태의 변수라고 할 수 있습니다.
Node.js와 React.js에서 사용할 수 있습니다. 변수를 사용함으로써 보안성 있는 코드를 작성할 수 있게 될 수 있습니다.</p>
<h2 id="예제">예제</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/a44f966b-f4c6-4ca2-9715-db404b9ed025/%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-10-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.06.24.png" alt="Ex Code">
이와 같은 React.js에서 사용할 수 있습니다.
제가 하고 있는 프로젝트는 <a href="https://firebase.google.com/">Firebase</a>를 사용할 수 있기 때문에 API_KEY와 각종 정보를 사용하기 때문에 더 안전하게 사용하기 위해서 <code>.env</code>를 사용하면 좋을 것 같습니다.
<img src="https://images.velog.io/images/hyun_sang/post/2103fd7a-88e3-4fcc-a72c-b48284700d34/%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-10-01%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%205.06.39.png" alt=".env"></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[React Hook "useState" is called in function Error 😭]]></title>
            <link>https://velog.io/@hyun_sang/React-Hook-useState-is-called-in-function-Error</link>
            <guid>https://velog.io/@hyun_sang/React-Hook-useState-is-called-in-function-Error</guid>
            <pubDate>Sun, 27 Sep 2020 03:36:12 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, TypeScritp와 React를 이용한 WebRTC 개발을 하고 있습니다.
프로젝트 도중 아래와 같은 오류 사항이 발생되어서 뒤적뒤적 찾아본 결과 입니다.</p>
<h2 id="오류-내용-😭">오류 내용 😭</h2>
<p><img src="https://images.velog.io/images/hyun_sang/post/6e201854-5449-47c3-ba19-19e76a441fa0/%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-09-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.13.32.png" alt="Error"></p>
<p>위 화면에서 보면 React Hook &quot;useState&quot;, &quot;useEffect&quot;에 대한 React function component에 대한 오류가 있어서 개발자들의 신 Stackoverflow를 통해서 해결 하였습니다.</p>
<pre><code class="language-typescript">import React, { useState, useEffect} from &quot;react&quot;;
import RTCVideo from &#39;../Components/RTCVideo&#39;;


const rtc = () =&gt; {
  const [localStream, setLocalStream] = useState&lt;MediaStream&gt;();

  useEffect(()=&gt;{
    navigator.mediaDevices.getUserMedia({video: true})
    .then(stream=&gt;{
      setLocalStream(stream);
    })
  },[]);

  return (

    &lt;div&gt;
      &lt;RTCVideo
        mediaStream = {localStream}
      /&gt;
    &lt;/div&gt;
  );
};

export default rtc;</code></pre>
<p>위 코드에서 오류가 있습니다. <code>const rtc = () =&gt;</code>에 대해서 오류가 있습니다. 소문자와 대문자로 컴포넌트 이름을 하면 좋을 것 같다고 나와 있습니다.</p>
<h3 id="해결방안-🤩">해결방안 🤩</h3>
<p><img src="https://images.velog.io/images/hyun_sang/post/b58f4735-a8a1-47f8-808d-82cb5a520f60/%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-09-27%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%2012.31.08.png" alt="Stackoverflow"></p>
<p>위에 내용에서 보다 싶이 소문자로 컴포넌트 이름을 사용하지 말고 대문자로 컴포넌트를 짓지 말고 대문자와 소문자를 사용하여서 해결을 하였습니다.</p>
<h2 id="해결-완료-💚">해결 완료 💚</h2>
<pre><code class="language-typescript">import React, { useState, useEffect} from &quot;react&quot;;
import RTCVideo from &#39;../Components/RTCVideo&#39;;


const RTC = () =&gt; {
  const [localStream, setLocalStream] = useState&lt;MediaStream&gt;();

  useEffect(()=&gt;{
    navigator.mediaDevices.getUserMedia({video: true})
    .then(stream=&gt;{
      setLocalStream(stream);
    })
  },[]);

  return (
    &lt;div&gt;
      &lt;RTCVideo
        mediaStream = {localStream}
      /&gt;
    &lt;/div&gt;
  );
};

export default RTC;</code></pre>
<p>위와 같이 대문자와 소문자를 이용해서 만들거나 저처럼 대문자로 만들면 됩니다!
그러면 위와 같이 해결하면 됩니다 🤩</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[주민등록번호 수집하면 어떻게 될까?]]></title>
            <link>https://velog.io/@hyun_sang/%EC%A3%BC%EB%AF%BC%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8-%EC%88%98%EC%A7%91%ED%95%98%EB%A9%B4-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%90%A0%EA%B9%8C</link>
            <guid>https://velog.io/@hyun_sang/%EC%A3%BC%EB%AF%BC%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8-%EC%88%98%EC%A7%91%ED%95%98%EB%A9%B4-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%90%A0%EA%B9%8C</guid>
            <pubDate>Sat, 26 Sep 2020 03:28:56 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 서비스 기획할 때 항상 궁금했던 &quot;주민등록번호는 수집하면 어떻게 될까?&quot;라는 궁금증이 있어서 궁금증을 해결하기 위해서 한 번 작성 해 보겠습니다.</p>
<h2 id="주민등록번호란">주민등록번호란?</h2>
<p>대한민국에서 대한민국에 거주하는 모든 국민들에게 발급 되는 주민등록증에 적혀져 있는 국민식별제도입니다. 1968년 11월 21일부터 편리한 간첩 식별 등의 목저긍로 주민등록증이 발급되면서 부여되기 시작되었습니다.
주민등록번호 체게는 처음 만들어진 이래 2014년까지 큰 변화 없이 사용되고 있었지만, 잇따른 개인정보 유출 사고로 인하여 전 국민의 개인정보가 유출될 정도로 심각한 사회문제가 되자 체계를 개편하는 안이 논의되기 시작했습니다.</p>
<h2 id="주민번호-처리-금지-안내">주민번호 처리 금지 안내</h2>
<p>개인정보보호법에 의해서 엄격히 금지되고 있으며 근거 없이 주민번호 수집시 처벌 받을 수도 있습니다.</p>
<h3 id="무단-수집하거나-유출시에는">무단 수집하거나 유출시에는?</h3>
<p>개인정보보호법 24조에 의거하여서 고유식별정보의 처리 제한과 주민등록번호 처리의 제한이 있기에 24조 2에서 제외된 항목을 이유로 수집시에는 처벌 받을 수 있습니다. 위 항목에 벗어나서 수집할 경우에는 개인정보보호법 32조의 2에 의거하여서 5억원 이하의 과징금을 받을 수도 있습니다.
<img src="https://images.velog.io/images/hyun_sang/post/5eec2f81-1d8b-46dc-81e3-343eb542cff4/%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-09-26%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2010.58.07.png" alt="개인정보보호법 24조"></p>
<p>개인정보보호법 32조의 2에 의거하여 개인정보 유출시 과징금을 받을 수도 있습니다. </p>
<blockquote>
<p>① 보호위원회는 개인정보처리자가 처리하는 주민등록번호가 분실ㆍ도난ㆍ유출ㆍ위조ㆍ변조 또는 훼손된 경우에는 5억원 이하의 과징금을 부과ㆍ징수할 수 있다. 다만, 주민등록번호가 분실ㆍ도난ㆍ유출ㆍ위조ㆍ변조 또는 훼손되지 아니하도록 개인정보처리자가 제24조제3항에 따른 안전성 확보에 필요한 조치를 다한 경우에는 그러하지 아니하다.  &lt;개정 2014. 11. 19., 2015. 7. 24., 2017. 7. 26., 2020. 2. 4.&gt;</p>
</blockquote>
<p><img src="https://images.velog.io/images/hyun_sang/post/0223a730-3e39-4e5e-a500-f75d3c723e86/%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-09-26%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2011.00.30.png" alt="개인정보보호법 32조 2"></p>
<h2 id="대체-수단은">대체 수단은?</h2>
<p>대체 수단은 무엇일까요? 주민등록번호를 법적으로 수집이 불가능하기 때문에 어떻게 본인인지 알고 성인인지 미성년자인지 확인할 수 있을까요?
한국인터넷진흥원에서는 <strong>i-PIN</strong>, <strong>휴대폰</strong>, <strong>신용카드</strong>를 이용한 대체 수단을 만들어 두었습니다. 많은 서비스에서는 i-PIN과 휴대폰을 이용해서 인증을 할 수 있도록 하였습니다.</p>
<p><a href="https://www.kisa.or.kr/business/infor/main_sub6.jsp">한국 인터넷진흥원 - &lt;주민번호 대체수단&gt;</a></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://mois.go.kr/frt/bbs/type010/commonSelectBoardArticle.do?bbsId=BBSMSTR_000000000008&amp;nttId=40667">행전안전부 - 주민등록번호, 이제는 함부로 수집하지 못한다!</a></li>
<li><a href="https://www.privacy.go.kr/a3sc/law/wab/forbidden.do">한국인터넷진흥원 개인정보보호 포털 - 주민번호 처리금지 안내</a></li>
<li><a href="http://www.law.go.kr/%EB%B2%95%EB%A0%B9/%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%20%EB%B3%B4%ED%98%B8%EB%B2%95">개인정보보호법</a></li>
<li><a href="https://www.kisa.or.kr/business/infor/main_sub6.jsp">한국인터넷진흥원 - 주민번호 대체수단 </a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Front End] CSS 애니메이션 VS JS(JavaScript) 애니메이션]]></title>
            <link>https://velog.io/@hyun_sang/CSS-%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98-VS-JSJavaScript-%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98</link>
            <guid>https://velog.io/@hyun_sang/CSS-%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98-VS-JSJavaScript-%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98</guid>
            <pubDate>Fri, 25 Sep 2020 12:23:54 GMT</pubDate>
            <description><![CDATA[<p>많은 웹사이트에서 애니메이션 효과를 부여할 때 CSS의 <code>transition</code>/<code>animation</code> 속성을 사용할 수 있고 JS(JavaScript)의 <code>setInterval()</code>/<code>requestAnimationFrame()</code> 을 사용할 수 있습니다, 하지만 각각을 사용할 때마다의 특징이 다르고 장단점이 있기 때문에 어떤 차이가 있는지 알아두는 것은 좋습니다.</p>
<h2 id="css-애니메이션">CSS 애니메이션</h2>
<p>일반적으로, 마우스를 올렸을 때 혹은 메뉴 버튼의 전환과 같은 간단하게 처리하는 애니메이션의 경우 CSS로 처리할 수 있습니다. 예를 들어서 200 크기의 정사각형을 왼쪽 위에서 오른쪽 아래로 350px 움직이게 하는 애니메이션을 구현한다고 하면, <code>transform</code>의 <code>translate</code>를 사용해서 구현할 수 있습니다. 하지만 이를 JS(JavaScript)로 구현하기 위해선 <code>setInterval</code>을 통해서 계속해서 <code>style.top</code>과 <code>style.left</code> 속성을 변화시켜줘야 합니다. 이렇게 되면 이 속성은 브라우저의 렌더링 과정 reflow(layout) 단계를 발생시키기 때문에 애니메이션 부자연스럽게 끊기는 듯한 느낌을 받게 됩니다. 이런 점에서 바닐라 JS(JavaScript)로 애니메이션을 구현하는 것보다 CSS로 구현하는 것이 좋다고 할 수 있습니다. 이 외에도 다양한 장점들이 있으며 정리하자면 아래 항목과 같습니다.</p>
<ul>
<li>반응형으로 애니메이션을 구현하기에 유용한데, 미디어 쿼리로 애니메이션을 적용하면 됩니다.</li>
<li>외부 라이브러리를 필요로 하지 않습니다.</li>
<li>CSS 자체가 선언형(declarative)이기 때문에 어떤 요소가 애니메이션을 가져야 한다는 직관적인 표현이 가능합니다.</li>
<li>메인 쓰레드가 아닌 별도의 컴포지터 쓰레드(Compositor Thread)에서 그려지기 때문에 메인 쓰레드에서 작업하는 JS보다 효율적입니다.</li>
</ul>
<h2 id="jsjavascript-애니메이션">JS(JavaScript) 애니메이션</h2>
<p>CSS로 처리하기에는 훨씬 복잡하고 무거운 애니메이션 작업들을 효율적이고, 세밀하게 다루기 위해서 사용하고 있습니다. 바닐라 자바스크립트로 구현할 경우 위에서 살펴본 바와 같이 계속해서 요소의 위치를 재계산하기 때문에 비효율적이며 사용자 눈에 가장 부드러운 60fps가 유지되지 않습니다. 이 때문에 RAF(RequestAnimationFrame) API가 등장했고 구현방식은 동일하지만 60fps를 보장할 수 있게 되었습니다. 이외에도 외부 라이브러리인 <a href="http://velocityjs.org/">velocity.js</a>와 <a href="https://greensock.com/gsap/">GSAP</a> 같은 라이브러리를 통해서 성능 종흔 애니메이션을 구현할 수 있습니다. 최근에 Web Animations API가 나오기도 했는데 현재(2020년 4월 28일) 기준으로 지원하는 브라우저가 현저히 적기 때문에 아직까진 기존의 방법들이 더 높은 생산성을 가진다고 할 수 있습니다. 보통 복잡한 애니메이션을 구현하려고 하면 외부 라이브러리를 사용할텐데 이것이 CSS에 비해 장점은 아래 행목과 같습니다.</p>
<ul>
<li>요소의 스타일이 변하는 순간마다 제어할 수 있기 때문에 애니메이션의 세밀한 구성이 가능해집니다.</li>
<li>GPU를 통한 하드웨어 가속을 제어할 수 있습니다. 이는 CSS의 특정 속성으로 인한 가속을 막아주는데, 하드웨어 가속이 모바일에서 성능저하를 발생시킬 수 있기 때문에 이런 면에선 좋습니다.</li>
<li>브라우저 호환성 측면에서 <code>transition</code>/<code>animation</code> 속성보다 뛰어납니다.</li>
</ul>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/frontend/css-js-animation.md">Must Know About Frontend CSS 애니메이션 VS JS 애니메이션</a></li>
<li><a href="https://d2.naver.com/helloworld/5237120">Naver D2, 최신 브라우저의 내부 살펴보기 3 - 렌더러 프로세스의 내부 동작</a></li>
<li><a href="http://sculove.github.io/blog/2013/12/05/animation-for-performance/">애니메이션 성능을 높이는 방법</a></li>
<li><a href="https://davidwalsh.name/css-js-animation">Julian Shapiro, CSS vs. JS Animation: Which is Faster?</a></li>
<li><a href="https://sculove.github.io/slides/webAnimation/#/">손찬욱님, Web Animation API 프레젠테이션</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Front End] CI와 CD]]></title>
            <link>https://velog.io/@hyun_sang/CI%EC%99%80-CD</link>
            <guid>https://velog.io/@hyun_sang/CI%EC%99%80-CD</guid>
            <pubDate>Fri, 25 Sep 2020 12:03:02 GMT</pubDate>
            <description><![CDATA[<h2 id="ci-continuous-integration-지속적-통합">CI (Continuous Integration, 지속적 통합)</h2>
<p>CI는 빌드와 테스트를 자동화해서 공유 저장소에 병합시키는 프로세스를 뜻한다. Git과 같은 버전관리 시스템을 사용할 때 여러명의 개발자가 하나의 공유 저장소를 사용하는 경우가 많았습니다.
이렇게 되면 새로운 코드의 변경 사항이 저장소에 통합되지 않을 경우 서로 충돌할 수 있습니다.
따라서 빌드와 테스트 자동화부터 코드의 일관성(Consistency)을 제공하기 때문에 지속적으로 통합한다는 용어를 사용하는 것입니다.</p>
<h2 id="cd-continuous-deliverydeploy-지속적-전달배포">CD (Continuous Delivery/Deploy, 지속적 전달/배포)</h2>
<p>CD는 CI의 빌드/테스트를 통해서 정상적으로 수행됨을 확인하면 이는 배포를 수동으로 하느냐 자동으로 하느냐에 따라 2가지로 나뉩니다.</p>
<h3 id="지속적-전달">지속적 전달</h3>
<p>프로덕션 배포를 위한 상태가 되고 배포 자체는 수동으로 실행합니다.
개발팀과 비즈니스팀 간의 커뮤니케이션 부족 문제를 해결합니다.</p>
<h3 id="지속적-배포">지속적 배포</h3>
<p>프로덕션까지 자동으로 배포합니다.
어플리케이션의 제공 속도를 증가시킵니다.</p>
<p>CI/CD의 대표적인 서비스로는 Jenkins, Travis CI, Circle CI 등이 있으며 현직에서는 Jenkins를 많이 사용하는 것 같습니다.</p>
<p><img src="https://images.velog.io/images/hyun_sang/post/f721fc6a-b134-44b4-aafd-353e5a49f547/ci-cd.png" alt="">
<a href="https://aws.amazon.com/ko/devops/continuous-integration/">이미지 출처</a></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://github.com/baeharam/Must-Know-About-Frontend/blob/master/Notes/frontend/ci-cd.md">Must Know About Frontend CI/CD</a></li>
<li><a href="https://aws.amazon.com/ko/devops/continuous-integration/">AWS, 지속적 통합이란 무엇입니까?</a></li>
<li><a href="https://www.redhat.com/ko/topics/devops/what-is-ci-cd">Red Hat, CI/CD(지속적 통합/지속적 제공): 개념, 방법, 장점, 구현 과정</a></li>
<li><a href="https://jhleed.tistory.com/130">개발자노트님, CI(Continuous Integration), CD(Continuous Delivery/Deployment)에 대해 알아보자.
</a></li>
<li><a href="https://ict-nroo.tistory.com/31">[Jenkins] 젠킨스란 무엇인가</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTTP 동적 적응 스트리밍는 무엇일까?]]></title>
            <link>https://velog.io/@hyun_sang/HTTP-%EB%8F%99%EC%A0%81-%EC%A0%81%EC%9D%91-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</link>
            <guid>https://velog.io/@hyun_sang/HTTP-%EB%8F%99%EC%A0%81-%EC%A0%81%EC%9D%91-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C</guid>
            <pubDate>Thu, 24 Sep 2020 12:28:46 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요, 멀티미디어 공학도 같이 공부하고 있는 프론트엔드 개발자 박현상입니다.
오늘은 우연히 멀티미디어 공학과 관련된 논문을 찾다가 <a href="http://www.kibme.org/resources/journal/20190411153438418.pdf">WebRTC 기반 P2P 통신 병용 DASH 시스템을 위한 전달 이력 기반 피어 선택 알고리듬</a>이라는 논문을 봤습니다.
도대체 DASH는 어떻게 사용되는 기술인지에 대해서 서술해 보았습니다!</p>
<h2 id="http-동적-적응-스트리밍dynamic-adaptive-streaming-over-http-dash는-무엇일까">HTTP 동적 적응 스트리밍(Dynamic Adaptive Streaming over HTTP, DASH)는 무엇일까?</h2>
<p>HTTP 동적 적응 스트리밍(Dynamic Adaptive Streaming over HTTP, DASH 또는 MPEG-DASH)은 전통적인 HTTP 웹 서버로부터 전달되는, 인터넷을 경유하는 미디어의 고품질 스트리밍을 가능케 하는 적응 비트레이트 스트리밍 기술의 하나입니다. 애플의 <a href="https://ko.wikipedia.org/wiki/HTTP_%EB%9D%BC%EC%9D%B4%EB%B8%8C_%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D">HTTP 라이브 스트리밍(HLS)</a> 솔루션과 비슷하게 MPEG-DASH는 내용을 일련의 작은 크기의 HTTP 기반 파일 세그먼트들로 분리시킴으로써 동작하며, 각 세그먼트는 영화나 스포츠 이벤트 생방송 등 잠재적으로 수시간에 걸친 내용물으 재생 시간의 짧은 간격(interval)을 포함하고 있습니다.
이 콘텐츠는 다양한 비트레이트로 이용이 가능합니다. 콘텐츠가 MPEG-DASH 클라이언트에 의해 재생되면 클라이언트는 비트레이트 적응(ABR) 알고리즘을 사용하여 재생시 멈춤이나 재버퍼링을 일으키지 않고 다운로드 할 수 있도록 가능한 최고 비트레이트의 세그먼트를 자동으로 선별하고 있습니다.
현재의 MPEG-DASH 참조 클라이언트 <a href="https://reference.dashif.org/dash.js/">dash.js</a>는 버퍼 기반(BOLA)과 하이브리드(DYNAMIC) 비트레이트 적응 알고리즘을 모두 제공합니다. 그러므로 MPEG-DASH 클라이언트는 변화하는 네트워크 상황에 순응하고 멈춤이나 재버퍼링을 거의 일으키지 않으면서 고품질의 재생을 제공할 수 있게 됩니다.</p>
<p>MPEG-DASH는 국제 표준화된 최초의 적응 비트레이트 HTTP 기반 스트리밍 솔루션입니다.
MPEG-DASH는 전송 프로토콜과 혼동해서는 안 되고 MPEG-DASH가 사용하는 전송 프로토콜은 TCP입니다. 
MPEG-DASH는 필연적으로 모든 월드 와이드 웹 콘텐츠의 전송에 사용되는 기존 HTTP 웹 서버 하부 구조를 사용하고 있으며 인터넷에 연결된 텔레비전, TV 셋톱박스, 데스크톱 컴퓨터, 스마트폰, 태블릿 등과 같은 장치들이 인터넷을 경유하여 전달되는 멀티미디어 콘텐츠(동영상, TV, 라디오 등)을 소비할 수 있게 해 주며 다양한 인터넷 수신 상황에 대처하고 있습니다. 적응 스트리밍 솔루션의 표준화는 해당 솔루션이 범용적인 상황에 채택될 수 있음을 시장에 보증하는 것을 의미하며, 이는 마치 이와 유사하지만 사유 솔루션인 마이크로소프트의 스무스 스트리밍이라든지, 어도비의 HDS와 비견될 수 있습니다. HDS, 스무스 스트리밍과 달리 DASH는 코덱에 의존적이지 않으므로 H.265, H.264, VP9 등 어떠한 코딩 포맷으로 인코딩된 콘텐츠라도 사용이 가능합니다.</p>
<h2 id="표준화">표준화</h2>
<p>MPEG-DASH 기술은 MPEG를 통해 개발되었습니다. DASH의 작업은 2010년 시작되었으며 2011년 1월 초안 국제 표준이 되었고 2011년 11월 국제 표준이 되었습니다. MPEG-DASH 표준은 2012년 4월 출판되었으나 2019년 <a href="https://standards.iso.org/ittf/PubliclyAvailableStandards/c075485_ISO_IEC_23009-1_2019.zip">MPEG-DASH ISO/IEC 23009-1:2019</a>을 통해서 개정되었습니다.</p>
<h2 id="dash의-두가지-요소">DASH의 두가지 요소</h2>
<h3 id="mpmedia-presentation">MP(Media Presentation)</h3>
<ol>
<li>오디오/비디오는 하나의 파일로 묶을 수도 있습니다. (Ex. HTTP Live Streaming)</li>
<li>각각의 파일로 분리될 수도 있습니다. (Ex. Smooth Streaming)<h3 id="mpdmedia-presentation-description">MPD(Media Presentation Description)</h3>
</li>
<li>스트림의 정보를 나타내는 XML 입니다.</li>
</ol>
<p><img src="https://www.researchgate.net/profile/Theodore_Zahariadis2/publication/257979627/figure/fig2/AS:339889523576832@1458047385314/MPD-file-embedding-CURLS-5-Acknowledgement-The-work-presented-in-this-paper-is-based-on.png" alt="Media Presentation Description XML EX"></p>
<pre><code class="language-xml">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;MPD xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xmlns=&quot;urn:mpeg:dash:schema:mpd:2011&quot;
  xsi:schemaLocation=&quot;urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd&quot;
  type=&quot;static&quot;
  mediaPresentationDuration=&quot;PT654S&quot;
  minBufferTime=&quot;PT2S&quot;
  profiles=&quot;urn:mpeg:dash:profile:isoff-on-demand:2011&quot;&gt;

  &lt;BaseURL&gt;http://example.com/ondemand/&lt;/BaseURL&gt;
  &lt;Period&gt;
    &lt;!-- English Audio --&gt;
    &lt;AdaptationSet mimeType=&quot;audio/mp4&quot; codecs=&quot;mp4a.40.5&quot; lang=&quot;en&quot; subsegmentAlignment=&quot;true&quot; subsegmentStartsWithSAP=&quot;1&quot;&gt;
      &lt;Representation id=&quot;1&quot; bandwidth=&quot;64000&quot;&gt;
        &lt;BaseURL&gt;ElephantsDream_AAC48K_064.mp4.dash&lt;/BaseURL&gt;
      &lt;/Representation&gt;
    &lt;/AdaptationSet&gt;
    &lt;!-- Video --&gt;
    &lt;AdaptationSet mimeType=&quot;video/mp4&quot; codecs=&quot;avc1.42401E&quot; subsegmentAlignment=&quot;true&quot; subsegmentStartsWithSAP=&quot;1&quot;&gt;
      &lt;Representation id=&quot;2&quot; bandwidth=&quot;100000&quot; width=&quot;480&quot; height=&quot;360&quot;&gt;
        &lt;BaseURL&gt;ElephantsDream_H264BPL30_0100.264.dash&lt;/BaseURL&gt;
      &lt;/Representation&gt;
      &lt;Representation id=&quot;3&quot; bandwidth=&quot;175000&quot; width=&quot;480&quot; height=&quot;360&quot;&gt;
        &lt;BaseURL&gt;ElephantsDream_H264BPL30_0175.264.dash&lt;/BaseURL&gt;
      &lt;/Representation&gt;
      &lt;Representation id=&quot;4&quot; bandwidth=&quot;250000&quot; width=&quot;480&quot; height=&quot;360&quot;&gt;
        &lt;BaseURL&gt;ElephantsDream_H264BPL30_0250.264.dash&lt;/BaseURL&gt;
      &lt;/Representation&gt;
      &lt;Representation id=&quot;5&quot; bandwidth=&quot;500000&quot; width=&quot;480&quot; height=&quot;360&quot;&gt;
        &lt;BaseURL&gt;ElephantsDream_H264BPL30_0500.264.dash&lt;/BaseURL&gt;
      &lt;/Representation&gt;
    &lt;/AdaptationSet&gt;
  &lt;/Period&gt;
&lt;/MPD&gt;</code></pre>
<p><a href="https://www.researchgate.net/profile/Theodore_Zahariadis2/publication/257979627/figure/fig2/AS:339889523576832@1458047385314/MPD-file-embedding-CURLS-5-Acknowledgement-The-work-presented-in-this-paper-is-based-on.png">이미지 출처</a>
<a href="https://stackoverflow.com/questions/53621375/does-hls-and-mpeg-dash-live-in-http-message-body">소스코드 출처</a></p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://unipro.tistory.com/111">Media Presentation Description(MPD) 예제</a></li>
<li><a href="https://stackoverflow.com/questions/53621375/does-hls-and-mpeg-dash-live-in-http-message-body">Does HLS and MPEG-DASH live in HTTP message body?</a></li>
<li><a href="https://mpeg.chiariglione.org/standards/mpeg-dash/media-presentation-description-and-segment-formats">Media presentation description and segment formats</a></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Front End] 모듈 번들러와 트랜스파일러]]></title>
            <link>https://velog.io/@hyun_sang/%EB%AA%A8%EB%93%88-%EB%B2%88%EB%93%A4%EB%9F%AC%EC%99%80-%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8C%8C%EC%9D%BC%EB%9F%AC</link>
            <guid>https://velog.io/@hyun_sang/%EB%AA%A8%EB%93%88-%EB%B2%88%EB%93%A4%EB%9F%AC%EC%99%80-%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8C%8C%EC%9D%BC%EB%9F%AC</guid>
            <pubDate>Wed, 23 Sep 2020 13:14:53 GMT</pubDate>
            <description><![CDATA[<p>모듈 번들러와 트랜스파일러에 대해서 알아보겠습니다💚</p>
<h2 id="모듈-번들러">모듈 번들러</h2>
<p>현대의 프론트엔드 개발은 모듈단위로 파일 엮어서 개발하는 방식입니다. 즉, 모듈은 서로 의존성을 띄고 있는데 이런 점에서 다음과 같은 문제들이 생깁니다.</p>
<ul>
<li>수많은 모듈들의 순서를 어떻게 처리할 것인가? (의존성 처리)</li>
<li>모듈이 많아질수록 HTTP 요청이 많아질텐데 이로 인한 오버헤드는 어떻게 해결할 것인가?</li>
<li>ES6+ 스펙의 코드를 어떻게 처리할 것인가?</li>
</ul>
<p>위 문제들을 해결하기 위해 등장한 것이 <strong>모듈 번들러(Module Bundler)로 각각의 모듈 의존성에 해결하여 하나의 자바스크립트 파일로 만듦과 동시에 ES6+ 스펙을 ES5로 변환까지 해주는 도구</strong> 입니다. 이미지 압축, 최소화(Minification) 등의 여러가지 기능들도 제공하며 유명한 번들러로는 Webpack, Rarcel, Rollup 등이 있습니다.</p>
<h2 id="트랜스파일러">트랜스파일러</h2>
<p>트랜스파일러(Transpiling)이란 특정 언어로 작성된 코드를 비슷한 다른 언어로 변환시키는 행위를 말하며 이를 해주는 것이 트랜스파일러(Transpiler)입니다. 트랜스파일러가 필요한 이유는 모든 브라우저가 ES6+의 기능을 제공하지 않기 때문에 이를 ES5 코드로 변환시키는 과정이 필요합니다.
트랜스파일러는 이 작업을 수행해 주고 있습니다. 사실 ES6+의 기능 뿐만 아니라 리액트의 JSX를 자바스크립트코드로 변환시킨다거나 타입스크립트를 자바스크립트로 변환시크는 등의 역할도 트랜스파일러의 기능 중에 하나입니다. ES6+나 JSX를 변환시키는 트랜스파일러로는 바벨(Babel)이 있으며 타입스크립트를 변환시키는 도구로는 타입스크립트 트랜스파일러가 있습니다. 보통 프론트엔드 프레임워크 및 라이브러리를 사용해서 개발할 때 모듈 번들러에 트랜스파일러를 추가해서 사용하는 방식을 사용합니다.</p>
<h2 id="참고">참고</h2>
<ul>
<li><a href="https://dev.to/tanhauhau/what-is-module-bundler-and-how-does-it-work-3gp2">What is module bundler and how does it work?</a></li>
<li><a href="https://ooz.co.kr/416">트랜스파일이란?</a></li>
</ul>
]]></description>
        </item>
    </channel>
</rss>