<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>물음표 살인마가 되자</title>
        <link>https://velog.io/</link>
        <description>개발자의 기초 다지기 ₍ ᐢ. ̫ .ᐢ ₎</description>
        <lastBuildDate>Mon, 04 Nov 2024 07:13:23 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>물음표 살인마가 되자</title>
            <url>https://velog.velcdn.com/images/sun_ovo/profile/1766ceca-8861-4ae9-80c6-0ab042910426/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. 물음표 살인마가 되자. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sun_ovo" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[SQL을 공부해보자]]></title>
            <link>https://velog.io/@sun_ovo/SQL%EC%9D%84-%EA%B3%B5%EB%B6%80%ED%95%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@sun_ovo/SQL%EC%9D%84-%EA%B3%B5%EB%B6%80%ED%95%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Mon, 04 Nov 2024 07:13:23 GMT</pubDate>
            <description><![CDATA[<h1 id="dml">DML</h1>
<table>
<thead>
<tr>
<th><strong>유형</strong></th>
<th><strong>설명</strong></th>
</tr>
</thead>
<tbody><tr>
<td><code>SELECT</code></td>
<td>칼럼에 저장된 데이터 조회</td>
</tr>
<tr>
<td><code>INSERT</code></td>
<td>칼럼에 데이터 추가</td>
</tr>
<tr>
<td><code>UPDATE</code></td>
<td>칼럼에 저장된 데이터 수정</td>
</tr>
<tr>
<td><code>DELETE</code></td>
<td>칼럼에 저장된 데이터 삭제</td>
</tr>
</tbody></table>
<h2 id="select-명령어"><code>SELECT</code> 명령어</h2>
<pre><code class="language-sql">SELECT [ALL | DISTINCT] 속성명1, 속성명2 [AS 별칭], ...
    FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC]];</code></pre>
<h3 id="select-절">SELECT 절</h3>
<ul>
<li>ALL : 모든 튜플 검색 (중복 허용)</li>
<li>DISTINCT : 중복된 속성 조회될 경우 한개만 검색 (중복 비허용)</li>
<li>AS : 속성명 별칭 사용 가능</li>
<li>그 외</li>
</ul>
<pre><code>| **문법** | **설명** |
| --- | --- |
| IFNULL(컬럼, ‘값’) | 조회 시 컬럼의 값이 NULL이면 ‘값’으로 치환하여 반환 |
| DATE_FORMAT(컬럼, 형식) | %Y : 4자리 연도 (2023) &lt;br&gt;%y : 2자리 연도 (23)&lt;br&gt;%m : 2자리 월 (01-12)&lt;br&gt;%d : 2자리 일 (01-31)&lt;br&gt;%H : 24시간 형식 (00-23)&lt;br&gt;%i : 분 (00-59)&lt;br&gt;%s : 초 (00-59) |
| LEFT(문자열, 길이) | 문자열의 왼쪽부터 길이 개수만큼 문자열 반환 |
| SUBSTRING(문자열, 시작위치, 길이) | 문자열의 시작위치부터 길이 개수만큼 문자열 반환 |
| **CASE** &lt;br&gt;WHEN 조건1 THEN 값1 &lt;br&gt;WHEN 조건2 THEN 값2&lt;br&gt;WHEN 조건3 THEN 값3&lt;br&gt;ELSE 값4&lt;br&gt;**END** | 조건1 만족시 값1 반환&lt;br&gt;조건2 만족시 값2 반환&lt;br&gt;조건3 만족시 값3 반환&lt;br&gt;모두 만족하지 않으면 4 반환&lt;br&gt;**※ END로 CASE문이 끝났음을 명시해야 함** |
| FLOOR(나눗셈연산) | 나눗셈 연산에 대한 몫|
MOD(나눗셈연산) | 나눗셈 연산에 대한 나머지 |
| ROUND(숫자, N) | 숫자를 반올림하여 N째 자리까지 출력 &lt;br&gt;EX. ROUND(123.24,1) ⇒ 123.2 |
|  |  |</code></pre><ul>
<li><p>MAX를 함부로 쓰면 안되는 이유</p>
<pre><code class="language-sql">  FOOD_PRODUCT 테이블에서 가격이 제일 비싼 식품의 식품 ID, 식품 이름, 식품 코드, 식품분류, 식품 가격을 조회하는 SQL문을 작성해주세요.

  SELECT PRODUCT_ID, PRODUCT_NAME, PRODUCT_CD, CATEGORY, MAX(PRICE) AS PRICE
  FROM FOOD_PRODUCT;

  =&gt; 틀린 이유
  : PRICE만 MAX값이 나오고 나머지 컬럼에 대해서는 0번째 행의 값이 나옴

  MAX PRICE인 행 - P0051    맛있는배추김치    CD_KC00001    김치    19000
  0번째 행 - P0001    맛있는라면    CD_ND00001    면    3780</code></pre>
