<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>mira.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 21 Oct 2021 03:12:31 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. mira.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/mira_j" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[JavaScript] 파일 다운로드]]></title>
            <link>https://velog.io/@mira_j/JavaScript-%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C</link>
            <guid>https://velog.io/@mira_j/JavaScript-%ED%8C%8C%EC%9D%BC-%EB%8B%A4%EC%9A%B4%EB%A1%9C%EB%93%9C</guid>
            <pubDate>Thu, 21 Oct 2021 03:12:31 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>a 링크의 download 속성</p>
<pre><code>&lt;a href=&quot;src/pages/corplist/Sample.xlsx&quot; download=&quot;Sample.xlsx&quot;&gt;
   &lt;button type=&quot;button&quot;&gt;Download&lt;/button&gt; 
&lt;/a&gt; </code></pre></li>
<li><p>사용자 정의 함수로 JS에서 텍스트 파일 생성 및 다운</p>
</li>
</ol>
<ol start="3">
<li>axios 라이브러리 사용<pre><code>const handleClick_Download = () =&gt; {
     axios({
       url: &#39;src/pages/corplist/Sample.xlsx&#39;,
       method: &#39;GET&#39;,
       responseType: &#39;blob&#39;
       })
       .then((response) =&gt; {
             const url = window.URL
                   .createObjectURL(new Blob([response.data]));
             const link = document.createElement(&#39;a&#39;);
             link.href = url;
             link.setAttribute(&#39;download&#39;, &#39;Sample.xlsx&#39;);
             document.body.appendChild(link);
             link.click();
             document.body.removeChild(link);
       })
   }</code></pre></li>
</ol>
<p>참고: <a href="https://www.delftstack.com/ko/howto/javascript/javascript-download/">https://www.delftstack.com/ko/howto/javascript/javascript-download/</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React] Hooks]]></title>
            <link>https://velog.io/@mira_j/React-Hooks</link>
            <guid>https://velog.io/@mira_j/React-Hooks</guid>
            <pubDate>Thu, 26 Aug 2021 06:51:04 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>useEffect</p>
</li>
<li><p>,  두번째 파라메터 빈 배열 넣으면, 처음 렌더링 될 때만 실행되고 업데이트때 실행 안됨</p>
</li>
<li><p>,    특정 값이 변경될 대만 호출하고 싶을 때는, 두번째 파라메터에 검사하고 싶은 값 넣으면 됨</p>
</li>
<li><p>,    (클래스형 comp 에서는 componentDidUpdate(prevProps, prevState) {</p>
<pre><code>   if(prevProps.value !== this.props.value){
       doSomething();
       }
   }</code></pre><p>Cleanup function(뒷정리 함수) : 컴포넌트 언마운트나 업데이트 직전 실행하고 싶을 때 반환</p>
</li>
<li><p>useReducer</p>
</li>
<li><p>,    현재 상태, 업데이트를 위해 필요한 정보를 담은 액션(action) 값을 전달 받아 새로운 상태를 반환하는 함수. </p>
</li>
<li><p>,    const [state, dispatch] = useReducer(reducer, {value: 0});</p>
</li>
<li><p>,    첫번째 파라미터에 리듀서 함수, 두번째는 리듀서 함수의 값</p>
</li>
<li><p>,    컴포넌트 업데이트 로직을 컴포넌트 밖으로 뺄 수 있는 장점</p>
</li>
<li><p>useMemo</p>
</li>
<li><p>, 렌더링 과정에서 특정 값이 바뀌었을 때만 연산 실행, 안 바뀌었으면 이전 결과 다시 사용</p>
</li>
<li><p>useCallback</p>
</li>
<li><p>,    첫번째 param: 생성하고 싶은 함수, 두번째 param: 배열(어떤 값이 바뀌었을 때 함수를 새로 생성해야 하는지)</p>
</li>
<li><p>,    빈 배열 ? 렌더링 될 때 한번만. 그 외 변수 ? 인풋 내용이 바뀌거나 새로운 항목 추가될 때 </p>
</li>
<li><p>,    숫자, 문자열, 객체처럼 일반 값 재사용? useMemo, 함수 재사용? useCallback</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React] 라이프사이클 메서드 ]]></title>
            <link>https://velog.io/@mira_j/React-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4-%EB%A9%94%EC%84%9C%EB%93%9C</link>
            <guid>https://velog.io/@mira_j/React-%EB%9D%BC%EC%9D%B4%ED%94%84%EC%82%AC%EC%9D%B4%ED%81%B4-%EB%A9%94%EC%84%9C%EB%93%9C</guid>
            <pubDate>Thu, 26 Aug 2021 06:49:09 GMT</pubDate>
            <description><![CDATA[<p>7장. 컴포넌트의 라이프사이클 메서드 </p>
<ul>
<li>클래스형 컴포넌트에만 사용(함수형의 Hooks기능)</li>
<li>마운트/ 업데이트/ 언마운트로 나뉨</li>
<li>총 9가지. Will-, Did-, </li>
</ul>
<p>1)    마운트 : DOM이 생성되고 웹 브라우저 상 나타나는 것
Constructor(컴포넌트 새로 만들 때마다 호출되는 생성자) 
-&gt; getDerivedStateFromProps(props에 있는 값을 state에 넣을 때 사용) 
-&gt; render(UI를 렌더링) 
-&gt; componentDidMount(컴포넌트가 웹 브라우저상에 나타난 후 호출. 다른 자바스크립트 library 호출, 이벤트 등록, 각종 비동기 작업 처리)</p>
<p>2) 업데이트 – props/ state가 바뀔 때, 부모 컴포넌트 리 렌더링, this.forceUpdate
getDerivedStateFromProps
shouldComponentUpdate(반드시 true/false 반환. This.props/state , nextProps/nextState)
render
getSnapshotBeforeUpdate
componentDidUpdate</p>
<p>2)    언마운트 – 컴포넌트를 DOM에서 제거 componentwillUnmount</p>
<p>**    Render() 내에서는 이벤트 설정이 아닌 곳에서 setState사용하거나 DOM에 접근하면 안됨.
DOM의 정보를 가져오거나 state변화를 줄 때는 componentDidMount()에서 처리해야함</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React] 컴포넌트 반복]]></title>
            <link>https://velog.io/@mira_j/React-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EB%B0%98%EB%B3%B5</link>
            <guid>https://velog.io/@mira_j/React-%EC%BB%B4%ED%8F%AC%EB%84%8C%ED%8A%B8-%EB%B0%98%EB%B3%B5</guid>
            <pubDate>Thu, 26 Aug 2021 06:47:47 GMT</pubDate>
            <description><![CDATA[<p>6장. 컴포넌트 반복</p>
<p>배열에 새 항목 추가할 때, concat 사용.(push는 기존 배열자체를 변경, concat은 새로운 배열 생성)
js에서 클래스 메서드는 기본적으로 바인딩 되어 있지 않음.</p>
<p>This – 객체 안의 메서드에서 this는 그 메서드가 포함된 object를 가리킴
클래스형 컴포넌트에서는 </p>
<p>1)    constructor에 this.handleClick = this.handleClick.bind(this)로 바인딩 하거나 
2)    handleClick = () =&gt; {   }  처럼 선언
함수형 컴포넌트 에서는 콜백에 arrow function으로 바인딩
&lt;button onClick = {() =&gt; this.handleClick}&gt;</button></p>
<p>    컴포넌트 배열 렌더링 할 때는 key값 설정에 주의!(always unique)
    상태 안에서 배열을 변형할 땐, concat, filter등 배열 내장 함수를 사용해 새로운 배열을 만든 후 상태로 설정해야 됨.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React] Component]]></title>
            <link>https://velog.io/@mira_j/React-Component</link>
            <guid>https://velog.io/@mira_j/React-Component</guid>
            <pubDate>Thu, 26 Aug 2021 06:46:31 GMT</pubDate>
            <description><![CDATA[<p>*<em>함수형 컴포넌트 *</em>
-, state/ lifecycle api사용 불가 =&gt; 리액트 v16.8이후 Hooks기능으로 보완
-, 클래스형 컴포넌트 보다 선언하기 간편</p>
<p>*<em>ES6 화살표함수 *</em>
-, 주로 함수를 파라미터로 전달할 때 사용
-, 일반 함수는 자신이 종속된 객체를 this로 가리키며, arrow function은 자신이 종속된 인스턴스를 가리킴
-, 값을 연산해 바로 반환할 때 사용하면 가독성 높아짐
e.g. Const triple = (value) =&gt; value + 3;</p>
<p>    reactjs code snippets 단축키
rsc(함수형; class component skeleton)/ rcc(클래스형; stateless component skeleton) </p>
<p>    state를 다루어야 한다면 class기반, 그 외의 경우라면 함수형 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[React] 중괄호]]></title>
            <link>https://velog.io/@mira_j/React-%EC%A4%91%EA%B4%84%ED%98%B8</link>
            <guid>https://velog.io/@mira_j/React-%EC%A4%91%EA%B4%84%ED%98%B8</guid>
            <pubDate>Thu, 26 Aug 2021 06:45:41 GMT</pubDate>
            <description><![CDATA[<ul>
<li>import 할때 중괄호의 의미</li>
</ul>
<pre><code>const a = 1;
const c = 3;
export {a};
export const b = 2;
export default c;


import d, {a,b as e} from &#39;./Example&#39;;
console.log(a, e, d) ; //1, 2, 3</code></pre><p>** default로 선언된 내용은 {} 없이 받을 수 있고 변수명 달라도 됨.
** 하지만, default로 선언되지 않은 것들은 {} 안에서 무조건 보내진 이름 그대로 선언.</p>
<p>예) export default function DataRow()
=&gt; import DataRow from &#39;../xx&#39;</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Calculation]]></title>
            <link>https://velog.io/@mira_j/Calculation</link>
            <guid>https://velog.io/@mira_j/Calculation</guid>
            <pubDate>Thu, 26 Aug 2021 06:33:53 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>소수점 계산할 때 FLOAT, REAL형식 사용 지양 (이유: 근사 데이터 형식이라 정확한 값을 저장하지 않고 가까운 값을 저장하기 때문)
  =&gt; e.g.  출근율 계산하는 경우, 총 출근한 사람 수 / 전체 기사 수  (정수/정수)</p>
<p>  convert(decimal(10,2), isnull( sum([1]*1.0), 0.0) / isnull(sum([1]) + sum([2])+sum([3]), 0) * 100) </p>
<p>  =&gt; 나누는 분자에 1.0을 곱해 소수점으로 만든다
  =&gt; INTEGER, DECIMAL, MONEY, SMALLMONEY를 사용
  =&gt; e.g. DECIMAL(5,2) 는 정수 5자리,소수 2자리가 아니라 전체 5자리 중, 소수점이 2자리까지 확보 되었다는 의미.(정수 최대 3자리, 소수점 최대 2자리)
  =&gt; 12.345 =&gt; 12.35 / 1.2345 =&gt; 1.23 / 123.1 =&gt; 123.10 / 1234.5 =&gt; 에러! / 12345 =&gt; 에러!  (정수가 3자리 이상이므로 OVERFLOW 에러 발생)</p>
<ul>
<li>FLOAT  =&gt; DECIMAL로 변경할 때는, 기존 FLOAT속성일 때 데이터가 어떻게 저장되어 있느냐를 확인해야 됨.</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[REPLICATE]]></title>
            <link>https://velog.io/@mira_j/REPLICATE</link>
            <guid>https://velog.io/@mira_j/REPLICATE</guid>
            <pubDate>Thu, 26 Aug 2021 06:29:43 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p><strong>REPLICATE</strong>(&#39;채울 문자&#39;, 전체 길이 - LEN(&#39;데이터&#39;) + &#39;데이터&#39; : SELECT결과에 대해 특정 길이로 맞춰서, 모자라는 부분에 특정 문자나 숫자 채움</p>
<p>   REPLICATE ( string_expression ,integer_expression ) </p>
<p>   SELECT REPLICATE(&#39;0&#39;, 6 - LEN(&#39;1234&#39;) + &#39;1234&#39;)   -- 결과 : 001234(좌측에 0 붙임)
   SELECT &#39;1234&#39;+ REPLICATE(&#39;0&#39;, 6- LEN(&#39;1234&#39;))     -- 결과 : 123400(우측에 0 붙임)</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[COUNT]]></title>
            <link>https://velog.io/@mira_j/COUNT</link>
            <guid>https://velog.io/@mira_j/COUNT</guid>
            <pubDate>Thu, 26 Aug 2021 06:27:54 GMT</pubDate>
            <description><![CDATA[<p>COUNT(*)은 COUNT(1)과 동일. (NULL과 무관하게 모든 행을 카운트)
COUNT(컬럼)은 NULL인 행 포함 안 함.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Troubleshooting histories...]]></title>
            <link>https://velog.io/@mira_j/Troubleshooting-histories</link>
            <guid>https://velog.io/@mira_j/Troubleshooting-histories</guid>
            <pubDate>Thu, 26 Aug 2021 06:26:46 GMT</pubDate>
            <description><![CDATA[<ul>
<li>TOP, OFFSET 또는 FOR XML을 함께 지정하지 않으면 뷰, 인라인 함수, 파생 테이블, 하위 쿼리 및 공통 테이블 식에서 ORDER BY 절을 사용할 수 없습니다.</li>
</ul>
<p>일반적으로 뷰 안에 ORDER BY를 포함시킬 수 없고, ORDER BY를 포함하려면 TOP N 을 써야한다.
전체를 조회해야 한다면 top n % 라고 사용.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Cursor Loop]]></title>
            <link>https://velog.io/@mira_j/Cursor-Loop</link>
            <guid>https://velog.io/@mira_j/Cursor-Loop</guid>
            <pubDate>Thu, 26 Aug 2021 06:19:06 GMT</pubDate>
            <description><![CDATA[<p>@@FETCH_STATUS = 0(0:수형, -1:실패, -2: 행 없음)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Angular] Directives]]></title>
            <link>https://velog.io/@mira_j/Angular-ngModel</link>
            <guid>https://velog.io/@mira_j/Angular-ngModel</guid>
            <pubDate>Thu, 26 Aug 2021 06:02:24 GMT</pubDate>
            <description><![CDATA[<ul>
<li>*ngModel 은 html과 ts가 양방향으로 묶여있다는 개념.
FormsModule import되어야 함.</li>
</ul>
<p>하지만 엄밀히 말하면 양방향 바인딩은 존재하지 않고, 내부적으로 프로퍼티 바인딩과 이벤트 바인딩을 쓰죠.
[(ngModel)]은 내부적으로 아래와 같이 동작합니다.
[ngModel]=&quot;budget&quot;, (ngModelChange)=&quot;budget =$event&quot;</p>
<p>출처: <a href="https://dschci.tistory.com/84">https://dschci.tistory.com/84</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[DevExtreme] 참고용]]></title>
            <link>https://velog.io/@mira_j/DevExtreme-%EC%B0%B8%EA%B3%A0%EC%9A%A9</link>
            <guid>https://velog.io/@mira_j/DevExtreme-%EC%B0%B8%EA%B3%A0%EC%9A%A9</guid>
            <pubDate>Thu, 26 Aug 2021 05:59:46 GMT</pubDate>
            <description><![CDATA[<ol>
<li>dataGrid</li>
</ol>
<ul>
<li><p>dxi-item 에서 visible/disable처리시 다른 컴포넌트 깨지는 문제?  내부에 있는 각각의 컴포넌트를 visible/disable처리. </p>
</li>
<li><p>cellTemplate</p>
<pre><code>&lt;dx-data-grid [dataSource]=&quot;m_RowData&quot;&gt;
  &lt;dxo-selection mode=&quot;single&quot; allowSelectAll=&quot;false&quot;&gt;&lt;/dxo-selection&gt;
  &lt;dxo-scrolling mode=&quot;infinite&quot; rowRenderingMode=&quot;standard&quot;&gt;&lt;/dxo-scrolling&gt;
  &lt;dxi-column caption=&quot;&quot; dataField=&quot;CarId&quot; width=&quot;100&quot; datType=&quot;string&quot; alignment=&quot;center&quot; [allowSorting]=&quot;true&quot;&gt;&lt;/dxi-column&gt;
  &lt;dxi-column *ngFor=&quot;let i of m_DateArray&quot; id=&quot;{{i}}&quot; dataField=&quot;{{i}}&quot; [width]=&quot;m_columnWidth&quot; datType=&quot;string&quot; alignment=&quot;center&quot; [allowSorting]=&quot;true&quot; cellTemplate=&quot;cellTemplate&quot;&gt;&lt;/dxi-column&gt;
  &lt;div *dxTemplate=&quot;let data of &#39;cellTemplate&#39;&quot;&gt;
      &lt;div *ngIf=&quot;m_DefaultTypeYN == true; then checkbox; else text&quot;&gt;&lt;/div&gt;
      &lt;ng-template #checkbox&gt;
          &lt;dx-check-box class=&quot;checktextcolor longer&quot; [disabled]=&quot;false&quot; (onValueChanged)=&quot;OnValueChanged_Checkbox($event)&quot; [value]=&quot;data.value&quot;&gt;&lt;/dx-check-box&gt;
      &lt;/ng-template&gt;
      &lt;ng-template #text&gt;
          &lt;span&gt;{{data.value}}&lt;/span&gt;
      &lt;/ng-template&gt;
  &lt;/div&gt;
&lt;/dx-data-grid&gt;</code></pre></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[느낌표 두개(Double exclamanation) ]]></title>
            <link>https://velog.io/@mira_j/%EB%8A%90%EB%82%8C%ED%91%9C-%EB%91%90%EA%B0%9CDouble-exclamanation</link>
            <guid>https://velog.io/@mira_j/%EB%8A%90%EB%82%8C%ED%91%9C-%EB%91%90%EA%B0%9CDouble-exclamanation</guid>
            <pubDate>Thu, 26 Aug 2021 05:57:06 GMT</pubDate>
            <description><![CDATA[<ol>
<li><p>확실한 논리 결과(참/거짓)을 얻기 위해 사용. undefined/공백/0 은 false 그외 true 리턴</p>
</li>
<li><p>느낌표 세개는 두개의 부정</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MSSQL] APPLY Operator]]></title>
            <link>https://velog.io/@mira_j/MSSQL-APPLY-Operator</link>
            <guid>https://velog.io/@mira_j/MSSQL-APPLY-Operator</guid>
            <pubDate>Thu, 26 Aug 2021 05:55:12 GMT</pubDate>
            <description><![CDATA[<p>CROSS APPLY 는 INNER JOIN,
OUTER APPLY는 LEFT JOIN과 동일한 결과 반환 가능.</p>
<p>APPLY 장점? </p>
<ol>
<li><p>외부 테이블의 컬럼을 인자로 제공할 수 있음</p>
</li>
<li><p>테이블 반환 함수도 사용 가능(JOIN연산자로는 불가능)</p>
</li>
<li><p>특정 상황에는 JOIN보다 더 좋은 성능을 발휘할 수 있음</p>
</li>
</ol>
<p>참고 : <a href="https://goldswan.tistory.com/m/16">https://goldswan.tistory.com/m/16</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[TypeScript] Array]]></title>
            <link>https://velog.io/@mira_j/Javascript-Array</link>
            <guid>https://velog.io/@mira_j/Javascript-Array</guid>
            <pubDate>Thu, 26 Aug 2021 05:45:10 GMT</pubDate>
            <description><![CDATA[<p><strong>map</strong> 
배열에 담긴 문자 리터럴에서 일부 속성만 추출할 때</p>
<pre><code>let result = objArray.map(a =&gt; a.foo);</code></pre><p><strong>join</strong> 
배열의 모든 값들을 연결한 문자열을 리턴</p>
<pre><code>this.m_SelectedLocalAreaCode = array.map(x =&gt; x.LocalArea).join(&#39;/&#39;);</code></pre><p><strong>findIndex</strong></p>
<pre><code>arr.findIndex(x =&gt; x.value === &#39;something&#39;);</code></pre><p><strong>기타</strong> 
-, 배열에서 중복값 제거</p>
<pre><code> let ret = this.m_HistoryRow.filter((item, index) =&gt; this.m_HistoryRow.indexOf(item) === index);
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[MSSQL] 자주 사용하는 함수]]></title>
            <link>https://velog.io/@mira_j/MSSQL-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%ED%95%A8%EC%88%98</link>
            <guid>https://velog.io/@mira_j/MSSQL-%EC%9E%90%EC%A3%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94-%ED%95%A8%EC%88%98</guid>
            <pubDate>Thu, 26 Aug 2021 05:41:32 GMT</pubDate>
            <description><![CDATA[<ul>
<li><p>SELECT value FROM <strong>STRING_SPLIT</strong>(@SelectedCodes,&#39;/&#39;)</p>
</li>
<li><p>*<em>SP_XML_PREPAREDOCUMENT *</em> XML변환 함수  </p>
</li>
<li><p>테이블 LOCK 걸렸을 때
EXEC <strong>SP_LOCK</strong> 
KILL &#39;NUMBER OF LOCK&#39;</p>
</li>
<li><p>특정 기간에 해당하는 모든 날짜 출력
SELECT CONVERT(VARCHAR, DATEADD(D, NUMBER, @FromDate), 112) AS &#39;DATE&#39;
FROM Master..spt_values
WHERE Type = &#39;P&#39; AND NUMBER &lt;= DATEDIFF(D, @FromDate, @ToDate)</p>
</li>
<li><p>ROW_NUMBER() OVER(PARTITION BY A ORDER BY B DESC)<br>A컬럼을 기준으로 그룹을 나누고, A컬럼으로 나누어진 그룹 내에서 B를 기준으로 ORDER BY 정렬</p>
</li>
<li><p>ROLLUP 
방법1 : GROUP BY ROLLUP(그룹컬럼)
방법2 : GROUP BY 그룹컬럼 WITH ROLLUP</p>
</li>
</ul>
<p>GROUPING(ID)의 결과가 0이면 데이터, 1이면 합계(추가된 행)</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Angular] ]]></title>
            <link>https://velog.io/@mira_j/Angular</link>
            <guid>https://velog.io/@mira_j/Angular</guid>
            <pubDate>Thu, 26 Aug 2021 05:39:08 GMT</pubDate>
            <description><![CDATA[<ol>
<li>Template reference variable (테이블 참조 변수)</li>
</ol>
<ul>
<li>#로 선언</li>
<li>템플릿 내에서만 유효하고, 컴포넌트 클래스에 어떠한 side effect도 주지 않음</li>
</ul>
<ol start="2">
<li>Safe navigation operator (세이프 내비게이션 연산)</li>
</ol>
<ul>
<li>null이나 undefined 에러 회피하기 위해 사용
e.g. {{obj}}  결과 없으면 화면에 아무것도 출력 안함
{{obj.id}}  에러(cannot read property &#39;id&#39; of undefined)
{{obj?id}} 에러 안 남</li>
</ul>
<ol start="3">
<li><p>비동기 Pipe</p>
<ul>
<li>Promise 자동 실행</li>
<li>Observable 직접 구독</li>
</ul>
<ol start="4">
<li>인터셉터 체인</li>
</ol>
</li>
<li><p>LifeCycle Hooks</p>
</li>
<li><p>라우터 이벤트</p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[MSSQL] 테이블 in 동적쿼리]]></title>
            <link>https://velog.io/@mira_j/MSSQL%ED%85%8C%EC%9D%B4%EB%B8%94in%EB%8F%99%EC%A0%81%EC%BF%BC%EB%A6%AC</link>
            <guid>https://velog.io/@mira_j/MSSQL%ED%85%8C%EC%9D%B4%EB%B8%94in%EB%8F%99%EC%A0%81%EC%BF%BC%EB%A6%AC</guid>
            <pubDate>Thu, 26 Aug 2021 05:28:36 GMT</pubDate>
            <description><![CDATA[<h4 id="테이블-변수--------declare-temp-table">테이블 변수        (DECLARE @TEMP TABLE)</h4>
<p>-, 소용량에서 쿼리비용/ 데이터 처리 유리 (INSERT데이터가 100건 이하, 1~2개 컬럼인 경우 사용)
-, SP내에서 사용하면 임시테이블보다 유리(다시 컴파일 하는 일 줄어듦)
-, 해당 배치(Batch) 혹은 저장 프로시져내로 Scope가 제한됨 =&gt; 정의된 함수나 프로시저 처리 끝나면 자동으로 정리됨
-, 장점 : PK, UNIQUE, CHECK 제약 사용 가능. IDENTITY 지정 가능. 
-, 단점 : FK 사용 불가, ALTER TABLE 불가, 추가 IDX 선언 불가
-, 가능하면 PK, UNIQUE 지정해서 정렬된 형태로 저장해 사용</p>
<h4 id="임시테이블--------create-table-temp">임시테이블        (CREATE TABLE #TEMP)</h4>
<p>-, #(로컬), ##(전역)으로 시작
-, DROP하지 않으면 세션 연결기간 동안 유지. 사용자 연결 끊기면 자동 삭제
    =&gt; 모든 세션에서 공유하기 때문에 동시에 사용할 경우 LOCK 걸릴 수 있음
-, 대용량에서 처리 유리. (INSERT되는 데이터가 100건 이상인 경우)
-, 세션단위 처리시에 사용
-, 장점 : 인덱스 작성 가능, FK제외한 나머지 제약 지정 가능, ALTER TABLE가능, INSERT INTO 함께 사용 가능</p>
<p>결론 : Dynamic SQL문 안에 테이블변수를 사용하고 이를 EXECUTE로 실행한다면 이는 현재 배치와 별도의 Context를 가지므로 테이블 변수를 인식할 수 없다</p>
<p>참고 : <a href="http://www.sqlprogram.com/TIPS/tip-table_variable.aspx">http://www.sqlprogram.com/TIPS/tip-table_variable.aspx</a>
<a href="https://blog.sonim1.com/166">https://blog.sonim1.com/166</a></p>
]]></description>
        </item>
    </channel>
</rss>