</li>
</ul>
<h3 id="where-절">WHERE 절</h3>
<ul>
<li>검색 조건 서술</li>
<li>컬럼명에는 따옴표 생략, 속성값에는 따옴표 작성</li>
<li>문법</li>
</ul>
<pre><code>| **연산자** | **설명** |
| --- | --- |
| &lt;&gt;, != | 값이 다름 |
| BETWEEN 값1 AND 값2 | 컬럼 &gt;= 값1 AND 컬럼 &lt;= 값2 |
| IN, NOT IN (값1, 값2, …) | 포함 여부 |
| LIKE | % : 0개 이상의 문자열과 일치 |
|  | [] : 1개 이상의 문자와 일치 / ex. [AB]% : A 또는 B로 시작하는 문자열 |
|  | [^] : 1개 이상의 문자와 불일치 |
|  | _ : 특정 위치의 1개 문자와 일치 |
| IS NULL, IS NOT NULL | 컬럼이 [NULL인 데이터 / NULL이 아닌 데이터] 조회 |</code></pre><h3 id="group-by-절">GROUP BY 절</h3>
<ul>
<li><p>속성값을 그룹으로 분류</p>
</li>
<li><p>예제</p>
<p>  급여테이블</p>
<table>
<thead>
<tr>
<th>이름</th>
<th>직책</th>
<th>부서</th>
<th>급여</th>
</tr>
</thead>
<tbody><tr>
<td>김철수</td>
<td>차장</td>
<td>마케팅</td>
<td>5000</td>
</tr>
<tr>
<td>한유리</td>
<td>차장</td>
<td>전산</td>
<td>4800</td>
</tr>
<tr>
<td>신짱구</td>
<td>사원</td>
<td>마케팅</td>
<td>2500</td>
</tr>
<tr>
<td>이훈이</td>
<td>사원</td>
<td>마케팅</td>
<td>2700</td>
</tr>
</tbody></table>
</li>
</ul>
<pre><code class="language-sql">SELECT 부서, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 부서;</code></pre>
<table>
<thead>
<tr>
<th>부서</th>
<th>급여합계</th>
</tr>
</thead>
<tbody><tr>
<td>마케팅</td>
<td>10200</td>
</tr>
<tr>
<td>전산</td>
<td>4800</td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT 직책, 부서, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 직책, 부서;</code></pre>
<table>
<thead>
<tr>
<th>직책</th>
<th>부서</th>
<th>급여합계</th>
</tr>
</thead>
<tbody><tr>
<td>차장</td>
<td>마케팅</td>
<td>5000</td>
</tr>
<tr>
<td>차장</td>
<td>전산</td>
<td>4800</td>
</tr>
<tr>
<td>사원</td>
<td>마케팅</td>
<td>5200</td>
</tr>
</tbody></table>
<h3 id="having-절">HAVING 절</h3>
<ul>
<li><p>GROUP BY에 의해 분류한 후 <strong><code>그룹에 대한 조건</code></strong> 지정</p>
</li>
<li><p>예제</p>
<p>  급여테이블</p>
<table>
<thead>
<tr>
<th>이름</th>
<th>직책</th>
<th>부서</th>
<th>급여</th>
</tr>
</thead>
<tbody><tr>
<td>김철수</td>
<td>차장</td>
<td>마케팅</td>
<td>5000</td>
</tr>
<tr>
<td>한유리</td>
<td>차장</td>
<td>전산</td>
<td>4800</td>
</tr>
<tr>
<td>신짱구</td>
<td>사원</td>
<td>마케팅</td>
<td>2500</td>
</tr>
<tr>
<td>이훈이</td>
<td>사원</td>
<td>마케팅</td>
<td>2700</td>
</tr>
</tbody></table>
</li>
</ul>
<pre><code class="language-sql">SELECT 직책, 부서, SUM(급여) AS 급여합계
FROM 급여
GROUP BY 직책, 부서
HAVING SUM(급여) &gt;= 5000;</code></pre>
<table>
<thead>
<tr>
<th>직책</th>
<th>부서</th>
<th>급여합계</th>
</tr>
</thead>
<tbody><tr>
<td>차장</td>
<td>마케팅</td>
<td>5000</td>
</tr>
<tr>
<td>사원</td>
<td>마케팅</td>
<td>5200</td>
</tr>
</tbody></table>
<h3 id="order-절">ORDER 절</h3>
<ul>
<li>속성값을 정렬</li>
<li>EX. <code>ORDER BY 학점 DESC, 이름 ASC;</code><ol>
<li>학점에 대해 내림차순 정렬</li>
<li>같은 값이 존재할 경우 이름에 대해 오름차순 정렬</li>
</ol>
</li>
</ul>
<h3 id="limit-절">LIMIT 절</h3>
<ul>
<li>EX. <code>LIMIT N;</code><ul>
<li>상위부터 N개의 레코드만 출력</li>
</ul>
</li>
</ul>
<h2 id="join-명령어"><code>JOIN</code> 명령어</h2>
<p>: 두 개 이상의 테이블을 연결하여 데이터 검색</p>
<h3 id="inner-join">INNER JOIN</h3>
<ul>
<li><code>공통 존재 컬럼</code>의 값이 같은 경우를 추출</li>
<li>FROM 테이블1 A [INNER] JOIN 테이블2 B ON 조인조건</li>
</ul>
<h3 id="outer-join">OUTER JOIN</h3>
<ul>
<li><p>LEFT OUTER JOIN</p>
<ul>
<li><code>왼쪽 테이블의 모든 데이터</code> + 오른쪽 테이블의 동일 데이터</li>
</ul>
</li>
<li><p>RIGHT OUTER JOIN</p>
<ul>
<li>왼쪽 테이블의 동일 데이터 + <code>오른쪽 테이블의 모든 데이터</code></li>
</ul>
</li>
<li><p>FULL OUTER JOIN</p>
<ul>
<li><code>왼쪽 테이블의 모든 데이터</code> + <code>오른쪽 테이블의 모든 데이터</code></li>
</ul>
</li>
</ul>
<h3 id="cross-join">CROSS JOIN</h3>
<ul>
<li>조인 조건이 없는 <code>모든 데이터 조합</code>을 추출</li>
</ul>
<h3 id="self-join">SELF JOIN</h3>
<ul>
<li>자기 자신에게 별칭 지정 후 다시 조인</li>
</ul>
<h3 id="예제">예제</h3>
<p>[도서]</p>
<table>
<thead>
<tr>
<th><strong>책번호</strong></th>
<th><strong>책명</strong></th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
</tr>
</tbody></table>
<p>[도서가격]</p>
<table>
<thead>
<tr>
<th><strong>책번호</strong></th>
<th><strong>가격</strong></th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>333</td>
<td>10000</td>
</tr>
<tr>
<td>444</td>
<td>15000</td>
</tr>
<tr>
<td>- 내부 조인</td>
<td></td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT A.책번호, A.책명, B.가격
FROM 도서 A JOIN 도서가격 B
ON A.책번호 = B.책번호;</code></pre>
<table>
<thead>
<tr>
<th>A.책번호</th>
<th>A.책명</th>
<th>B.가격</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>20000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>25000</td>
</tr>
<tr>
<td>- 왼쪽 외부 조인</td>
<td></td>
<td></td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A LEFT JOIN 도서가격 B
ON A.책번호 = B.책번호;</code></pre>
<table>
<thead>
<tr>
<th>A.책번호</th>
<th>A.책명</th>
<th>B.책번호</th>
<th>B.가격</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td></td>
<td></td>
</tr>
<tr>
<td>- 오른쪽 외부 조인</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A RIGHT JOIN 도서가격 B
ON A.책번호 = B.책번호;</code></pre>
<table>
<thead>
<tr>
<th>A.책번호</th>
<th>A.책명</th>
<th>B.책번호</th>
<th>B.가격</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>NULL</td>
<td>NULL</td>
<td>333</td>
<td>10000</td>
</tr>
<tr>
<td>NULL</td>
<td>NULL</td>
<td>444</td>
<td>15000</td>
</tr>
<tr>
<td>- 완전 외부 조인</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT A.책번호, A.책명, B.책번호, B.가격
FROM 도서 A FULL JOIN 도서가격 B
ON A.책번호 = B.책번호;</code></pre>
<table>
<thead>
<tr>
<th>A.책번호</th>
<th>A.책명</th>
<th>B.책번호</th>
<th>B.가격</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>NULL</td>
<td>NULL</td>
<td>333</td>
<td>10000</td>
</tr>
<tr>
<td>NULL</td>
<td>NULL</td>
<td>444</td>
<td>15000</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td>NULL</td>
<td>NULL</td>
</tr>
<tr>
<td>- 교차 조인</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT A.책번호, A.책명, B.가격
FROM 도서 A CROSS JOIN 도서가격 B;</code></pre>
<table>
<thead>
<tr>
<th>A.책번호</th>
<th>A.책명</th>
<th>B.책번호</th>
<th>B.가격</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>111</td>
<td>운영체제</td>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>111</td>
<td>운영체제</td>
<td>333</td>
<td>10000</td>
</tr>
<tr>
<td>111</td>
<td>운영체제</td>
<td>444</td>
<td>15000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>333</td>
<td>10000</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>444</td>
<td>15000</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td>111</td>
<td>20000</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td>222</td>
<td>25000</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td>333</td>
<td>10000</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td>444</td>
<td>15000</td>
</tr>
<tr>
<td>- 셀프 조인</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<p>[도서]</p>
<table>
<thead>
<tr>
<th>책번호</th>
<th>책명</th>
<th>선수과목_책번호</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>222</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>555</td>
</tr>
<tr>
<td>555</td>
<td>컴퓨터구조</td>
<td>NULL</td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT A.책번호, A.책명, B.책번호, B.책명
FROM 도서 A SELF JOIN 도서 B
ON A.선수과목_책번호 = B.책번호;</code></pre>
<table>
<thead>
<tr>
<th>A.책번호</th>
<th>A.책명</th>
<th>B.책번호</th>
<th>B.책명</th>
</tr>
</thead>
<tbody><tr>
<td>111</td>
<td>운영체제</td>
<td>222</td>
<td>자료구조</td>
</tr>
<tr>
<td>222</td>
<td>자료구조</td>
<td>555</td>
<td>컴퓨터구조</td>
</tr>
</tbody></table>
<h2 id="서브쿼리">서브쿼리</h2>
<p>: SQL문 안에 포함된 또 다른 SQL문 </p>
<p>→ 알려지지 않은 기준을 위한 검색을 위해 사용</p>
<h3 id="from-절-서브쿼리">FROM 절 서브쿼리</h3>
<pre><code class="language-sql">SELECT MAX(가격) AS 가격
FROM 도서가격 A,
            (SELECT 책번호
                FROM 도서
                WHERE 책명=&#39;자료구조&#39;) B
WHERE A.책번호 = B.책번호;</code></pre>
<h3 id="where-절-서브쿼리">WHERE 절 서브쿼리</h3>
<pre><code class="language-sql">SELECT MAX(가격) AS 가격
FROM 도서가격
WHERE 책번호 IN (SELECT 책번호
                                    FROM 도서
                                    WHERE 책명=&#39;자료구조&#39;);</code></pre>
<h2 id="집합-연산자">집합 연산자</h2>
<h3 id="union">UNION</h3>
<ul>
<li>중복 행이 제거된 쿼리 결과 반환</li>
</ul>
<h3 id="union-all">UNION ALL</h3>
<ul>
<li>중복 행이 제거되지 않은 쿼리 결과 반환</li>
</ul>
<h3 id="intersect">INTERSECT</h3>
<ul>
<li>공통적으로 존재하는 결과를 반환</li>
</ul>
<h3 id="minus">MINUS</h3>
<ul>
<li>첫 쿼리에 있고 두 번째 쿼리에는 없는 결과</li>
</ul>
<h3 id="예제-1">예제</h3>
<p>[EMP 테이블]</p>
<table>
<thead>
<tr>
<th>EMPNO</th>
<th>ENAME</th>
<th>JOB</th>
<th>SAL</th>
</tr>
</thead>
<tbody><tr>
<td>1001</td>
<td>홍길동</td>
<td>대리</td>
<td>1000</td>
</tr>
<tr>
<td>1002</td>
<td>임꺽정</td>
<td>과장</td>
<td>1500</td>
</tr>
<tr>
<td>1003</td>
<td>장길산</td>
<td>차장</td>
<td>2000</td>
</tr>
<tr>
<td>1004</td>
<td>강은미</td>
<td>부장</td>
<td>2500</td>
</tr>
<tr>
<td>- UNION</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<pre><code class="language-sql">SELECT ENAME
FROM EMP
WHERE SAL &lt;= 2000
UNION
SELECT ENAME
FROM EMP
WHERE SAL &gt;= 1500;</code></pre>
<table>
<thead>
<tr>
<th>ENAME</th>
</tr>
</thead>
<tbody><tr>
<td>임꺽정</td>
</tr>
<tr>
<td>장길산</td>
</tr>
</tbody></table>
<ul>
<li>UNION ALL</li>
</ul>
<pre><code class="language-sql">SELECT ENAME
FROM EMP
WHERE SAL &lt;= 2000
UNION ALL
SELECT ENAME
FROM EMP
WHERE SAL &gt;= 1500;</code></pre>
<table>
<thead>
<tr>
<th>ENAME</th>
</tr>
</thead>
<tbody><tr>
<td>홍길동</td>
</tr>
<tr>
<td>임꺽정</td>
</tr>
<tr>
<td>장길산</td>
</tr>
<tr>
<td>임꺽정</td>
</tr>
<tr>
<td>장길산</td>
</tr>
<tr>
<td>강은미</td>
</tr>
</tbody></table>
<ul>
<li>INTERSECT</li>
</ul>
<pre><code class="language-sql">SELECT ENAME
FROM EMP
WHERE SAL &lt;= 2000
INTERSECT
SELECT ENAME
FROM EMP
WHERE SAL &gt;= 1500;</code></pre>
<table>
<thead>
<tr>
<th>ENAME</th>
</tr>
</thead>
<tbody><tr>
<td>임꺽정</td>
</tr>
<tr>
<td>장길산</td>
</tr>
</tbody></table>
<ul>
<li>MINUS</li>
</ul>
<pre><code class="language-sql">SELECT ENAME
FROM EMP
WHERE SAL &lt;= 2000
UNION
SELECT ENAME
FROM EMP
WHERE SAL &gt;= 1500;</code></pre>
<table>
<thead>
<tr>
<th>ENAME</th>
</tr>
</thead>
<tbody><tr>
<td>홍길동</td>
</tr>
</tbody></table>
<h2 id="insert-명령어"><code>INSERT</code> 명령어</h2>
<pre><code class="language-sql">INSERT INTO 학생(학번, 성명, 학년, 수강과목)
VALUES (6677, &#39;장길산&#39;, 3, &#39;수학&#39;);</code></pre>
<ul>
<li>숫자는 따옴표 X, 문자는 따옴표 O</li>
</ul>
<h2 id="update-명령어"><code>UPDATE</code> 명령어</h2>
<pre><code class="language-sql">UPDATE 학생
SET 주소 = &#39;인천&#39;
WHERE 이름 = &#39;장길산&#39;;</code></pre>
<ul>
<li><code>학생</code> 테이블에서 <code>이름</code>이 ‘장길산’인 튜플의 <code>주소</code>를 ‘인천’으로 변경</li>
</ul>
<h2 id="delete-명령어"><code>DELETE</code> 명령어</h2>
<pre><code class="language-sql">DELETE FROM 학생
WHERE 이름 = &#39;장길산&#39;;</code></pre>
<ul>
<li><code>학생</code> 테이블에서 <code>이름</code>이 ‘장길산’인 튜플 삭제</li>
</ul>
<h1 id="다중-행-연산자">다중 행 연산자</h1>
<table>
<thead>
<tr>
<th><strong>연산자</strong></th>
<th><strong>설명</strong></th>
</tr>
</thead>
<tbody><tr>
<td>IN</td>
<td>리턴되는 값 중 조건에 해당하는 값이 있으면 참</td>
</tr>
<tr>
<td>ANY</td>
<td>서브쿼리에 의해 리턴되는 값들 중 조건을 만족하는 값 1개 이상이면 참</td>
</tr>
<tr>
<td>ALL</td>
<td>서브쿼리에 의해 리턴되는 모든 값이 조건 값을 만족해야만 참</td>
</tr>
<tr>
<td>EXISTS</td>
<td>서브쿼리의 결과 중 메인쿼리 비교 조건을 만족하는 값 하나라도 존재하면 참</td>
</tr>
</tbody></table>
<h1 id="집계-함수">집계 함수</h1>
<table>
<thead>
<tr>
<th><strong>집계 함수</strong></th>
<th><strong>설명</strong></th>
</tr>
</thead>
<tbody><tr>
<td>COUNT</td>
<td>줄 수 반환</td>
</tr>
<tr>
<td>SUM</td>
<td>합계 계산</td>
</tr>
<tr>
<td>AVG</td>
<td>평균 계산</td>
</tr>
<tr>
<td>MAX</td>
<td>최댓값 계산</td>
</tr>
<tr>
<td>MIN</td>
<td>최솟값 계산</td>
</tr>
<tr>
<td>STDDEV</td>
<td>표준편차 계산</td>
</tr>
<tr>
<td>VARIANCE</td>
<td>분산 계산</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript localeCompare() - 문자열의 일부를 기준으로 정렬해보자]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript-localeCompare-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98-%EC%9D%BC%EB%B6%80%EB%A5%BC-%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%B4%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@sun_ovo/JavaScript-localeCompare-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98-%EC%9D%BC%EB%B6%80%EB%A5%BC-%EA%B8%B0%EC%A4%80%EC%9C%BC%EB%A1%9C-%EC%A0%95%EB%A0%AC%ED%95%B4%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Mon, 04 Nov 2024 06:51:12 GMT</pubDate>
            <description><![CDATA[<p><code>localeCompare(compareString, locales, options);</code></p>
<p>   ⇒ 참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지 또는 동일한 문자열인지 나타내는 수치를 반환
   <br></p>
<ul>
<li><p>매개변수</p>
<ul>
<li><code>compareString</code><ul>
<li><code>referenceStr</code>가 비교되는 문자열</li>
</ul>
</li>
<li><code>locales</code>와 <code>options</code><ul>
<li>함수의 동작을 사용자 정의하여 응용 프로그램에서 포맷 규칙을 사용할 언어를 지정 <br>
</li>
</ul>
</li>
</ul>
</li>
<li><p>반환값</p>
<ul>
<li><code>compareString</code> 전에 <code>referenceStr</code>가 위치하는 경우 <strong>음수</strong></li>
<li><code>compareString</code> 후에 <code>referenceStr</code>가 위치하는 경우 <strong>양수</strong></li>
<li>동등할 경우 <code>0</code><br>


</li>
</ul>
</li>
</ul>
<ul>
<li>사용 예시<ul>
<li>&#39;레벨 닉네임&#39;의 형태로 복수개의 데이터가 들어온 상황<ul>
<li>닉네임을 기준으로 사전순 정렬 후 출력해야 함</li>
<li>단순히 <code>sort()</code>를 사용할 경우 레벨을 기준으로 정렬됨<br></li>
<li>시도 1
<code>const result = rooms[item].members.sort((a, b) =&gt; a.split(&#39; &#39;)[1] - b.split(&#39; &#39;)[1]);</code></li>
<li>이는 문자열의 비교가 아닌 숫자 비교 연산이기 때문에 잘못된 접근임<br></li>
<li>시도 2
<code>const result = rooms[item].members.sort((a, b) =&gt; a.split(&#39; &#39;)[1].localeCompare(b.split(&#39; &#39;)[1]));</code></li>
<li>&#39;레벨 닉네임&#39;을 [&#39;레벨&#39;, &#39;닉네임&#39;] 으로 변경 후 닉네임을 기준으로 문자열 비교</li>
</ul>
</li>
</ul>
</li>
</ul>
<br>
<br>
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 조건문 탐색 속도 (list, set, ==)]]></title>
            <link>https://velog.io/@sun_ovo/Python-%EC%A1%B0%EA%B1%B4%EB%AC%B8-%ED%83%90%EC%83%89-%EC%86%8D%EB%8F%84-list-set</link>
            <guid>https://velog.io/@sun_ovo/Python-%EC%A1%B0%EA%B1%B4%EB%AC%B8-%ED%83%90%EC%83%89-%EC%86%8D%EB%8F%84-list-set</guid>
            <pubDate>Sat, 12 Oct 2024 06:20:19 GMT</pubDate>
            <description><![CDATA[<p>알고리즘 풀이를 하다가 조건문을 작성하게 되었다.
<code>if paren == &#39;}&#39; or paren == &#39;)&#39; or paren == &#39;]&#39;:</code>
<code>if paren in [&#39;}&#39;, &#39;]&#39;, &#39;)&#39;]:</code>
<br>
== 연산자를 사용하면 시간복잡도는 O(1)로 속도는 빠르지만 조건이 많아질수록 코드가 길어져 가독성이 매우 나빠진다.
<br>
리스트 탐색은 내가 찾는 요소가 리스트 앞쪽에 위치한다면 탐색 시간이 길지 않겠지만 리스트 맨 뒤에 위치할 경우 O(n)의 시간복잡도를 가진다.
<br>
시간복잡도와 가독성 모두를 잡을 수 있는 방법은 없을까?
있다. <code>set()</code>을 사용하는 것이다.
<code>if paren in {&#39;}&#39;, &#39;)&#39;, &#39;]&#39;}:</code></p>
<p>set은 해시테이블 구조이기 때문에 시간복잡도 O(1)을 가진다.
코드는 list와 동일한 구조이므로 가독성 역시 높아진다.</p>
<h3 id="결론">결론</h3>
<p>포함 여부를 확인할 때는 <strong><code>set</code></strong>을 사용하는 것이 유용하다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript Math는 함수가 아니라구요?]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript-Math%EB%8A%94-%ED%95%A8%EC%88%98%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC%EA%B5%AC%EC%9A%94</link>
            <guid>https://velog.io/@sun_ovo/JavaScript-Math%EB%8A%94-%ED%95%A8%EC%88%98%EA%B0%80-%EC%95%84%EB%8B%88%EB%9D%BC%EA%B5%AC%EC%9A%94</guid>
            <pubDate>Wed, 25 Sep 2024 08:04:22 GMT</pubDate>
            <description><![CDATA[<h2 id="math"><code>Math</code></h2>
<h3 id="특징">특징</h3>
<ul>
<li>수학적 상수/함수를 위한 속성과 메서드를 가진 내장 객체
※ Math는 내장 함수가 아닌 내장 객체!!!!!!</li>
<li>Number 자료형만 지원하며 BigInt와는 사용 불가<br/>

</li>
</ul>
<h3 id="메서드">메서드</h3>
<p>매우매우 많지만 오늘은 풀던 알고리즘 문제와 관련된 floor, ceil만 알아보겠습니다</p>
<ol>
<li><code>floor(x)</code><pre><code> : 인수보다 작거나 같은 수 중에서 가장 큰 정수를 반환
 &lt;br/&gt;</code></pre></li>
<li><code>ceil(x)</code><pre><code> : 인수보다 크거나 같은 수 중에서 가장 작은 정수를 반환</code></pre></li>
</ol>
<br/>
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript sort().. 1000이 2보다 작다고?]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript-sort..-1000%EC%9D%B4-2%EB%B3%B4%EB%8B%A4-%EC%9E%91%EB%8B%A4%EA%B3%A0</link>
            <guid>https://velog.io/@sun_ovo/JavaScript-sort..-1000%EC%9D%B4-2%EB%B3%B4%EB%8B%A4-%EC%9E%91%EB%8B%A4%EA%B3%A0</guid>
            <pubDate>Wed, 25 Sep 2024 07:23:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
</blockquote>
<p>Array = [ 1000, 2, 1]
Array.sort()의 결과는 무엇일까?</p>
<p>자연스러운 논리로는 Array = [1, 2, 1000]이 되어야 한다.
하지만 JavaScript는 Array = [1, 1000, 2]를 반환한다.</p>
<p>이는 JavaScript의 sort()함수는 “<strong>문자열의 유니코드</strong> 코드 포인트”를 따르기 때문이다.
<br/></p>
<p>의도한 결과를 만들기 위해서는 compareFunction을 제공해야 한다.
compareFunction의 판단 논리는 다음과 같고, 이러한 반환 값에 따라 정렬된다.</p>
<ul>
<li>compareFunc(a, b) &gt; 0 : a &lt; b</li>
<li>compareFunc(a, b) = 0 : a === b</li>
<li>compareFunc(a, b) &lt; 0 : a &gt; b<br/>

</li>
</ul>
<p>만약 숫자를 비교한다면 compareFunc를 다음과 같이 정의할 수 있다</p>
<pre><code class="language-jsx">function compareNumbers(a, b) {
    return a - b;
}</code></pre>
<br/>
이는 다음과 같이 활용 가능하다

<pre><code class="language-jsx">let array = [14, 2, 5, 1, 3]

// 방법 1
function compareNumbers(a, b) {
    return a - b;
}

array.sort(compareNumbers);

// 방법 2
array.sort((a, b) =&gt; a - b);</code></pre>
<br/>

<p>+)  <strong><code>map</code></strong>을 사용한 정렬</p>
<ul>
<li><code>compareFunction</code>은 배열 내의 요소마다 여러 번 호출되므로 높은 오버헤드가 발생할 수 있음</li>
<li>compareFunction이 복잡하고, 정렬 요소가 많을 경우 map을 사용하는 것이 좋음</li>
</ul>
<br/>

<p><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort">https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/sort</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript의 filter()란?]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript%EC%9D%98-filter%EB%9E%80</link>
            <guid>https://velog.io/@sun_ovo/JavaScript%EC%9D%98-filter%EB%9E%80</guid>
            <pubDate>Wed, 25 Sep 2024 06:49:49 GMT</pubDate>
            <description><![CDATA[<p><code>filter(callbackFn)</code>
<code>filter(callbackFn, thisArg)</code>
<br/></p>
<h2 id="예제">예제</h2>
<pre><code class="language-jsx">const fruits = [&quot;apple&quot;, &quot;banana&quot;, &quot;grapes&quot;, &quot;mango&quot;, &quot;orange&quot;];

// 검색 조건에 따른 배열 필터링(쿼리)
function filterItems(arr, query) {
  return arr.filter((el) =&gt; el.toLowerCase().includes(query.toLowerCase()));
}

console.log(filterItems(fruits, &quot;ap&quot;)); // [&#39;apple&#39;, &#39;grapes&#39;]
console.log(filterItems(fruits, &quot;an&quot;)); // [&#39;banana&#39;, &#39;mango&#39;, &#39;orange&#39;]</code></pre>
<h2 id="특징">특징</h2>
<h3 id="1-순회-메서드">1. <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array#%EC%88%9C%ED%9A%8C_%EB%A9%94%EC%84%9C%EB%93%9C">순회 메서드</a></h3>
<ul>
<li>배열의 각 요소에 대해 제공된 <code>callbackFn</code> 함수를 한 번씩 호출</li>
<li><code>callbackFn</code>이 <a href="https://developer.mozilla.org/ko/docs/Glossary/Truthy">참</a> 값을 반환하는 모든 값으로 새 배열을 구성</li>
<li><code>callbackFn</code> 테스트를 통과하지 못한 배열 요소는 새 배열에 포함 X  <br/>
### 2. [복사 메서드](https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array#%EB%B3%B5%EC%82%AC_%EB%A9%94%EC%84%9C%EB%93%9C%EC%99%80_%EB%B3%80%EA%B2%BD_%EB%A9%94%EC%84%9C%EB%93%9C)</li>
<li><code>this</code>를 변경하지 않음<br/></li>
<li>원래 배열의 요소와 동일한 요소를 포함하는 <a href="https://developer.mozilla.org/ko/docs/Glossary/Shallow_copy">얕은 복사본</a>을 반환<br/></li>
<li><code>callbackFn</code>으로 제공된 함수는 배열을 변경할 수 있음<br/></li>
<li>배열의 length는 <code>callbackFn</code>을 처음 호출하기 전에 저장됨<ul>
<li><code>callbackFn</code>은 <code>filter()</code> 호출이 시작 후 초기 length 값을 초과하여 추가된 요소는 방문 X<br/></li>
<li>이미 방문한 인덱스를 변경해도 <code>callbackFn</code>이 해당 인덱스에 대해 다시 호출되지 X<br/></li>
<li>배열의 아직 방문하지 않은 기존 요소가 <code>callbackFn</code>에 의해 변경되는 경우, <code>callbackFn</code>에 전달된 값은 해당 요소가 방문될 당시의 값이며,  <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/delete">삭제된</a> 요소는 방문 X</li>
</ul>
</li>
</ul>
<br/>

<p><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter">https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/filter</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript 순회하자 forEach()로]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript-%EC%88%9C%ED%9A%8C%ED%95%98%EC%9E%90-forEach%EB%A1%9C</link>
            <guid>https://velog.io/@sun_ovo/JavaScript-%EC%88%9C%ED%9A%8C%ED%95%98%EC%9E%90-forEach%EB%A1%9C</guid>
            <pubDate>Tue, 24 Sep 2024 16:54:40 GMT</pubDate>
            <description><![CDATA[<p><strong><code>forEach()</code></strong></p>
<h3 id="순회-메서드"><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array#%EC%88%9C%ED%9A%8C_%EB%A9%94%EC%84%9C%EB%93%9C">순회 메서드</a></h3>
<p>   → 배열의 각 요소에 대해 <code>callbackFn</code> 함수를 오름차순 인덱스 순서로 한 번씩 호출</p>
<p>   → <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map"><code>map()</code></a>과 달리 <code>forEach()</code>는 항상 <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/undefined"><code>undefined</code></a>를 반환하므로 체이닝 불가</p>
<p>   → 값이 할당된 배열 인덱스에 대해서만 호출</p>
<pre><code class="language-jsx">    const array1 = [&#39;a&#39;, &#39;b&#39;, &#39;c&#39;];

    array1.forEach((element) =&gt; console.log(element));

    // Expected output: &quot;a&quot;
    // Expected output: &quot;b&quot;
    // Expected output: &quot;c&quot;</code></pre>
   <br/>

<h3 id="구조">구조</h3>
<pre><code class="language-jsx">  forEach(callbackFn)
  forEach(callbackFn, thisArg)</code></pre>
<ul>
<li><p>매개변수</p>
<ul>
<li><p>callbackFn
→ 배열의 각 요소에 대해 실행할 함수입니다. 반환값은 사용되지 않습니다. 
→ 함수는 다음 인수를 사용하여 호출됩니다.</p>
<ol>
<li>element : 배열에서 처리 중인 현재 요소<ol start="2">
<li>index : 배열에서 처리 중인 현재 요소의 인덱스</li>
<li>array : forEach()를 호출한 배열</li>
</ol>
<ul>
<li>thisArg (optional)</li>
</ul>
</li>
</ol>
<ul>
<li>callbackFn을 실행할 때 this 값으로 사용할 값<br/></li>
</ul>
</li>
</ul>
</li>
<li><p>반환 값 : <strong><code>undefined</code></strong> (없음)</p>
<br/>

</li>
</ul>
<h3 id="특징">특징</h3>
<ul>
<li><p>호출되는 배열을 변경하지 않지만, <code>callbackFn</code>으로 제공되는 함수는 배열 변경 가능</p>
  <br/></li>
<li><p>배열의 length는 <code>callbackFn</code>을 처음 호출하기 전에 저장</p>
<pre><code>- `callbackFn`은 `forEach()` 호출이 시작되었을 때 배열의 초기 length 값을 초과하여 추가된 요소는 방문 X</code></pre><ul>
<li>이미 방문한 인덱스를 변경해도 <code>callbackFn</code>이 해당 인덱스에 대해 다시 호출 X</li>
<li>배열의 아직 방문하지 않은 기존 요소가 <code>callbackFn</code>에 의해 변경되는 경우,  <code>callbackFn</code>에 전달된 값은 해당 요소가 <em>방문될 당시의 값</em>이 됩니다.</li>
<li><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/delete">삭제된</a> 요소는 방문되지 않습니다.  <br/>
- 예외를 발생시키는 것 외에는 `forEach()` 루프를 중지/중단 불가
- 루프 중지가 필요하다면, `forEach()` 메서드는 적절한 도구가 아님
  <br/></li>
</ul>
</li>
<li><p><code>forEach()</code>는 동기 함수를 기대하며 프로미스를 기다리지 않으므로 프로미스(또는 비동기 함수)를 <code>forEach</code> 콜백으로 사용할 때는 그 의미를 알고 있어야 함</p>
<pre><code class="language-jsx">     const ratings = [5, 4, 5];
      let sum = 0;

      const sumFunction = async (a, b) =&gt; a + b;

      ratings.forEach(async (rating) =&gt; {
        sum = await sumFunction(sum, rating);
      });

      console.log(sum);
      // 순진하게 예상한 출력: 14
      // 실제 출력: 0
</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript && 와 &]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript-%EC%99%80</link>
            <guid>https://velog.io/@sun_ovo/JavaScript-%EC%99%80</guid>
            <pubDate>Tue, 24 Sep 2024 16:07:01 GMT</pubDate>
            <description><![CDATA[<p><code>&amp;&amp;</code> vs <code>&amp;</code></p>
<ul>
<li><p><code>&amp;&amp;</code> : 논리 연산자 AND</p>
</li>
<li><p><code>&amp;</code> : 비트 연산자 AND</p>
<br/>

</li>
</ul>
<p><strong>논리 연산자 AND</strong></p>
<p><a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Logical_AND">https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Logical_AND</a></p>
<ul>
<li><p>피연산자를 왼쪽에서 오른쪽으로 평가한다</p>
</li>
<li><p>평가 중 첫 <strong><code>거짓 같은</code></strong> 피연산자를 만나면 즉시 그 값을 반환한다</p>
<ul>
<li>거짓 같은 값 : boolean 문맥에서 false로 평가되는 값</li>
<li>null, undefined, false, NaN,, 0, -0, 0n, “”, document.all (유일한 거짓 같은 객체)</li>
</ul>
</li>
<li><p>모든 값이 <strong><code>참 같은</code></strong> 값이라면 마지막 피연산자의 값이 반환된다</p>
<ul>
<li>참 같은 값 : boolean 문맥에서 true로 평가되는 값</li>
<li>거짓 같은 값으로 정의된 값을 제외한 모든</li>
</ul>
</li>
<li><p>Boolean이 아닌 값을 보존하고 반환한다</p>
<br/>
```js
//boolean이 아닌 값을 보존하는 경우

</li>
</ul>
<p>result = &quot;&quot; &amp;&amp; &quot;foo&quot;;   // result 에 &quot;&quot;(빈 문자열)이 할당됩니다
result = 2 &amp;&amp; 0;        // result 에 0 이 할당됩니다
result = &quot;foo&quot; &amp;&amp; 4;    // result 에 4 가 할당됩니다.</p>
<p>// boolean을 반환하는 경우</p>
<p>const a = 3;
const b = -2;
console.log(a &gt; 0 &amp;&amp; b &gt; 0);
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JavaScript 몫 구하기 with parseInt()]]></title>
            <link>https://velog.io/@sun_ovo/JavaScript-%EB%AA%AB-%EA%B5%AC%ED%95%98%EA%B8%B0-with-parseInt</link>
            <guid>https://velog.io/@sun_ovo/JavaScript-%EB%AA%AB-%EA%B5%AC%ED%95%98%EA%B8%B0-with-parseInt</guid>
            <pubDate>Tue, 24 Sep 2024 15:43:54 GMT</pubDate>
            <description><![CDATA[<p>파이썬의 <code>//</code>가 JS에서는 존재하지 않는다! 다음 두가지 방법을 통해 구해보자
</br></p>
<ol>
<li><p><code>Math.floor</code></p>
<pre><code class="language-js"> var q = Math.floor(13 / 5)
 console.log(q)    // 2</code></pre>
</br></li>
<li><p><code>parseInt</code></p>
<p> <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt">https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/parseInt</a></p>
<ul>
<li><p><strong><code>parseInt()</code></strong> 함수는 문자열 인자를 파싱하여 특정 진수(수의 진법 체계에서 기준이 되는 값)의 정수를 반환</p>
</li>
<li><p><strong><code>parseInt(string, radix)</code></strong>;</p>
<ul>
<li><code>string</code>
  : 파싱할 값 (문자열이 아닐경우 ToString에 의해 문자열로 변환)</li>
<li><code>radix</code> (optional)
: string의 진수를 나타내는 2부터 36까지의 정수 (<strong>기본값이 10이 아님</strong>)</li>
</ul>
</li>
<li><p>주의</p>
<p><strong><code>parseInt</code>를 <a href="https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Math/floor"><code>Math.floor()</code></a>의 대체품으로 사용해서는 안된다!</strong></p>
<ul>
<li>일부 숫자는 <code>6.022e23</code>(6.022 × 10^23)처럼 문자열 표현에 <code>e</code> 문자를 사용하기 때문에, <code>parseInt</code>를 매우 크거나매우 작은 숫자의 소수점 이하 값을 자르기 위해 사용하면 예기치 못한 결과가 발생할 수 있습니다.</li>
</ul>
</li>
</ul>
</li>
</ol>
<pre><code>&lt;br/&gt;

```js
console.log(parseInt(&#39;123&#39;));
// 123 (default base-10)

console.log(parseInt(&#39;123&#39;, 10));
// 123 (explicitly specify base-10)

console.log(parseInt(&#39;   123 &#39;));
// 123 (whitespace is ignored)

console.log(parseInt(&#39;077&#39;));
// 77 (leading zeros are ignored)

console.log(parseInt(&#39;1.9&#39;));
// 1 (decimal part is truncated)

console.log(parseInt(&#39;ff&#39;, 16));
// 255 (lower-case hexadecimal)

console.log(parseInt(&#39;0xFF&#39;, 16));
// 255 (upper-case hexadecimal with &quot;0x&quot; prefix)

console.log(parseInt(&#39;xyz&#39;));
// NaN (input can&#39;t be converted to an integer)

console.log(parseInt(&quot;546&quot;, 2); 
// NaN  (0과 1을 제외한 숫자는 2진법에서 유효하지 않음)
```</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[백준] 1010. 다리놓기]]></title>
            <link>https://velog.io/@sun_ovo/%EB%B0%B1%EC%A4%80-1010.-%EB%8B%A4%EB%A6%AC%EB%86%93%EA%B8%B0</link>
            <guid>https://velog.io/@sun_ovo/%EB%B0%B1%EC%A4%80-1010.-%EB%8B%A4%EB%A6%AC%EB%86%93%EA%B8%B0</guid>
            <pubDate>Wed, 26 Jul 2023 00:01:53 GMT</pubDate>
            <description><![CDATA[<h2 id="🗒️-문제">🗒️ 문제</h2>
<blockquote>
<p>강 주변에서 다리를 짓기에 적합한 곳을 사이트라고 한다. 강의 서쪽에는 N개의 사이트가 있고 동쪽에는 M개의 사이트가 있다는 것을 알았다. (N ≤ M)</p>
<p>다리를 최대한 많이 지으려고 하기 때문에 서쪽의 사이트 개수만큼 (N개) 다리를 지으려고 한다. 다리는 서로 겹쳐질 수 없다고 할 때 다리를 지을 수 있는 경우의 수를 구하는 프로그램을 작성하라.</p>
</blockquote>
<br>
<br>

<h2 id="💭-알고리즘">💭 <strong>알고리즘</strong></h2>
<aside>
📚 "다리를 총 N개 지어야하므로, 동쪽 사이트 M개 중 N개를 선택한 후 위의 사이트부터 서쪽의 1~N번째 사이트와 각각 잇는다. 그러면 다리끼리 겹치지 않으면서 N개의 다리를 설치할 수 있다. 따라서 최대 경우의 수는 mCn의 계산값과 같다. "

</aside>
<br>
<br>

<h2 id="💬-code">💬 <strong>Code</strong></h2>
<pre><code class="language-python">import sys
sys.setrecursionlimit(10**7)

def fact(n):
    if n == 1 or n == 0 :
        return 1
    return n * fact(n-1)

T = int(input())

for test_case in range(1, T+1) :
    N, M = map(int, input().split())

    brdg = int(fact(M) / (fact(N) * fact(M-N)))

    print(f&#39;#{test_case} {brdg}&#39;)</code></pre>
<br>
<br>

<h2 id="🤓-고려사항">🤓 <strong>고려사항</strong></h2>
<ol>
<li><p>조합 공식은 아래와 같다.</p>
<p> <img src="https://velog.velcdn.com/images/sun_ovo/post/73e4f031-aebd-466b-ba39-661c915d25f6/image.png" alt=""></p>
</li>
</ol>
<ol start="2">
<li><p>조합 식을 계산하기 위해서는 팩토리얼 함수를 구현해야 한다.</p>
</li>
<li><p>팩토리얼의 계산 식은 <em>f(n) = n * f(n-1)</em> 으로, 재귀함수의 형태이다.</p>
<blockquote>
<p><code>return n * f(n-1)</code>로 작성하면 return값 안에 함수 <code>f(n-1)</code>이 포함된 형태이므로 재귀가 잘 동작한다.</p>
</blockquote>
</li>
<li><p>팩토리얼 함수에 삽입되는 n은 0 이상의 정수이다.</p>
<blockquote>
<p>처음 작성 시, <code>if n == 1 :</code>로 조건을 작성했다. 따라서 M=N인 경우에서는 반환값이 없으므로 결과 값이 출력되지 않았다 😒</p>
</blockquote>
</li>
<li><p>결과 brdg는 나눗셈의 결과이므로 float 형태로 출력된다. 따라서 정수형 변환 int를 적용해주어야 한다.</p>
<br>
<br>
## 🐞 **보완**

</li>
</ol>
<h3 id="a">A</h3>
<pre><code class="language-python">brdg = fact(M) // fact(N) * fact(M-N)</code></pre>
<p><strong>1. <code>//</code> 연산</strong></p>
<p>// 연산은 결과값으로 나눗셈의 정수 몫을 반환하므로 int형변환이 불필요하다. </p>
<br>
<br>

<h3 id="b">B</h3>
<pre><code class="language-python">def factorial(n):
    result = 1
    for i in range(1, n + 1):
        result *= i
    return result

def calculate_bridge_count(N, M):
    if N == 0 or N == M:
        return 1
    return factorial(M) // (factorial(N) * factorial(M - N))

T = int(input())

for test_case in range(1, T + 1):
    N, M = map(int, input().split())

    bridge_count = calculate_bridge_count(N, M)

    print(f&#39;#{test_case} {bridge_count}&#39;)</code></pre>
<ol>
<li>factorial의 구현은 재귀 함수 외에도 반복문으로 구현할 수 있다.<br>
<br>

</li>
</ol>
<h2 id="🤔-new">🤔 <strong>New!</strong></h2>
<ul>
<li><p><strong>최대 재귀한도 깊이 제한</strong></p>
<p>  <code>RecursionError: maximum recursion depth exceeded in comparison</code></p>
<ul>
<li><p>에러 발생 이유<br></p>
<p>  : Python은 안정화를 위해 최대 재귀 깊이가 정해져 있다. 사용자가 정해진 깊이보다 더 깊이 재귀를 호출한다면 해당 에러가 발생하게 되는 것이다.</p>
  <br>
</li>
<li><p>에러 해결 방법</p>
<pre><code class="language-python">  import sys
  sys.setrecursionlimit(10**7)</code></pre>
<p>  <code>sys.setrecursionlimit()</code>을 통해 python이 정해둔 최대 재귀 깊이를 변경할 수 있다.<br></p>
<p>  충분히 큰 값인 <code>10**7</code>로 최대 깊이를 변경하여 에러를 해결했다.</p>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[SWEA 2072. 홀수만 더하기]]></title>
            <link>https://velog.io/@sun_ovo/SWEA-2072.-%ED%99%80%EC%88%98%EB%A7%8C-%EB%8D%94%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@sun_ovo/SWEA-2072.-%ED%99%80%EC%88%98%EB%A7%8C-%EB%8D%94%ED%95%98%EA%B8%B0</guid>
            <pubDate>Fri, 14 Jul 2023 06:34:13 GMT</pubDate>
            <description><![CDATA[<h3 id="💭-알고리즘">💭 <strong>알고리즘</strong></h3>
<blockquote>
<p>&quot;숫자 10개를 리스트에 삽입한다. 이후, 각 원소에 대해 홀수 판별을 진행하여 홀수만 더한다.&quot;</p>
</blockquote>
</br>

<h3 id="💬-code">💬 <strong>Code</strong></h3>
<pre><code class="language-python">T = int(input())
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.
for test_case in range(1, T + 1):

    list_n = list(map(int, input().split()))
    sum = 0

    for i in range(0,10):
        if list_n[i] % 2 ==0 :
            continue
        else:
            sum += list_n[i]
    print(&#39;#&#39; + str(test_case) + &#39; &#39; + str(sum)) </code></pre>
</br>

<h3 id="🤓-고려사항">🤓 <strong>고려사항</strong></h3>
<ol>
<li><p>숫자 10개를 받아야 하므로 변수를 각각 설정하기 보다는 list를 이용하여 받아온다.</p>
</li>
<li><p>반복문에서는 변수를 list의 index로 설정해서 각각의 원소에 대해 홀짝 판별을 진행할 수 있도록 했다.</p>
</li>
<li><p>범위는 range(0,10)으로 두어 list_n[0] ~ list_n[9]까지로 설정했다.</p>
<blockquote>
<p>처음에 숫자가 10개라서 range(1,11)로 뒀다가 &quot;IndexError: list index out of range&quot;를 마주했다 😂 list의 index는 0부터 시작한다는 것 다시 한 번 주의하기!!</p>
</blockquote>
</li>
<li><p>print문 내에서는 데이터 타입이 같은 요소들만 작성할 수 있으므로 모두 문자형으로 변경해서 작성해주었다.</p>
</li>
</ol>
</br>
</br>

<h3 id="🐞-보완-with-gpt😅">🐞 <strong>보완</strong> (with GPT😅)</h3>
<p> <strong>1. range(0, 10)  →  range(10)</strong></p>
<p>range함수는 시작 index를 0으로 설정하는 것이 기본임.
</br></p>
<p><strong>2. if list_n[i] % 2 ==0  →  if list_n[i] % 2 != 0</strong></p>
<p>홀수를 찾는 문제이므로 if 조건을 짝수 판별이 아닌 홀수 판별로 변경하는 것이 좋음.
</br>
<strong>3. print(&#39;#&#39; + str(test_case) + &#39; &#39; + str(sum))  →  print(&#39;#{} {}&#39;.format(test_case, sum))</strong></p>
<p>문자열 포맷팅¹을 사용하면 출력을 더 간단하게 작성할 수 있음.</p>
</br>
</br>

<h3 id="🤔-new">🤔 <strong>New!</strong></h3>
<p>** ㆍ문자열 포매팅 **
: 문자열 안에 특정 값(정수, 문자열, 소수 등)을 삽입하는 방법</p>
<p>ㆍ 형식
<code>print(&quot;문자열{}&quot;.format(변수))</code></p>
<p>Ex&gt;</p>
<pre><code class="language-python">name = &quot;홍길동&quot;
age = 22
print(&quot;제 이름은 {}이고, {}살입니다.&quot;.format(name, age))</code></pre>
<pre><code>결과 : 제 이름은 홍길동이고 22살입니다.</code></pre></br>


<p>+) 최신 형식 : f-string</p>
<pre><code class="language-python">name = &quot;홍길동&quot;
age = 22
print(f&quot;제 이름은 {name}이고, {age}살입니다.&quot;)</code></pre>
<pre><code>→ 더욱 간결한 작성 가능</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[자율주행]]></title>
            <link>https://velog.io/@sun_ovo/%EC%9E%90%EC%9C%A8%EC%A3%BC%ED%96%89</link>
            <guid>https://velog.io/@sun_ovo/%EC%9E%90%EC%9C%A8%EC%A3%BC%ED%96%89</guid>
            <pubDate>Tue, 06 Jun 2023 05:49:38 GMT</pubDate>
            <description><![CDATA[<h2 id="자율주행">자율주행</h2>
<blockquote>
<p>운전자 또는 승객의 조작 없이 스스로 운행이 가능한 자동차
<strong>자율주행 자동차</strong>
: 자율주행을 위해 자동차에 IT/센서 등 첨단 기술을 융합하여 스스로 주변 환경을 인식, 위험을 판단하고 주행 경로를 계획하여 운전자 또는 승객의 조작 없이 안전한 운행이 가능하도록 한 자동차</p>
</blockquote>
<h3 id="자율주행-시스템">자율주행 시스템</h3>
<blockquote>
<p>: 운전자 또는 승객의 조작 없이 주변 상황/도로 정보를 스스로 인지 및 판단하여 자동차 운행이 가능케하는 자동화 장비, 소프트웨어 및 이와 관련한 일체의 장치</p>
</blockquote>
<ul>
<li>종류
① <strong>부분 자율주행시스템</strong> : 지정된 조건에서 자동차를 운행하되 작동한계상황 등 필요한 경우 운전자의 개입을 요구하는 자율주행시스템
② <strong>조건부 완전자율주행시스템</strong> : 지정된 조건에서 운전자의 개입 없이 자동차를 운행하는 자율주행시스템
③ <strong>완전 자율주행시스템</strong> : 모든 영역에서 운전자의 개입 없이 자동차를 운행하는 자율주행시스템</li>
</ul>
<h3 id="자동화-단계-구분">자동화 단계 구분</h3>
<ul>
<li><p>Level 0~2
: 운전자 보조 기능 (최대 부분 자동화)</p>
</li>
<li><p>Level 3~5
: 자율주행 기능 (조건부 자동화 ~ 완전 자동화)</p>
</li>
<li><p>현행
: 레벨2 &#39;부분 자동화&#39; 기술 상용화, 레벨3 &#39;조건부 자동화&#39; 기술 도입
(양산차에 레벨3 적용 : 메르세데스 벤츠, 혼다, 현대자동차 / 작동 조건이 100km/h 이하로 매우 낮음)
: 자율주행 시스템이 정상적으로 작동하는 상황에서 사고 발생 시, 책임 소재는 명확히 자량 제조사에 있음.</p>
</li>
</ul>
<h3 id="장점">장점</h3>
<ul>
<li>운전 노동의 자유화</li>
<li>독립적이며 안전한 이동</li>
<li>이동 중 가치를 생산하는 새로운 융합 산업의 발전 도모</li>
<li>고령화 사회 및 취약 지역에 인프라 제공 (정기 순환형 무인미니버스)</li>
<li>무인 수송 및 물류 셔틀</li>
<li>음주운전/운전부주의 등의 운전자 원인 사고는 현격히 감소할 것</li>
</ul>
<h3 id="필요-사항">필요 사항</h3>
<ul>
<li><p>도로 환경 개선</p>
</li>
<li><blockquote>
<p>자율 주행 전용 도로 개설 
: 기존 차량의 통행에 영향 주지 않으며, 새로운 투자 및 시장 창출의 효과도 기대할 수 있음
: 장애인, 고령자 등 교통 약자 or 교통 서비스 소외지역 주민의 이동 편의 높일 수 있는 기술</p>
</blockquote>
</li>
<li><p>교통 법규의 변화 및 새로운 규제 설정</p>
</li>
<li><blockquote>
<p>일반 도로에서의 주행 우선권 결정 (사람이 운전하는 차량 vs 자율주행 차량)</p>
</blockquote>
</li>
<li><p>자율주행 시스템을 위한 장치</p>
</li>
<li><blockquote>
<p>운전자 기준의 신호등, 교통 법규, 도로 인프라(디지털화)
: 자율주행 시스템의 원활한 작동을 위해서는 낮밤/날씨 등에 영향을 받지 않고 정확하게 도로 표지판을 식별하는 것이 중요 (ex. LED 스마트 가로등 필요)</p>
</blockquote>
</li>
</ul>
<h3 id="문제점">문제점</h3>
<ul>
<li><p>프로그램화된 기술로는 해결하기 어려운 복잡한 상황에 대한 직관적 판단 능력/융통성 부족</p>
</li>
<li><p>데이터가 없는 긴급 상황에 대한 대처 능력</p>
</li>
</ul>
<p>▷ AR/VR 혹은 실제 도로 상황과 매우 유사한 게임환경 구축 후 사용자들 토대로 발생 가능한 사고 상황/ 도로 상황 데이터 축적</p>
<ul>
<li><p>프라이버시 침해
: 주행 과정에서 수집된 데이터에 대한 프라이버시 침해 및 보안 (이용자의 현재 위치, 자주 가는 장소, 운전자 습성 등)
: 차량으로 촬영된 정보가 유출될 시 나라 사이의 간첩 행위에 활용될 수 있음</p>
</li>
<li><p>해킹에 의한 위험
: 목적지 변경 시 택배 화물의 분실, 운행시스템 해킹으로 인한 통제불능 등</p>
</li>
</ul>
<p>▷ 사이버 보안 관리체계를 탄탄하게 갖추고 위험 평가/관리를 필수적으로 수행한 차량만이 판매 가능하도록 규정
▷ 허점을 찾기 위해 사이버 보안 챌린지 대회 개최, 레드팀 훈련 시행 등 (해킹에 성공할 시 상금)</p>
<ul>
<li>윤리적 판단 기준의 설정
: 누가 어떤 해결 방안으로 프로그래밍?
: 그 기준은 무엇이며 전 세계적으로 동일한 기준 제정/개별 국가 자율?</li>
</ul>
<p>▷ 인명 보호를 최우선하도록 설계 및 제작
▷ 이를 제외한 윤리에는 정답이 없음. 모든 관련 주체의 합의/논의를 통해 끊임없이 개선하는 과정이 필수적임</p>
<h3 id="트롤리-딜레마-논제의-비현실성">트롤리 딜레마 논제의 비현실성</h3>
<blockquote>
<p><strong>트롤리 딜레마</strong>
: 사고가 불가피할 때 자동차의 소프트웨어가 어느 방향을 취할지 결정해야 하는 상황을 의미
EX&gt; 사고가 일어날 것이 확실한 상황에서 도로의 한 쪽에는 엄마와 아기가 있고, 자동차 앞쪽엔 한 무리의 어린 학생들이 길을 건너고 있으며, 도로의 다른 쪽은 절벽이라면, 자동차가 내릴 수 있는 가장 윤리적인 결정은 무엇일까? 자동차가 방향을 틀어 엄마를 치는 것일까, 아이들에게 돌진하는 것일까, 아니면 절벽으로 몰아 차 안에 탄 사람을 죽도록 하는 것일까?</p>
</blockquote>
<ul>
<li>비현실성
① 상황 발생 가능성
: 트롤리 딜레마와 같은 매우 제한적인 공간에서, 자율주행자동차는 트롤리 결정을 내리는 상황을 맞닥뜨리기 전에 이미 환경에 반응함
② 반응 속도
: 자율주행자동차는 인간 운전자보다 훨씬 빨리 멈출 수 있음. 충돌 가능성이 있는 상황이 감지되면, 자동차는 밀리초만에 제동을 시작함. 센서의 범위가 차량의 정지거리를 훨씬 넘어서므로 자동차가 치명적인 상황에 처할 경우는 훨씬 줄어들게 됨.</li>
</ul>
<p>[참고자료]
<a href="https://www.epnc.co.kr/news/articleView.html?idxno=90783">https://www.epnc.co.kr/news/articleView.html?idxno=90783</a>
<a href="https://www.koya-culture.com/news/article.html?no=131812">https://www.koya-culture.com/news/article.html?no=131812</a>
<a href="https://m.hankookilbo.com/News/Read/A2022062309390004941">https://m.hankookilbo.com/News/Read/A2022062309390004941</a>
<a href="https://www.etri.re.kr/webzine/20190705/sub01.html">https://www.etri.re.kr/webzine/20190705/sub01.html</a>
<a href="https://www.easylaw.go.kr/CSP/CnpClsMainBtr.laf?csmSeq=1593&amp;ccfNo=1&amp;cciNo=1&amp;cnpClsNo=1">https://www.easylaw.go.kr/CSP/CnpClsMainBtr.laf?csmSeq=1593&amp;ccfNo=1&amp;cciNo=1&amp;cnpClsNo=1</a>
<a href="https://www.hani.co.kr/arti/science/future/1036771.html">https://www.hani.co.kr/arti/science/future/1036771.html</a>
<a href="http://www.carguy.kr/news/articleView.html?idxno=45963">http://www.carguy.kr/news/articleView.html?idxno=45963</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[빅데이터]]></title>
            <link>https://velog.io/@sun_ovo/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0</link>
            <guid>https://velog.io/@sun_ovo/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0</guid>
            <pubDate>Mon, 05 Jun 2023 11:20:47 GMT</pubDate>
            <description><![CDATA[<h2 id="빅데이터">빅데이터</h2>
<blockquote>
<p>전통적인 데이터 프로세싱 방법으로는 처리할 수 없을 만큼 대규모이거나 복잡한 데이터</p>
</blockquote>
<h2 id="빅데이터-기술">빅데이터 기술</h2>
<p>: 기존의 데이터베이스, 관리 시스템을 넘어 다양한 형태를 가진 <strong>대량의</strong> 데이터를 분석함으로써 의미있는 가치를 추출하고 결과를 분석하는 기술</p>
<h3 id="빅데이터-등장배경">빅데이터 등장배경</h3>
<ul>
<li>기술 발전에 따른 데이터 <strong>저장, 처리 비용 감소</strong></li>
<li>실시간 서비스, SNS 서비스 등으로 <strong>디지털 정보량의 기하급수적 증가</strong></li>
<li>기존 데이터의 <strong>저장, 관리, 분석, 기법의 한계</strong></li>
</ul>
<h3 id="빅데이터-특징">빅데이터 특징</h3>
<ul>
<li>Volume(규모) : 대규모 크기</li>
<li>Variety(다양성) : 비표준 형식의 광범위한 범위</li>
<li>Velocity(속도) : 신속하고 효율적으로 처리</li>
<li>Value (가치) : 분석할만한 가치를 가지는 데이터여야 함</li>
<li>Veracity (유효성/진실성) : 신뢰성 및 타당성</li>
<li>Volatility (휘발성) : 데이터가 얼마나 오래 유의미함을 가지는지</li>
<li>Validity (정확성) : 정확한 정보인가 (정확성이 없다면 규모가 커도 무의미)</li>
</ul>
<h3 id="빅데이터-활용">빅데이터 활용</h3>
<ul>
<li><p>수백 년 전 기록을 바탕으로 빅데이터 분석을 통해 미래 예측 가능</p>
</li>
<li><p>역사적 데이터를 기반으로 한 과거 기상 데이터는 향후 몇 십년 내의 <strong>지진, 화산 폭발 등 기후 예측</strong>에 도움</p>
</li>
<li><p>심야 버스 노선도, 고객 맞춤형 상품 출시 등 데이터를 기반으로 사용자의 니즈 파악 가능</p>
</li>
<li><p>페이팔
: 온라인 쇼핑몰 사기 수법 분석 및 예방을 위한 딥러닝 도입 → 사기 유형 비교 및 사기 방식 탐지, 다양한 유사수법 파악</p>
</li>
<li><p>아마존
: 분석 시스템을 통해 특정 나이, 특정 취향, 특정 수입의 고객이 어떤 상품을 좋아할지 예측하여 쇼핑하는 시간 동안 배너로 보여줌
: 경쟁 업체의 가격, 예상 이익률, 웹사이트 내의 활동 등을 토대로 상품의 가격을 10분마다 최적화</p>
</li>
</ul>
<h3 id="빅데이터-장점">빅데이터 장점</h3>
<ul>
<li><p>분야를 가리지 않고 전 영역에 걸쳐 사회와 인류에 가치 있는 정보 제공 가능</p>
</li>
<li><p>데이터 처리 및 분석
: 대규모 데이터 세트의 분산 처리를 가능하게 하므로 처리 시간 단축 및 컴퓨팅 리소스의 효율적 사용이 가능
: 기계 학습 알고리즘을 통해 고객 행동 및 선호도 패턴/경향 식별 가능</p>
</li>
<li><p>공급망 최적화
: 소매 업체는 공급망 데이터 분석을 통해 비효율성과 개선 기회를 식별 가능함 (ex. 운송 경로의 최적화를 통한 비용 감소)</p>
</li>
</ul>
<h3 id="빅데이터-단점">빅데이터 단점</h3>
<ul>
<li><p>사생활 침해 및 보안 문제 
: 수 많은 개인 정보의 집합이므로 보안 문제가 발생한다면 개인정보 유출로 이어짐. 또한 누적된 정보 패턴에 기초하여 개인의 생활 패턴/성향에 대해 분석할 수 있게 되므로 개인정보 침해 그 이상의 위험이 발생 가능
→ 블록체인을 결합하여 데이터의 암호화를 통해 보호 가능
→ 보호와 활용의 균형적 인식을 고려한 법률 규제 필요</p>
</li>
<li><p>통합, 스토리지 용량 및 부족한 IT 예산
: 대량의 데이터를 관리 및 저장하기 위한 전문 인프라 및 도구가 필요
→ 데이터 웨어하우징, 분산 컴퓨팅 및 클라우드 기반 스토리지 솔루션</p>
</li>
<li><p>기술 격차
: 빅데이터 기술 및 데이터 과학에 능숙한 전문가가 부족
→ 전문가 양성을 위한 국가적/기업 차원에서의 교육 및 개발 투자가 필요</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[STO (토큰 증권 발행)]]></title>
            <link>https://velog.io/@sun_ovo/STO-%ED%86%A0%ED%81%B0-%EC%A6%9D%EA%B6%8C-%EB%B0%9C%ED%96%89</link>
            <guid>https://velog.io/@sun_ovo/STO-%ED%86%A0%ED%81%B0-%EC%A6%9D%EA%B6%8C-%EB%B0%9C%ED%96%89</guid>
            <pubDate>Mon, 05 Jun 2023 04:47:30 GMT</pubDate>
            <description><![CDATA[<h2 id="sto">STO</h2>
<blockquote>
<p><strong>Security Token Offering</strong>, 토큰 증권 발행
: 디지털 자산 산업과 종전 증권산업의 융합을 의미</p>
</blockquote>
<p>토큰 산업이 <strong>블록체인 기술에 기초한 수평·분권화 플랫폼</strong>으로 종전의 인프라를 대체할 것이라는 예측도 있음. 
이 때, 블록체인 기술은 <strong>웹 3.0과 챗GPT 등 인공지능을 활용해 처리 속도, 처리 용량 문제를 해결</strong>하는 대안으로 떠오르고 있음.</p>
<p>: 종전 인프라의 단점 보완 가능
▷ 수직·중앙 집권화 플랫폼을 뛰어넘어 독과점 이슈 해소
▷ 사회적 비용을 대폭 감소</p>
<h3 id="sto-인프라-마련-가상자산의-제도적-기틀-선행-필요">STO 인프라 마련? 가상자산의 제도적 기틀 선행 필요</h3>
<p>STO를 가상자산 시장과 분리해서 볼 수 없음 
→ 국제적으로 가상자산 관련 명확한 가이드라인 필요
→ (해외 G7) 가상자산을 제도권으로 편입시켜 투자자 보호와 블록체인 산업의 투명성 강화를 추진</p>
<ul>
<li>우려점
→ 가상 자산과 관련된 잠재적 위험
Ex&gt; 자금 세탁, 테러 자금 조달 및 탈세 등</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[AI]]></title>
            <link>https://velog.io/@sun_ovo/%EC%83%9D%EC%84%B1%ED%98%95-AI</link>
            <guid>https://velog.io/@sun_ovo/%EC%83%9D%EC%84%B1%ED%98%95-AI</guid>
            <pubDate>Sat, 03 Jun 2023 11:05:17 GMT</pubDate>
            <description><![CDATA[<h2 id="ai">AI</h2>
<blockquote>
<p><strong>Artificial Intelligence</strong>
: 컴퓨터에서 음성 및 작성된 언어를 보고 이해하고 번역하고 데이터를 분석하고 추천하는 기능을 포함하여 <strong>인간의 학습 능력, 추론 능력, 지능 능력 등 사고 판단과 관련된 다양한 고급 영역을</strong> 컴퓨터 프로그램으로 실현한 일련의 기술</p>
</blockquote>
<h3 id="ai의-특징">AI의 특징</h3>
<ol>
<li>문제 해결력
: 수식 계산, 사진 속 대상 판단 등 문제 해결을 위한 지능적 행동</li>
<li>학습
: 입력과 출력의 데이터가 주어지면 규칙을 자동으로 파악하는 모델 (머신러닝, 딥러닝)</li>
<li>범용성
: 딥러닝 모델을 수정하여 다양한 분야로의 응용이 가능</li>
</ol>
<h2 id="분석형-ai">분석형 AI</h2>
<blockquote>
<p>전통적 인공지능 기술
: 데이터 분석, 소비자 패턴 분석, 사용자 언어 분석에 특화</p>
</blockquote>
<h2 id="생성형-ai">생성형 AI</h2>
<blockquote>
<p>텍스트, 영상, 이미지 등 기존 콘텐츠를 활용하여 유사한 콘텐츠를 새로 만들어 내는 인공지능 기술
Ex) 챗GPT(텍스트 생성형) 미드저니(이미지 생성형)</p>
</blockquote>
<h3 id="활용성전망">활용성/전망</h3>
<ul>
<li><p>공정 및 물류 &#39;스마트 팩토리&#39;
: 공장에 인공지능을 적용하여 공정 및 물류 업무 프로세스를 스마트하게 처리함
→ Ex&gt; 물류 자동화, 자율 주행 로봇이 필요한 물건 직접 찾고 나름, 기계의 고장 여부 분석 및 부품 교체 필요 여부 예측</p>
</li>
<li><p>영업 분야
: 사용자 맞춤 추천 기능으로 판매율 향상
→ Ex&gt; 넷플릭스 : 사용자의 영상 시청 패턴 분석 및 선호도 파악 &amp; 맞춤 콘텐츠 추천</p>
</li>
<li><p>마케팅 분야
: 소비자의 취향 및 트렌드 흐름 예측 가능
: AI 비디오 편집을 통해 단시간 내에 고품질의 비디오 제작 가능
→ 제품/서비스 기획 및 디자인 구상에 생성형 AI 활용성 매우 높을 것으로 예상</p>
</li>
<li><p>고객 관리
: CS 업무에서 챗봇 도입함으로써 24시간 고객에게 서비스 제공 가능
: 고객들의 니즈 파악을 통한 유의미한 데이터 찾아내기</p>
</li>
<li><p>얼굴 인식을 통한 보안 관리
: 기업에서 정보 유출 및 보안 이슈에 대응하기 위해 얼굴 인식 기술을 사내 컴퓨터에 도입하여 보안을 강화</p>
</li>
<li><p>사무 행정
Ex) 마이크로 소프트 Ms Office의 <strong>&#39;코파일럿(Copilot)&#39;</strong>
▷ Word - 간단한 프롬프트만으로 조직 정보를 받아와 초안을 작성
▷ 엑셀 - 수식뿐만 아니라 자연어로 데이터 세트에 대한 질문이 가능하며 질문에 기반한 새로운 수식 제안
▷ PPT - 기존 서면 문서를 제공하면 발표자 메모 및 소스가 포함된 PPT 자료를 제공</p>
</li>
<li><p>새로운 일자리
: 기획과 가장 유사한 결과물을 창출해내기 위해 생성형 AI와 소통하는 직업이 생겨남</p>
</li>
</ul>
<h3 id="한계-및-위험성">한계 및 위험성</h3>
<ul>
<li><p>정보의 정확성
: 제한적인 학습 데이터 범위(챗GPT는 2021/9까지의 데이터만 습득함) 및 정확성 판별 능력의 부재
→ 데이터의 출처를 함께 확인할 수 있도록 기능 개선? (구글 바드)</p>
</li>
<li><p>데이터 보안과 윤리 (저작권 분쟁)
: 개인 정보, 기밀 정보, 지적 재산을 생성형 AI에 입력할 경우 이는 공개 정보로 취급되어 타인에게 민감한 정보가 유출될 수 있음.
→ 데이터 입력시 공개 정보로 취급할 것인지 말것인지 체킹하는 방식은?
→ 저작권 문제가 없는 자료들로만 학습 모델로써 사용</p>
</li>
<li><p>데이터 오염 문제
: 인공지능의 학습 과정에서 주입되는 데이터를 조금만 오염시켜도 엇나간 결과물이 나올 수 있음. 이는 인공지능에게 일반적이지 않은 일이 벌어지면 엉뚱한 결과 심지어는 위험한 결과로 이어질 수 있음.
Ex&gt; 유명인의 사진을 학습하는 머신러닝 알고리즘의 학습 자료로써 두 사진을 합치거나 원래 이미지 안에 작은 그림을 삽입하여 학습시킴. 알고리즘은 결국 사진 속 인물을 타른 사람으로 인식하게 됨.
→ 기본 보안 실천 사항인 &#39;망 분리&#39;와 &#39;최소한의 권리 부여&#39;를 통해 학습 데이터를 무분별하게 제공하지 않도록 제한을 둔다면 해결될 수 있을 것임.
→ 모의 해킹과 레드팀 훈련을 더욱 강화된 방법으로 철저히 진행하여 강화 실험을 여러번 거친 알고리즘 모델 완성.</p>
</li>
<li><p>윤리적 문제
: 자율 주행 - AI의 판단에 의해 발생한 사고의 책임은 누구에게 있는가?
: 딥페이크 - 정치/사회 영역의 가짜 뉴스로 인한 혼란, 특정 인물을 콘텐츠로 활용하여 음란물/음해의 목적으로 사용
→ 윤리적 요인과 관련한 명확한 기준 및 강화된 법률를 토대로한 규제가 필요</p>
</li>
</ul>
<p>참고자료
<a href="https://m.blog.naver.com/skinfosec2000/222029239340">https://m.blog.naver.com/skinfosec2000/222029239340</a>
<a href="https://elice.io/newsroom/dx_ai_definition_examples_5">https://elice.io/newsroom/dx_ai_definition_examples_5</a>
<a href="https://imvip.tistory.com/284">https://imvip.tistory.com/284</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[핀테크 (Fin Tech)]]></title>
            <link>https://velog.io/@sun_ovo/%ED%95%80%ED%85%8C%ED%81%AC-Fin-Tech</link>
            <guid>https://velog.io/@sun_ovo/%ED%95%80%ED%85%8C%ED%81%AC-Fin-Tech</guid>
            <pubDate>Sat, 03 Jun 2023 08:50:46 GMT</pubDate>
            <description><![CDATA[<h2 id="핀테크-fin-tech">핀테크 (Fin Tech)</h2>
<blockquote>
<p> <strong>Finance + Technology</strong> 
 : 금융 서비스와 정보기술의 융합을 통한 금융서비스/산업의 변화를 통칭</p>
</blockquote>
<p>Ex&gt; 모바일 뱅킹, 앱카드
(서비스 외에도 금융 시스템의 전반을 혁신하는 기술 역시 핀테크의 일부임.)</p>
<h2 id="핀테크-기술의-기대효과">핀테크 기술의 기대효과</h2>
<ul>
<li>금융 경쟁 촉진</li>
<li>소비자 편익 향상</li>
<li>일자리 창출
: 규제를 줄이고 지원을 늘리면 새로운 서비스가 시도됨에 따라 핀테크 기업의 창업 및 성장으로 일자리가 늘어남.</li>
</ul>
<h2 id="핀테크-기술의-단점">핀테크 기술의 단점</h2>
<ul>
<li>보안 및 신뢰성
: 공인인증서/보안카드의 부재로 보안성 낮아짐
: 오프라인 대리점의 부재로 노년층 접근성이 낮아짐
→ 블록체인을 통한 데이터 암호화로 보안 문제에 대응</li>
<li>클라우드 컴퓨팅 보안 문제
→ 다중 클라우드/하이브리드 클라우드를 적용한 데이터 분산 저장</li>
<li>기존 뱅킹 시스템의 이전
→ 모든 사용자 계정 및 액세스 권한을 철저히 검토하여 안전하지 않은 접근 불허용</li>
</ul>
<h2 id="핀테크-문제-해결--보안-대책">핀테크 문제 해결 : 보안 대책</h2>
<ul>
<li><p>AI를 이용한 부정행위 감지
→ AI와 머신러닝으로 고객 및 기업 데이터 효과적 분석 및 위험 예측, 대량의 데이터 검사를 통해 취약성 확인</p>
</li>
<li><p>SASE(보안 접근 서비스 엣지)
→ 클라우드 기반 인프라를 통해 조직의 보안 강화 및 민감성 데이터의 악용 효과적으로 방지</p>
</li>
<li><p>첨단 블록체인
→ 블록체인에서 일어나는 거래는 복호화가 어려우므로 안정성과 신뢰성이 높음.</p>
</li>
</ul>
<h2 id="블록체인-block-chain">블록체인 (Block Chain)</h2>
<blockquote>
<p><strong>데이터 분산 처리 기술</strong>
: 네트워크에 참여하는 모든 사용자가 모든 거래 내역 등의 데이터를 분산/저장하는 기술</p>
</blockquote>
<blockquote>
<p>거래 명세서를 담은 새로운 &#39;블록&#39;들이 이전의 블록과 &#39;체인&#39;처럼 연결되어 하나의 장부를 만듦.
공공 거래 장부라고도 부르며, 가상 화폐로 거래할 때 발생할 수 있는해킹을 막음.</p>
</blockquote>
<h3 id="블록체인-기술의-특징">블록체인 기술의 특징</h3>
<ul>
<li>분산저장
: 여러 명이 데이터를 저장하므로 위/변조가 어려움</li>
<li>중앙 관리자가 불필요 (탈중앙화)
: 다수가 데이터를 저장하므로 공식적인 증명 등이 필요 없어짐에 따라 중앙 관리자가 존재하지 않음</li>
<li>가상 화폐의 등장
: 중앙 은행이 없어도 화폐 발행 및 유통이 가능해짐</li>
<li>계약의 자동화 (스마트 컨트랙트)
: 중재자 필요없음에 따른 효율 상승, 빠른 거래, 비용 절감 가능</li>
<li>무결성 및 안정성
: 한 번 기록된 데이터는 수정이 어려움</li>
</ul>
<h3 id="블록체인-기술의-단점">블록체인 기술의 단점</h3>
<ul>
<li><p>잊혀질 권리
: 개인정보보호법- 자신의 개인정보 삭제를 요구할 수 있는 &#39;삭제권&#39; 보장
: 블록체인은 &#39;삭제권&#39;에 상충함
→ 개인정보를 암호화하여 온체인에 넣고, 삭제 요청이 올 경우 암호키만 삭제하는 방법 (암호화로 인해 정보에 접근할 수 없으며, 암호키를 없애면 삭제로 간주할 수 있음. 다만 &quot;진짜 정보 삭제 vs 접근 권한 삭제&quot;에 대한 논쟁은 있음) </p>
</li>
<li><p>확장성 문제
: 모든 참여자들에게 동기화된 원장을 유지해야 하므로 처리할 수 있는 거래량에 제한이 있음. 퍼블릭 블록체인은 모든 거래를 모든 노드가 처리하기에 확장성에 더 큰 문제가 나타남.
→ 블록 저장 공간의 분산화를 통해서 해결할 수 있지 않을까? 분산형 클라우드 등)</p>
</li>
</ul>
<h3 id="블록체인-적용-가능-분야">블록체인 적용 가능 분야</h3>
<ul>
<li><p>금융 서비스
: 은행 간 결제, 해외 송금, 디지털 자산 거래 등 금융 분야에서 신뢰성 및 보안성 향상</p>
</li>
<li><p>의료 및 건강관리 
: 환자의 기록에 대한 보안 및 무결성을 보장하므로 의료 데이터의 공유와 액세스 개선이 가능. 
▷ 신원 확인, 의료 기록 공유, 의약품 관리, 임상 실험 결과 추적 등에 활용</p>
</li>
<li><p>에너지 관리
: 분산 에너지 시스템에서 에너지 거래와 공급 관리를 간소화하고 효율적으로 처리할 수 있음. 에너지 생산자-소비자의 직접 거래를 통해 중간 업체 배제 및 에너지 효율성 향상 가능</p>
</li>
</ul>
<h3 id="핀테크-관련-key-word">핀테크 관련 Key word</h3>
<ul>
<li><p><strong>Open API</strong>
: 인터넷 이용자가 직접 응용프로그램과 서비스 개발이 가능하도록 공개된 API
Ex&gt; 구글맵 API 공개 ▷ 친구찾기/부동산 정보 등 신규서비스 창출</p>
</li>
<li><p><strong>로보어드바이저</strong>
: 로봇이 개인의 자산운용을 자문/관리하는 자동화 서비스</p>
</li>
<li><p><strong>인터넷 전문은행</strong>
: 모든 금융서비스를 이넡넷 상에서 제공하는 은행 
(실물 지점 운영 X → 낮은 대출금리/수수료)</p>
</li>
<li><p><strong>크라우드 펀딩</strong>
: 자금이 필요한 사용자가 네트워크를 이용해 불특정 다수로부터 자금을 모으는 방식</p>
</li>
<li><p><strong>빅데이터</strong>
: 디지털 환경에서 생성되는 문자/영상을 포함하는 대규모 데이터 (이를 이용한 생각과 의견의 분석/예측 가능)</p>
</li>
<li><p><strong>테크핀</strong>
: 기술기반 업체가 구축해놓은 플랫폼을 통해 다양한 금융 서비스를 제공하는 형태</p>
</li>
<li><p><strong>ICT (Information and Communications Technologies)</strong>
: 정보통신 기술로, 정보 매체를 운영/관리하는테 필요한 소프트웨어 기술 및 정보 활용의 모든 방법을 아우르는 개념</p>
</li>
<li><p><strong>테스트베드 (Test-Bed)</strong>
: 새로운 기술의 성능 및 효과를 시험할 수 있는 환경으로, 금융시장과 소비자를 대상으로 금융서비스 테스트가 가능</p>
</li>
<li><p><strong>금융규제 샌드박스</strong>
: 신기술/서비스에 규제를 적용하지 않고 실험과 검증을 임시로 허용하는 것</p>
</li>
<li><p><em><strong>레그테크 (Regtech = 규제 Regulation + Technology)</strong></em>
: 혁신적인 사업 모델 운영 시, _AI/블록체인/빅데이터 분석 등을 통해 규제 대응을 자동화하고 이를 실시간으로 활용함_으로써 각종 규제와 법규에 효과적으로 대응하고 소비자 신뢰 및 준법성을 높이는 기술</p>
</li>
<li><p><strong>인슈(어)테크 (보험 Insurance + Technology)</strong>
: 블록체인/바이오인증/빅데이터 등으로 절차를 줄이고 보험지급을 자동화 하는 방식</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[클라우드 (Cloud)]]></title>
            <link>https://velog.io/@sun_ovo/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-Cloud</link>
            <guid>https://velog.io/@sun_ovo/%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-Cloud</guid>
            <pubDate>Fri, 02 Jun 2023 11:53:28 GMT</pubDate>
            <description><![CDATA[<h2>클라우드 (Cloud)</h2>
: 광대한 네트워크를 통하여 접근할 수 있는 가상화된 서버, 서버에서 작동하는 프로그램, 데이터베이스를 제공하는 IT 환경<br>
▷ 클라우드 이용 시 필요한 컴퓨팅 자원을 인터넷으로 쉽게 이용할 수 있다는 이점이 있음.<br>

<p><img src="https://velog.velcdn.com/images/sun_ovo/post/e6a710c8-76ea-442b-a221-195bbee95443/image.png" alt=""></p>
<p>▲ 클라우드 서비스의 정량적 특징 <br></p>
<p><img src="https://velog.velcdn.com/images/sun_ovo/post/b2f2b486-ed21-4401-8fe3-d67fb0f06268/image.png" alt=""></p>
<p>▲ 클라우드 서비스의 정성적 특징 <br></p>
<h4>특징</h4>
- 접속 용이성<br>
- 서비스 유연성<br>
- 주문형 셀프 서비스<br>
- 사용량 기반 과금제<br>
<br>
<H3>클라우드 vs 클라우드 컴퓨팅 vs 클라우드 서비스</H3>
<h4>① 클라우드 컴퓨팅 (Cloud computing)</h4>
: 클라우드를 이용하여 컴퓨팅 자원을 사용하는 기술<br>
→ 서버, 스토리지(대용량 데이터 저장 장치), 네트워크 등의 자원을 가상화하여 사용자에게 제공 (필요에 따른 확장/축소 가능)<br>
<h5>* 퍼블릭 클라우드 (Public cloud)</h5>
인터넷을 통해 누구나 접근 가능한 클라우드 서비스
<h5>* 프라이빗 클라우드 (Public cloud)</h5>
기업이나 조직 내에서 구축한 클라우드 서비스 (내부망을 통해 접속)
<h5>* 하이브리드 클라우드 (Public cloud)</h5>
퍼블릭 + 프라이빗 간의 데이터 연계 ▶ 비지니스 유연성 향상
<h5>* 멀티 클라우드 (Public cloud)</h5>
둘 이상의 클라우드 서비스 제공업체에서 제공하는 클라우드를 하나의 어플/비지니스에 통합하여 사용<br>
<br>
<h4>② 클라우드 서비스 (Cloud service)</h4>
: 클라우드 컴퓨팅을 기반으로 제공되는 서비스<br>
→ 다양한 형태 (소프트웨어 기반/플랫폼 기반/인프라 기반)<br>
<h5>* Saas (Software as a Service, 소프트웨어 기반 서비스)</h5>
사용자가 어플 구매/설치 없이 인터넷을 통해 원하는 SW를 사용가능하도록 제공<br>
<h5>* Paas (Platform as a Service, 플랫폼 기반 서비스)</h5>
어플 개발/실행/관리하기 위한 플랫폼 제공 서비스<br>
<h5>* Iaas (Infra as a Service, 인프라 기반 서비스)</h5>
서버, 스토리지, 네트워크 등의 컴퓨팅 리소스(IT 인프라)를 제공<br>
<br>
<br>
<H3>장점</H3>
- 필요에 따라 자원을 확장/축소하여 유연한 사용 가능<br>
- 분산 운용에 따른 가용성/신뢰성 향상<br>
- 클라우드 서비스 공급자가 최신 보안 기술을 적용 및 책임지므로 기업에서 별도의 작업 수행 불필요<br>
- 자체 인프라 구축에 비해 경제적<br>
<br>
<H3>고려 요소</H3>
- 사용자 데이터가 외부 서버에 저장되므로 개인정보/보안 문제 발생 우려<br>
: 데이터 암호화, 접근 제어, 정기 보안 검사<br><br>
- '기존 시스템 ▷ 클라우드'로의 데이터 이전 과정에서 호환성 문제<br>
: 데이터 변환 도구 이용, 클라우드 공급자의 마이그레이션 지원<br><br>
- 서버 문제 발생 시 서비스 중단/데이터 손실 위험 & 제공자 영역으로의 접근/원인 분석 불가 (Blackbox 문제)<br>
: 다중 클라우드 전략, 하이브리드 클라우드 방식<br><br>
- 관리 운영 및 공급자에 과의존시 정책 변경/가격 변동에 취약해짐<br>
: 표준화된 프로토콜/API 사용, 필요시 타 클라우드 서비스 공급자로 전환 방법 모색<br>
<br>
<br>
<H3>멀티 클라우드와 데브옵스</H3>
* 데브옵스(Devops) : 신속한 고품질 서비스 제공을 통해 비즈니스 가치를 높이고, 대응 능력을 개선할 목적으로 기업 문화, 자동화, 플랫폼 설계에 접근하는 방식<br>
<br>
클라우드가 많아짐에 따라 복잡성 및 해결과제가 증가함.<br>
멀티클라우드가 클라우드 컴퓨팅의 새로운 방식으로 자리매김하며, 어떤 변화와 과제가 발생하는가?<br>
<br>
<B>ⓐ 복잡성</B><br>
  멀티 클라우드는 클라우드 각각의 기술/보안 요구 등의 차이로 데브옵스에서 하는 복잡성 관리를 더욱 복잡하게 만듦.<br>
<B>ⓑ 보안&컴플라이언스</B><br>
  데브옵스는 자사의 멀티클라우드 환경이 플랫폼 각각의 보안 및 컴플라이언스 요구사항을 법률적으로 따르도록 보장해야함.<br>
  <br>
  <br>
<H3>클라우드 + HPC = HPCaaS</H3>
<B>* HPC :</B> 고급 연산 문제 해결을 위해 슈퍼컴퓨터 or 컴퓨터 클러스터 사용 <br>(= 다수의 컴퓨터 자원을 네트워크로 연결하여 하나의 슈퍼컴퓨터처럼 사용)<br>
<H4>HPCaaS (HPC as a Service, 클라우드 HPC)</H4>
: 대규모 연산을 위해 클라우드 기반의 고성능 인프라 사용
→ 클라우드 기반으로 수집된 데이터를 효율적으로 저장/분석 가능함 (효율적)<br>
→ HPC에 비해 진입장벽을 낮추어 더 많은 기업이 방대한 데이터 처리 가능<br>
<br>
<h4>적용 분야</h4>
ⓐ BFSI, 예측 및 위험 관리<br>
: 금융 시장에서는 견고하고 신뢰성 높은 안전한 솔루션이 필요하며, 거래의 안정성 보장을 위한 높은 수준의 보안이 필요함. 이를 HPCaaS로 충족 가능함.<br>
ⓑ 의료, R&D<br>
디지털 시뮬레이션을 통해 실패한 임상시험/비효과적 약물 제형 수 줄임으로써 R&D 효율성 향상 가능<br>
ⓒ 공공, 디지털화 이니셔티브 지원<br>
: 자율주행 자동차 개발, 스마트시티 구축, 국방 분야의 방위/항공 우주<br>
ⓓ 제조, 설계/시뮬레이션에 적용<br>
: 제조 프로세스 자동화<br>
<br>
<br>
<br>
<br>
[참고 자료]<br>
https://www.samsungsds.com/kr/cloud-glossary/what-is-cloud.html <br>
https://www.samsungsds.com/kr/insights/210122-cloud.html <br>
https://www.samsungsds.com/kr/insights/cloud_210226.html <br>
https://www.samsungsds.com/kr/insights/hpc_as_a_service.html <br>]]></description>
        </item>
        <item>
            <title><![CDATA[23.05.24 JS 기초]]></title>
            <link>https://velog.io/@sun_ovo/23.05.24-JS-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@sun_ovo/23.05.24-JS-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Wed, 24 May 2023 14:46:35 GMT</pubDate>
            <description><![CDATA[<p>5/24</p>
<pre><code>코드를 입력하세요
```&lt;div&gt; : 화면 전체를 사용하기 때문에 자동으로 줄바꿈 됨.
&lt;span&gt; : 줄바꿈이 되지 않는 무색 무취의 tag

코드 내의 동일 단어 한번에 바꾸기 : replace (vsc 단축키 : ctrl + h)

&lt;style&gt;
. = class 
# = id
단, 우선순위 : id &gt; class &gt; tag
id : 학번(절대로 중복되지 않는 것)
class : 반(같은 반일 수 있음)


제어할 태그 선택하기
-&gt; button을 클릭했을 때 button에 저장된 js 코드에 의해 동적으로 &lt;body&gt; tag를 선택하게 만들고 싶음

: document.querySelector(selector);
(selector : &lt;body&gt;, #id, .class 등 내가 선택하고자 하는 것)



JavaScript란?
Html, CSS = 컴퓨터 언어
JavaScript = 컴퓨터 프로그래밍 언어

-&gt; 프로그래밍?
어원 : &quot;순서&quot;를 만드는 행위

-&gt; 컴퓨터 사용의 목적
어떤 일을 수행할 때
: 특정 하나의 기능만 사용 (x)
: 어떤 의도에 따라 순서대로 여러 기능을 작동 (o)
-&gt; 시간의 순서에 따라(&#39;동적으로&#39;) 실행되어야 할 동작을 배치하여 적어둔 후, 컴퓨터에게 전달 = 프로그래밍



toggle
- 오직 두 가지 상태만 존재하는 상황에서, 스위치를 누르면 한 값이 되고 다시 한 번 누르면 나머지 값으로 변하는 것 
(ex : 야간모드 on/off)</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[23.05.22 JavaScript <script>, Event]]></title>
            <link>https://velog.io/@sun_ovo/23.05.22-JavaScript-script-Event</link>
            <guid>https://velog.io/@sun_ovo/23.05.22-JavaScript-script-Event</guid>
            <pubDate>Mon, 22 May 2023 12:53:09 GMT</pubDate>
            <description><![CDATA[<h2>1. Script tag</h2> 

<p><code>&lt;script&gt; tag</code></p>
<p>= 웹 브라우저에게 <em>&#39; Html의 코드로 JS가 시작됨 &#39;</em> 을 알려주는 tag
    : script tag 안쪽의 코드를 JS로 해석<br>  <br></p>
<ul>
<li><p>HTML 
  : 정적인 코드   </p>
<pre><code>  &lt;h3&gt;HTML&lt;/h3&gt;
       1+1</code></pre><pre> 결과 : 1+1</pre>

<br>
</li>
<li><p>JavaScript 
: 동적인 코드</p>
</li>
</ul>
<pre><code>    &lt;h3&gt;JavaScript&lt;/h3&gt;
      &lt;script&gt;
        document.write(1+1);
      &lt;/script&gt;</code></pre><pre> 결과 : 2  </pre>


<h2>2. EVENT</h2>


<pre><code>&lt;input type = &quot;button&quot; value=&quot;Hi&quot; onclick=&quot;alert(&#39;hello&#39;)&quot;&gt;</code></pre><ul>
<li>&#39;onclick 속성&#39;의 &quot;속성값&quot; 
= alert(&#39;hello&#39;)
   : 반드시 JS가 와야함.
   : 웹은 &#39;onclick 속성&#39;의 &quot;속성값(=JS)&quot;을 기억하고 있다가 onclick이 소속된 tag를 사용자가 클릭했을 때 실행시킴.<br>  
이처럼 웹 위에서 일어나는 일을 EVENT라 칭함.
어떠한 이벤트가 일어났을 때 특정 JS가 실행되도록 하는 것이 onclick.
<br>
* 웹의 이벤트 ?
- onclick="(~JS~)" : onclick이 속성된 button을 누를 경우 속성 값으로 저장된 JS 코드 실행
- onchange="" : 입력된 글씨가 변경될 경우 속성값으로 저장된 JS 코드 실행
- onkeydown="" : 아무 키를 누를 경우 속성값으로 저장된 JS 코드 실행
- +) type
 : type="button" : click
   : type="text" : 글씨 입력
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[23.04.13 Box ]]></title>
            <link>https://velog.io/@sun_ovo/23.04.13-Box</link>
            <guid>https://velog.io/@sun_ovo/23.04.13-Box</guid>
            <pubDate>Sat, 22 Apr 2023 17:15:34 GMT</pubDate>
            <description><![CDATA[<p>23.04.13</p>
<ul>
<li><p>box 모델</p>
<pre><code>      h1{
          border-width : 5px;
          border-color : pink;
          border-style : solid;
          display : inline;  /* h1 태그가 블록이 아닌 인라인으로 content 크기만큼만 차지하게 해줌 */

      }   /* h1 태그는 화면 전체를 차지 = &quot;block level element&quot; */
      a{
          border-width : 5px;
          border-color : pink;
          border-style : solid;
          display: block;  /* a 태그가 블록으로 content 크기만큼만 차지하게 해줌 */

      }   /* a 태그는 자신의 content 크기만큼만 차지 = &quot;inline element&quot; */</code></pre></li>
</ul>
<p>h1, a{  /<em>,를 통해 여러 태그에 한번에 적용 가능</em>/
                border-width : 5px;
                border-color : pink;
                border-style : solid;</p>
<pre><code>            border : 5px pink solid; 
            /*위, 아래 동일 코드임. 중복 코드 방지를 위해 한번에 작성 가능(단 콤마(,) 사용을 하지 않아야함*/
        }</code></pre><ul>
<li><p>div 태그</p>
</li>
<li><p>어떠한 의미도 가지지 않음. 디자인의 목적을 위한 무색무취의 태그임.</p>
</li>
<li><p>block level의 태그이므로 기본적으로 줄바꿈이 적용됨.</p>
</li>
<li><p>span 태그</p>
</li>
<li><p>div와 동일한 용도의 태그</p>
</li>
<li><p>inline level의 태그이므로 줄바꿈이 적용되지 않음.</p>
</li>
</ul>
<p>#grid ol {
                <del>~</del>
              }
=&gt; id가 grid인 요소에 포함된 ol에만 적용 </p>
]]></description>
        </item>
    </channel>
</rss>