<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>dex_blog</title>
        <link>https://velog.io/</link>
        <description>성장하는 개발자</description>
        <lastBuildDate>Thu, 09 Feb 2023 07:14:56 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. dex_blog. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/dex_" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[SQL] 평균 일일 대여 요금 구하기(프로그래머스/MySQL)]]></title>
            <link>https://velog.io/@dex_/SQL-%ED%8F%89%EA%B7%A0-%EC%9D%BC%EC%9D%BC-%EB%8C%80%EC%97%AC-%EC%9A%94%EA%B8%88-%EA%B5%AC%ED%95%98%EA%B8%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4MySQL</link>
            <guid>https://velog.io/@dex_/SQL-%ED%8F%89%EA%B7%A0-%EC%9D%BC%EC%9D%BC-%EB%8C%80%EC%97%AC-%EC%9A%94%EA%B8%88-%EA%B5%AC%ED%95%98%EA%B8%B0%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4MySQL</guid>
            <pubDate>Thu, 09 Feb 2023 07:14:56 GMT</pubDate>
            <description><![CDATA[<h2 id="1-문제-출처">1. 문제 출처</h2>
<p><a href="https://school.programmers.co.kr/learn/courses/30/lessons/151136#qna">문제 출처 링크</a></p>
<h2 id="2-문제-설명">2. 문제 설명</h2>
<p>다음은 어느 자동차 대여 회사에서 대여중인 자동차들의 정보를 담은 CAR_RENTAL_COMPANY_CAR 테이블입니다. CAR_RENTAL_COMPANY_CAR 테이블은 아래와 같은 구조로 되어있으며, CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONS 는 각각 자동차 ID, 자동차 종류, 일일 대여 요금(원), 자동차 옵션 리스트를 나타냅니다.</p>
<table>
<thead>
<tr>
<th align="center">Column name</th>
<th align="center">Type</th>
<th align="center">Nullable</th>
</tr>
</thead>
<tbody><tr>
<td align="center">CAR_ID</td>
<td align="center">INTEGER</td>
<td align="center">FALSE</td>
</tr>
<tr>
<td align="center">CAR_TYPE</td>
<td align="center">VARCHAR(255)</td>
<td align="center">FALSE</td>
</tr>
<tr>
<td align="center">DAILY_FEE</td>
<td align="center">INTEGER</td>
<td align="center">FALSE</td>
</tr>
<tr>
<td align="center">OPTIONS</td>
<td align="center">VARCHAR(255)</td>
<td align="center">FALSE</td>
</tr>
</tbody></table>
<p>자동차 종류는 ‘세단’, ‘SUV’, ‘승합차’, ‘트럭’, ‘리무진’ 이 있습니다. 자동차 옵션 리스트는 콤마(‘,’)로 구분된 키워드 리스트(예: ‘열선시트’, ‘스마트키’, ‘주차감지센서’)로 되어있으며, 키워드 종류는 ‘주차감지센서’, ‘스마트키’, ‘네비게이션’, ‘통풍시트’, ‘열선시트’, ‘후방카메라’, ‘가죽시트’ 가 있습니다.</p>
<h2 id="3-문제">3. 문제</h2>
<p>CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 ‘SUV’인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요.</p>
<h2 id="4-문제-풀이">4. 문제 풀이</h2>
<pre><code>SELECT ROUND(AVG(DAILY_FEE),0) AS AVERAGE_FEE 
FROM CAR_RENTAL_COMPANY_CAR
WHERE CAR_TYPE = &#39;SUV&#39;</code></pre><p>문제를 간단히 말로 하자면 SUV 차량의 평균 일일 대여 요금을 구하는것이다.
SELECT문에는 일일 요금의 평균 값을 구하는데 소수점 첫 번째에서 반올림을 하기 위해서 ROUND 사용 그리고 나온 값을 문제에 나와있는 컬럼명으로 나타나게 하였습니다.
FROM문에는 테이블의 이름을 적고 WHERE문에서는 SUV의 값만 조회할수 있게 하였습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL]DCL이란]]></title>
            <link>https://velog.io/@dex_/SQLDCL%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/SQLDCL%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Mon, 23 Jan 2023 06:38:31 GMT</pubDate>
            <description><![CDATA[<h2 id="dcl-data-control-language-데이터-제어-언어">DCL (Data Control Language): 데이터 제어 언어</h2>
<blockquote>
<ul>
<li>데이터를 관리 목적으로 보안, 무결성, 회복, 병행 제어 등을 정의하는데 사용한다.</li>
<li>DCL을 사용하면 데이터베이스에 접근하여 읽거나 쓰는 것을 제한할 수 있는 권한을 부여하거나 박탈할 수 있고 트랜잭션을 명시하거나 조작할 수 있다.</li>
<li>불법적인 사용자로부터 데이터를 보호하기 위한 데이터 보안의 역할을 수행하며, 데이터의 정확성을 위한 무결성을 유지하기도 한다.</li>
<li>시스템 장애에 대비한 회복과 병행수행을 제어한다.</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th align="center">종류</th>
<th align="center">역할</th>
</tr>
</thead>
<tbody><tr>
<td align="center">GRANT</td>
<td align="center">특정 데이터베이스 사용자에게 권한을 정의할때 사용하는 명령어</td>
</tr>
<tr>
<td align="center">REVOKE</td>
<td align="center">특정 데이터베이스 사용자에게 권한을 삭제할때 사용하는 명령어</td>
</tr>
<tr>
<td align="center">COMMIT</td>
<td align="center">트랜잭션의 작업을 저장할때 사용하는 명령어</td>
</tr>
<tr>
<td align="center">ROLLBACK</td>
<td align="center">트랜잭션의 작업을 취소, 원래대로 복구할때 사용하는 명령어</td>
</tr>
</tbody></table>
<hr>
<p>Reference
<a href="https://velog.io/@alicesykim95/DB-DDL-DML-DCL-TCL%EC%9D%B4%EB%9E%80">Blog</a>
<a href="https://velog.io/@ksk5401/DDL-DML-DCL-%EC%9D%B4%EB%9E%80">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL]DML이란]]></title>
            <link>https://velog.io/@dex_/SQLDML%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/SQLDML%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Fri, 20 Jan 2023 10:05:03 GMT</pubDate>
            <description><![CDATA[<h2 id="dml-data-manipulation-language-데이터-조작-언어">DML (Data Manipulation Language): 데이터 조작 언어</h2>
<blockquote>
<ul>
<li>데이터 베이스의 내부 데이터를 관리하기 위한 언어이다.</li>
<li>데이터를 조회, 추가, 변경, 삭제 등의 작업을 수행하기 위해 사용된다.</li>
<li>DDL과 달리 DML은 적는 즉시 반영(Auto Commit)이 되지 않는다.</li>
<li>다시 말해, DML에 의한 데이터 변동은 영구적인 변경이 아니기 때문에 ROLLBACK으로 다시 되돌릴 수 있다.</li>
<li>또한, DML은 Target 테이블을 메모리 버퍼 위에 올려두고 변경을 수행하기 때문에, 실시간으로 테이블에 반영되지 않는다.</li>
<li>Commit 명령어를 통해 Transaction을 종료해야 해당 변경 사항이 테이블에 반영된다.</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th align="center">종류</th>
<th align="center">역할</th>
</tr>
</thead>
<tbody><tr>
<td align="center">SELECT</td>
<td align="center">데이터베이스에서 데이터를 검색합니다.</td>
</tr>
<tr>
<td align="center">INSERT</td>
<td align="center">테이블에 데이터를 추가합니다.</td>
</tr>
<tr>
<td align="center">UPDATE</td>
<td align="center">테이블 내에 존재하는 데이터를 수정합니다.</td>
</tr>
<tr>
<td align="center">DELETE</td>
<td align="center">테이블에서 데이터를 삭제합니다.</td>
</tr>
</tbody></table>
<hr>
<p>Reference
<a href="https://velog.io/@alicesykim95/DB-DDL-DML-DCL-TCL%EC%9D%B4%EB%9E%80">Blog</a>
<a href="https://velog.io/@ksk5401/DDL-DML-DCL-%EC%9D%B4%EB%9E%80">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL]DDL이란]]></title>
            <link>https://velog.io/@dex_/SQLDDL%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/SQLDDL%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Tue, 17 Jan 2023 10:11:49 GMT</pubDate>
            <description><![CDATA[<h2 id="ddl-data-definition-language-데이터-정의-언어">DDL (Data Definition Language): 데이터 정의 언어</h2>
<blockquote>
<ul>
<li>테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당한다.</li>
<li>DDL은 명령어를 입력하는 순간 작업이 즉시 반영(Auto Commit)이 되기 때문에 사용할 때 주의해야 한다.</li>
</ul>
</blockquote>
<table>
<thead>
<tr>
<th align="center">종류</th>
<th align="center">역할</th>
</tr>
</thead>
<tbody><tr>
<td align="center">CREATE</td>
<td align="center">대상 객체를 생성합니다.</td>
</tr>
<tr>
<td align="center">ALTER</td>
<td align="center">대상 객체의 구조를 변경(수정)합니다.</td>
</tr>
<tr>
<td align="center">DROP</td>
<td align="center">대상 객체와 객체 내부 데이터를 삭제합니다.</td>
</tr>
<tr>
<td align="center">RENAME</td>
<td align="center">대상 객체 이름을 변경합니다.</td>
</tr>
<tr>
<td align="center">COMMENT</td>
<td align="center">데이터에 주석 등을 추가합니다.</td>
</tr>
<tr>
<td align="center">TRUNCATE</td>
<td align="center">공간을 포함한 모든 레코드를 삭제합니다.(테이블 초기화 등)</td>
</tr>
</tbody></table>
<h3 id="create-규칙">CREATE 규칙</h3>
<blockquote>
<ul>
<li>객체를 의미하는 것이므로 단수형으로 이름을 짓는걸 권고한다.</li>
<li>유일한 이름으로 명명해야 한다.</li>
<li>테이블 내의 컬럼명 또한 중복되지 않는 유일한 이름으로 명명해야 한다.</li>
<li>정의할 때 각 컬럼은 ,으로 구분하며 테이블 생성문의 마지막은 ;이다.</li>
<li>컬럼명은 데이터 표준화 관점에서 일관성 있게 사용해야 한다.</li>
<li>컬럼 뒤에 데이터 유형을 반드시 지정해야 한다.</li>
<li>테이블과 컬럼명은 반드시 문자로 시작한다.</li>
<li>대소문자 구분을 하지 않지만, 기본적으로 대문자로 만들어진다.</li>
</ul>
</blockquote>
<h3 id="alter-컬럼-변경-문법">ALTER 컬럼 변경 문법</h3>
<blockquote>
<ul>
<li>ADD COLUMN -&gt; 컬럼을 추가하는 역할</li>
<li>DROP COLUMN -&gt; 컬럼을 삭제하는 역할</li>
<li>MODIFY COLUMN -&gt; 컬럼을 수정하는 역할</li>
<li>RENAME COLUMN -&gt; 컬럼 이름을 변경하는 역할</li>
<li>DROP CONSTRAIN -&gt; 컬럼을 제약조건을 기반해서 삭제하는 역할</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://artist-developer.tistory.com/39">Blog</a>
<a href="https://velog.io/@alicesykim95/DB-DDL-DML-DCL-TCL%EC%9D%B4%EB%9E%80">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[SQL]SQL이란]]></title>
            <link>https://velog.io/@dex_/SQLSQL%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/SQLSQL%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Sun, 15 Jan 2023 14:44:44 GMT</pubDate>
            <description><![CDATA[<p>SQL(Structured Query Language, 구조적 질의 언어)이란?</p>
<blockquote>
<ul>
<li>SQL은 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다.</li>
<li>관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다.</li>
<li>많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다.</li>
</ul>
</blockquote>
<h2 id="sql-실행-순서">SQL 실행 순서</h2>
<blockquote>
<p>SQL → Syntax Check → Semantic Check → Library Cache Check → Optimization → Raw Source Generation → Execution</p>
</blockquote>
<ol>
<li>SQL : 쿼리 실행</li>
<li>Syntax Check : 문법 체크</li>
<li>Semantic Check : 객체(Object) 및 권한 유무 체크</li>
<li>Library Cache Check : Cache에서 쿼리 저장 유무 검사 → 저장되어 있다면 Sofrt Parse로, Library Cache에 저장된 쿼리 바로 사용 → 저장되어 있지 않으면 Hard Parse로 다음 단계로 넘어간다.</li>
<li>Optimization : 최적화한 쿼리 실행 계획을 만드는 단계</li>
<li>Raw Source Generation : 위 Optimization 단계에서 생성된 실행 계획을 실제 실행할 수 있게 Formatting</li>
<li>Execution : 실행</li>
</ol>
<h2 id="sql-문법-종류">SQL 문법 종류</h2>
<blockquote>
<ul>
<li>DDL(Data Definition Language) : 데이터 정의 언어
데이터베이스 스키마와 설명을 처리하도록 정의하는 언어이다.
데이터베이스나 테이블 생성/변경/삭제 등의 작업이 포함된다.
<code>예로 들면 CREATE(데이터베이스 개체(테이블, 인덱스, 제약조건 등)의 정의, DROP(데이터베이스 개체 삭제), ALTER(데이터베이스 개체 정의 변경) 등을 의미한다.</code></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>DML(Data Manipulation Language) : 데이터 조작 언어
데이터 검색, 삽입, 변경, 삭제 수행을 조작하는 언어이다.
실직적으로 저장된 데이터를 관리하고 처리할 때 사용한다.
<code>예로 들면 SELECT(테이블 데이터의 검색 결과 집합의 취득), INSERT(행 데이터 또는 테이블 데이터의 삽입), DELETE(데이터의 삭제), UPDATE(표 업데이트) 등을 의미한다.</code></li>
</ul>
</blockquote>
<blockquote>
<ul>
<li>DCL(Date Control Language) : 데이터 제어 언어
사용자 관리 및 사용자별로 릴레이션 또는 데이터를 관리하고 접근하는 권한을 다루기 위한 언어이다.
<code>예로 들면 COMMIT(트랜잭션의 작업 결과를 반영), ROLLBACK(트랜잭션의 작업을 취소 및 원래대로 복구), GRANT(사용자에게 권한 부여), REVOKE(사용자 권한 취소) 등을 의미한다.</code></li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://velog.io/@alicesykim95/DB-DDL-DML-DCL-TCL%EC%9D%B4%EB%9E%80">Blog</a>
<a href="https://www.icia.co.kr/community/board/view/2/1/89?">Blog</a>
<a href="https://velog.io/@estell/SQL-1-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4DB-SQL%EC%9D%B4%EB%9E%80">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Network]HTTP와 HTTPS]]></title>
            <link>https://velog.io/@dex_/NetworkHTTP%EC%99%80-HTTPS</link>
            <guid>https://velog.io/@dex_/NetworkHTTP%EC%99%80-HTTPS</guid>
            <pubDate>Sat, 14 Jan 2023 07:00:00 GMT</pubDate>
            <description><![CDATA[<h2 id="httphyper-text-transfer-protocol란">HTTP(Hyper Text Transfer Protocol)란?</h2>
<blockquote>
<ul>
<li>서버/클라이언트 모델을 따라 데이터를 주고 받기 위한 프로토콜입니다.</li>
<li>인터넷에서 하이퍼텍스트를 교환하기 위한 통신 규약으로, 80번 포트를 사용하고 있습니다.</li>
<li>HTTP 서버가 80번 포트에서 요청을 기다리고 있으며, 클라이언트는 80번 포트로 요청을 보내게 된다.</li>
<li>암호화가 되지 않은 평문 데이터를 전송하는 프로토콜이라서 도청이 가능하며, 상대를 확인하지 않기 때문에 위장이 가능하고 마지막으로 완전성을 증명할 수 없기 때문에 변조가 가능하다는 단점을 가지고 있습니다.</li>
</ul>
</blockquote>
<h3 id="http의-구조">HTTP의 구조</h3>
<blockquote>
<ul>
<li>애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.</li>
<li>HTTP는 상태를 가지고 있지 않은 Stateless 프로토콜이고 Method, Path, Version, Headers, Body 등으로 구성된다.</li>
</ul>
</blockquote>
<hr>
<h2 id="httpshyper-text-transfer-protocol-secure란">HTTPS(Hyper Text Transfer Protocol Secure)란?</h2>
<blockquote>
<ul>
<li>HTTP에 데이터 암호화가 추가된 프로토콜이며, 443번 포트를 사용하고 있습니다.</li>
<li>HTTP의 단점인 제3자가 정보를 조회하거나 데이터가 도난되지 않도록 SSL(Secure Socket Layer) 혹은 TLS(Transport Layer Security)를 사용하여 데이터 암호화를 지원하고 있습니다.</li>
</ul>
</blockquote>
<h3 id="https의-암호화-방식">HTTPS의 암호화 방식</h3>
<blockquote>
<ol>
<li>대칭키 암호화</li>
</ol>
<ul>
<li>클라이언트와 서버가 동일한 키를 사용해 암호화/복호화를 진행합니다.</li>
<li>키가 노출되면 매우 위험하지만 연산 속도가 빠르다는 장점이 있습니다.</li>
</ul>
<ol start="2">
<li>비대칭키 암호화</li>
</ol>
<ul>
<li>1개의 쌍으로 구성된 공개키와 개인키를 암호화/복호화 하는데 사용합니다.</li>
<li>키가 노출되어도 비교적 안전하지만 연산 속도가 느리다는 단점이 있습니다.</li>
<li>비대칭키 암호화는 공개키/개인키를 사용해 데이터를 암호화 하고 있다.
<code>공개키는 모두에게 공개 가능한 키를 말한다.</code>
<code>개인키는 나만 가지고 알고 있어야 하는 키를 말한다.</code></li>
</ul>
</blockquote>
<h3 id="https의-동작-과정">HTTPS의 동작 과정</h3>
<blockquote>
<ul>
<li>HTTPS는 대칭키 암호화와 비대칭키 암호화를 모두 사용하여 빠른 연산 속도와 안정성을 모두 가지고 있다.</li>
<li>HTTPS 연결 과정에서는 먼저 서버와 클라이언트 간에 세션키를 교환하는데 여기서 말하는 세션키는 주고 받는 데이터를 암호화하기 위해 사용되는 대칭키이며, 데이터 간의 교환에는 빠른 연산 속도가 필요하므로 세션키는 대칭키로 만들어진다.</li>
<li>세션키를 주고 받기 위해 비대칭키를 사용하게 되는데 처음 연결을 성립하여 안전하게 세션키를 공유하는 과정에서 비대칭키가 사용되고 이후에 데이터를 교환하는 과정에서 빠른 연산 속도를 위해 대칭키가 사용되는것이다.</li>
</ul>
</blockquote>
<hr>
<h2 id="http와-https의-차이점">HTTP와 HTTPS의 차이점</h2>
<blockquote>
<ul>
<li>HTTTP는 암호화가 추가되지 않았기 때문에 보안에 취약하며, HTTPS는 암호화가 되기 때문에 안전하게 데이터를 주고 받을 수 있다.</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://mangkyu.tistory.com/98">Blog</a>
<a href="https://brunch.co.kr/@hyoi0303/10">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA]오버로딩과 오버라이딩]]></title>
            <link>https://velog.io/@dex_/JAVA%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9</link>
            <guid>https://velog.io/@dex_/JAVA%EC%98%A4%EB%B2%84%EB%A1%9C%EB%94%A9%EA%B3%BC-%EC%98%A4%EB%B2%84%EB%9D%BC%EC%9D%B4%EB%94%A9</guid>
            <pubDate>Fri, 13 Jan 2023 12:20:03 GMT</pubDate>
            <description><![CDATA[<h1 id="오버로딩과-오버라이딩-차이">오버로딩과 오버라이딩 차이</h1>
<hr>
<h2 id="오버로딩overloading이란">오버로딩(Overloading)이란?</h2>
<blockquote>
</blockquote>
<ul>
<li>오버로딩이라는 뜻은 사전적인 의미로는 과적하다라는 뜻이다.</li>
<li>JAVA에서 오버로딩은 한 클래스 내의 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할수 있다.</li>
</ul>
<h3 id="오버로딩의-조건">오버로딩의 조건</h3>
<blockquote>
</blockquote>
<ul>
<li>메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야한다.</li>
<li>다만 리턴 값만 다른것은 오버로딩을 할 수 없다.</li>
</ul>
<hr>
<h2 id="오버라이딩overriding이란">오버라이딩(Overriding)이란?</h2>
<blockquote>
</blockquote>
<ul>
<li>부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라고 한다. </li>
</ul>
<h3 id="오버라이딩의-조건">오버라이딩의 조건</h3>
<blockquote>
</blockquote>
<ul>
<li>오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야한다.</li>
</ul>
<hr>
<h2 id="오버로딩과-오버라이딩-차이-1">오버로딩과 오버라이딩 차이</h2>
<table>
<thead>
<tr>
<th align="center">구분</th>
<th align="center">오버라이딩(Overriding)</th>
<th align="center">오버로딩(Overloading)</th>
</tr>
</thead>
<tbody><tr>
<td align="center">정의</td>
<td align="center">상속받은 메소드를 재정의 하는 것</td>
<td align="center">기존에 없는 새로운 메소드를 추가하는 것</td>
</tr>
<tr>
<td align="center">접근 제어자</td>
<td align="center">부모 클래스의 메소드의 접근 제어자보다 더 넓은 범위의 접근 제어자를 자식 클래스의 메소드에서 설정할수 있다.</td>
<td align="center">모든 접근 제어자를 사용할 수 있다.</td>
</tr>
<tr>
<td align="center">리턴형</td>
<td align="center">동일해야 한다.</td>
<td align="center">달라도 된다.</td>
</tr>
<tr>
<td align="center">메소드명</td>
<td align="center">동일해야 한다.</td>
<td align="center">동일해야 한다.</td>
</tr>
<tr>
<td align="center">매개변수</td>
<td align="center">동일해야 한다.</td>
<td align="center">달아야만 한다.</td>
</tr>
<tr>
<td align="center">적용 범위</td>
<td align="center">상속관계에서 적용된다.</td>
<td align="center">같은 클래스 내에서 적용된다.</td>
</tr>
</tbody></table>
<hr>
<p>Reference
<a href="https://brunch.co.kr/@kimkm4726/2">Blog</a>
<a href="https://hyoje420.tistory.com/14">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Network]TCP와 UDP]]></title>
            <link>https://velog.io/@dex_/NetworkTCP%EC%99%80-UDP</link>
            <guid>https://velog.io/@dex_/NetworkTCP%EC%99%80-UDP</guid>
            <pubDate>Wed, 11 Jan 2023 09:34:56 GMT</pubDate>
            <description><![CDATA[<h2 id="tcp란">TCP란?</h2>
<blockquote>
</blockquote>
<ul>
<li>신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜이다.</li>
<li>일반적으로는 TCP와 IP가 같이 사용이 되는데, IP가 데이터의 전송을 처리한다면 TCP는 패킷 추적 및 관리를 처리한다.</li>
<li>연결 지향형인 TCP는 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작하고 4-way handshaking이라는 과정을 통해 연결을 해제한다.</li>
<li>흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장하고 신뢰성이 높습니다.
<code>흐름 제어란 보내는 측과 받는 측의 데이터 처리속도 차이를 조절해주는 것을 의미한다.</code>
<code>혼잡 제어란 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방치하는 것을 의미한다.</code></li>
</ul>
<hr>
<h2 id="udp란">UDP란?</h2>
<blockquote>
</blockquote>
<ul>
<li>인터넷상에서 서로 정보를 주고 받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 비연결형 프로토콜이다.</li>
<li>비연결형 프로토콜이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않습니다.</li>
<li>데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할수 있습니다.</li>
<li>데이터의 순서를 보장하지 않기 때문에 신뢰성이 낮지만 속도가 빠르며 네트워크 부하도 적습니다.</li>
</ul>
<hr>
<table>
<thead>
<tr>
<th align="center">프로토콜 종류</th>
<th align="center">TCP(Transfer Control Protocol)</th>
<th align="center">UDP(User Datagram Protocol)</th>
</tr>
</thead>
<tbody><tr>
<td align="center">연결 방식</td>
<td align="center">연결형 프로토콜</td>
<td align="center">비연결형 프로토콜</td>
</tr>
<tr>
<td align="center">패킷 교환 방식</td>
<td align="center">가상 회선 방식</td>
<td align="center">데이터그램 방식</td>
</tr>
<tr>
<td align="center">신뢰성</td>
<td align="center">신뢰성 있는 데이터 전송 (데이터 재전송 존재 O)</td>
<td align="center">비신뢰성 데이터 전송 (데이터 재전송 존재 X)</td>
</tr>
<tr>
<td align="center">통신 방식</td>
<td align="center">1:1 통신</td>
<td align="center">1:1,1:N,N:N 통신</td>
</tr>
<tr>
<td align="center">속도</td>
<td align="center">UDP에 비해 속도가 느리다</td>
<td align="center">TCP에 비해 속도가 빠르다</td>
</tr>
<tr>
<td align="center">사용처</td>
<td align="center">파일전송 등</td>
<td align="center">실시간 스트리밍 등</td>
</tr>
</tbody></table>
<hr>
<p>Reference
<a href="https://mangkyu.tistory.com/15">Blog</a>
<a href="https://cocoon1787.tistory.com/757">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조] Stack(스택), Queue(큐) 란]]></title>
            <link>https://velog.io/@dex_/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Stack%EC%8A%A4%ED%83%9D-Queue%ED%81%90-%EB%9E%80</link>
            <guid>https://velog.io/@dex_/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Stack%EC%8A%A4%ED%83%9D-Queue%ED%81%90-%EB%9E%80</guid>
            <pubDate>Wed, 04 Jan 2023 08:14:29 GMT</pubDate>
            <description><![CDATA[<h2 id="stack스택이란">stack(스택)이란?</h2>
<blockquote>
<ul>
<li>스택이란 쌓다 라는 의미로 스택 자료구조란 책처럼 차곡차곡 쌓아 올린 형태의 자료 구조를 의미한다.</li>
<li>데이터가 순서대로 쌓이며 가장 마지막에 삽입된 자료가 가장 먼저 삭제되는 구조를 가지고 있다.</li>
<li>스택은 정해진 방향으로만 쌓을수 있고, top으로 정한 곳을 통해서만 접근 가능하다.</li>
<li>새로 삽입된 자료는 top이 가리키는 가장 맨 위에 쌓이게 되고, 자료를 삭제할 때도 top을 통해서 삭제가 가능하다.</li>
<li>스택에서 삽입 연산을 <strong>push</strong>, 삭제 연산을 <strong>pop</strong>이라고 하며, 이러한 스택의 구조를 <strong>후입선출</strong> 구조라고 하며, <strong>LIFO(Last In First Out)</strong> 라고 부른다.
<code>예로 들면 책상에 책을 쌓아두는 것이랑 포개둔 일회용 종이컵을 하나씩 꺼내서 사용하는것을 말할수 있다.</code></li>
</ul>
</blockquote>
<h3 id="스택의-사용-사례">스택의 사용 사례</h3>
<blockquote>
<ul>
<li>웹 브라우저 방문 기록 (뒤로가기)</li>
<li>실행 취소 (undo)</li>
<li>역순 문자열 만들기</li>
<li>후위 표기법 계산</li>
</ul>
</blockquote>
<hr>
<h2 id="queue큐란">Queue(큐)란?</h2>
<blockquote>
<ul>
<li>큐는 제일 먼저 들어온 것이 나가는 구조로 되어있으며, 이러한 큐의 구조를 <strong>선입선출</strong> 구조라고 하며, <strong>FIFO(First In First Out)</strong> 라고 부른다.</li>
<li>삭제 연산이 수행되는 곳을 프론트(front)라고 하며, 삽입 연산이 수행되는 곳은 리어(rear)라고 한다.</li>
<li>선입선출 구조를 위해서 스택과는 다르게 한쪽에서는 삽입 작업이 반대쪽에서는 삭제 작업이 이루어 지고 있다.</li>
<li>큐에서 리어에서 진행되는 삽입 연산을 인큐(Enqueue)라고 하며, 프론트에서 진행되는 삭제 연산을 디큐(Dequeue)라고 한다.
<code>예로 들면 카페에서 먼저 와서 주문한 손님이 음료를 먼저 받고 나가는것을 말할수있다.</code></li>
</ul>
</blockquote>
<h3 id="큐의-사용-사례">큐의 사용 사례</h3>
<blockquote>
<ul>
<li>은행 업무</li>
<li>대기열 순서와 같이 우선 순위의 작업 예약 등</li>
<li>서비스 센터의 대기 시간</li>
<li>프로세스 관리</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://jud00.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%8A%A4%ED%83%9DStack%EA%B3%BC-%ED%81%90Queue%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90">Blog</a>
<a href="https://devuna.tistory.com/22">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[개발]동기와 비동기]]></title>
            <link>https://velog.io/@dex_/%EA%B0%9C%EB%B0%9C%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0</link>
            <guid>https://velog.io/@dex_/%EA%B0%9C%EB%B0%9C%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0</guid>
            <pubDate>Sat, 31 Dec 2022 16:54:47 GMT</pubDate>
            <description><![CDATA[<h2 id="동기synchronous">동기(Synchronous)</h2>
<blockquote>
<ul>
<li>동기는 말 그대로 동시에 일어난다는 뜻이며, 데이터의 요청과 결과가 한 자리에서 동시에 일어나는 것을 말합니다.</li>
<li>요청을 하면 시간이 얼마나 걸리던지 요청한 자리에서 결과가 주어져야 합니다.</li>
<li>순서에 맞춰 진행된다는 장점이 있지만 사용자가 데이터를 서버에게 요청한다면 그에 따른 응답을 사용자에게 다시 리턴해주기전까지 사용자는 다른 활동을 할 수 없으며 기다려야만 하고 추가적으로 여러 가지 요청을 동시에 처리할 수 없다는 단점이 있습니다.</li>
<li>설계가 매우 간단하고 직관적입니다.</li>
</ul>
</blockquote>
<hr>
<h2 id="비동기asynchronous">비동기(Asynchronous)</h2>
<blockquote>
<ul>
<li>비동기는 말 그대로 동시에 일어나지 않는다는 뜻이며, 데이터의 요청과 결과가 동시에 일어나지 않는것을 말합니다.</li>
<li>동기와는 반대로 하나의 요청에 따른 응답을 즉시 처리하지 않아도, 그 대기시간 동안 또 다른 요청에 대해 처리 가능한 장점이 있지만 동기 방식에 비해 속도가 떨어질수 있습니다.</li>
<li>동기보다는 설계가 복잡합니다.</li>
</ul>
</blockquote>
<hr>
<h2 id="동기와-비동기-장단점">동기와 비동기 장단점</h2>
<table>
<thead>
<tr>
<th align="center">장단점</th>
<th align="center">동기</th>
<th align="center">비동기</th>
</tr>
</thead>
<tbody><tr>
<td align="center">장점</td>
<td align="center">설계가 매우 간단하고 직관적</td>
<td align="center">요청에 따른 결과가 반환되는 시간 동안 다른 작업을 수행 가능</td>
</tr>
<tr>
<td align="center">단점</td>
<td align="center">결과가 주어질 때까지 대기</td>
<td align="center">동기보다 설계가 복잡</td>
</tr>
</tbody></table>
<hr>
<h2 id="동기와-비동기-차이점">동기와 비동기 차이점</h2>
<blockquote>
<ul>
<li>동기와 비동기는 어떤 작업 혹은 그와 연관된 작업을 처리하고자 하는 목적의 차이 입니다.</li>
<li>동기는 추구하는 행위와 목적이 동시에 이루어지고, 비동기는 추구하는 행위와 목적이 다를 수도 있고, 동시에 이루어지지도 않습니다.</li>
</ul>
</blockquote>
<hr>
<h2 id="블록">블록</h2>
<blockquote>
<ul>
<li>블록이란 동기의 개념에서 만들어진 상태입니다.
<code>예로 들면 브라우저(크롬)가 실행되는 시간을 10분이라고 가정했을때 브라우저(크롬)가 오픈 되기전까지 다른 브라우저(사파리 등)는 계속 대기해야 하는데 그 상태를 블록이라고 합니다.</code></li>
</ul>
</blockquote>
<hr>
<h2 id="논블록">논블록</h2>
<blockquote>
<ul>
<li>논블록이란 비동기의 개념에서 만들어진 상태입니다.
<code>예로 들면 브라우저(크롬)가 실행되는 시간을 10분이라고 가정했을때 브라우저(크롬)가 오픈 되기전까지 다른 브라우저(사파리 등)는 시간을 대기 하지 않고 제약없이 자유롭게 사용할수 있는 상황을 논블록 상태라고 합니다.</code></li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://dev-coco.tistory.com/46">Blog</a>
<a href="https://velog.io/@slobber/%EB%8F%99%EA%B8%B0%EC%99%80-%EB%B9%84%EB%8F%99%EA%B8%B0%EC%9D%98-%EC%B0%A8%EC%9D%B4">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[RESTAPI]REST API란]]></title>
            <link>https://velog.io/@dex_/REST-API%EB%9E%80</link>
            <guid>https://velog.io/@dex_/REST-API%EB%9E%80</guid>
            <pubDate>Tue, 27 Dec 2022 16:37:57 GMT</pubDate>
            <description><![CDATA[<h2 id="apiapplication-programming-interface란">API(Application Programming Interface)란?</h2>
<blockquote>
</blockquote>
<ul>
<li>API란 클라이언트가 리소스를 요청할 수 있도록 서버측에서 제공된 인터페이스를 말한다.</li>
<li>이러한 API로 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 한다.</li>
<li>서버를 개발한다는 것은 API에 대한 마스터 권한이 생기는 것이다.</li>
<li>API와 함께 항상 메뉴얼도 제공되어야 한다.</li>
<li>URL를 모르면 클라이언트는 사용할 수 없다.</li>
</ul>
<p>REST에 대해서는 이전 블로그에서 확인 가능하다. -&gt; <a href="https://velog.io/@dex_/REST-API%EC%97%90%EC%84%9C-REST%EB%9E%80">Link</a></p>
<hr>
<h2 id="rest-api란">REST API란?</h2>
<blockquote>
</blockquote>
<ul>
<li>REST 기반으로 서비스 API를 구현하는 것을 의미한다.</li>
<li>최근 OpenAPI(누구나 사용할 수 있도록 공개된 API), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.</li>
</ul>
<hr>
<h2 id="rest-api-특징">REST API 특징</h2>
<blockquote>
</blockquote>
<ul>
<li>사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있다.</li>
<li>REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.</li>
<li>즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, JAVA, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.</li>
</ul>
<hr>
<h2 id="rest-api-설계-기본-규칙">REST API 설계 기본 규칙</h2>
<ol>
<li><p>URL은 정보의 자원을 표현해야 한다.</p>
<blockquote>
<ul>
<li>resource는 동사보다는 명사를, 대문자 보다는 소문자를 사용한다.</li>
<li>resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다.</li>
<li>resource의 컬렌션 이름으로는 복수 명사를 사용해야 한다.</li>
<li>resource의 스토어 이름으로는 복수 명사를 사용해야 한다.
<code>예로 들면 GET/Member/1 -&gt; GET/members/1 를 말한다.</code></li>
</ul>
</blockquote>
</li>
<li><p>자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.</p>
<blockquote>
<ul>
<li>URL에 HTTP Method가 들어가면 안된다.
<code>예로 들면 GET/members/deletd/1 -&gt; DELETE/members/1 를 말한다.</code></li>
<li>URL에 행위에 대한 동사 표현이 들어가면 안되는데 즉, CRUD 기능을 나타내는 것은 URL에 사용하지 않는다.
<code>예로 들면 GET/members/show/1 -&gt; GET/members/1 혹은 GET/members/insert/1 -&gt; POST/members/2 를 말한다.</code></li>
<li>경로 부분 중 변화하는 부분은 유일한 값으로 대체하는데 즉, id는 하나의 특정 resource를 나타내는 고유값이다.
<code>예로 들면 student를 생성하는 route는 POST/students 이고 id가 12인 student를 삭제하는 route는 DELETE/students/12를 말한다.</code></li>
</ul>
</blockquote>
</li>
</ol>
<h3 id="http-method의-역할">HTTP Method의 역할</h3>
<p>POST, GET, PUT, DELETE 이 4가지의 Method를 가지고 CRUD를 할 수 있다.</p>
<table>
<thead>
<tr>
<th align="center">Method</th>
<th align="center">역할</th>
</tr>
</thead>
<tbody><tr>
<td align="center">POST</td>
<td align="center">POST를 통해 해당 URL를 요청하면 리소스를 생성합니다.</td>
</tr>
<tr>
<td align="center">GET</td>
<td align="center">GET을 통해 해당 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져옵니다.</td>
</tr>
<tr>
<td align="center">PUT</td>
<td align="center">PUT을 통해 해당 리소스를 수정합니다.</td>
</tr>
<tr>
<td align="center">DELETE</td>
<td align="center">DELETE를 통해 리소스를 삭제합니다.</td>
</tr>
</tbody></table>
<hr>
<h2 id="rest-api-설계-규칙">REST API 설계 규칙</h2>
<h3 id="1-슬래시-구분자는-계층-관계를-나타내는데-사용한다">1. 슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.</h3>
<p><code>예로 들면 http://restapi.example.com/blog/dex 를 말한다</code></p>
<h3 id="2-url-마지막-문자로-슬래시를-포함하지-않는다">2. URL 마지막 문자로 슬래시(/)를 포함하지 않는다.</h3>
<blockquote>
<ul>
<li>URL에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며, URL이 다르다는 것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URL도 달라져야 한다.</li>
<li>REST API는 분명한 URL를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URL 경로의 마지막에는 슬래시(/)를 사용하지 않는다.</li>
</ul>
</blockquote>
<h3 id="3-하이픈-은-url-가독성을-높이는데-사용한다">3. 하이픈(-)은 URL 가독성을 높이는데 사용한다.</h3>
<blockquote>
<ul>
<li>불가피하게 긴 URL 경로를 사용하게 된다면 하이픈을 사용해 가독성을 높여준다.</li>
</ul>
</blockquote>
<h3 id="4-밑줄_은-url에-사용하지-않는다">4. 밑줄(_)은 URL에 사용하지 않는다.</h3>
<blockquote>
<ul>
<li>밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.</li>
</ul>
</blockquote>
<h3 id="5-url-경로에는-소문자가-적합하다">5. URL 경로에는 소문자가 적합하다.</h3>
<blockquote>
<ul>
<li>URL 경로에 대문자 사용은 피하도록 한다.</li>
<li>PFC 3986(URL 문법 형식)은 URL 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.</li>
</ul>
</blockquote>
<h3 id="6-파일확장자는-url에-포함하지-않는다">6. 파일확장자는 URL에 포함하지 않는다.</h3>
<blockquote>
<ul>
<li>REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URL안에 포함시키지 않는다.</li>
<li>Access header를 사용한다.
<code>예로 들면 http://restapi.example.com/blog/dex.jpg 이렇게는 사용하지 않는다.</code></li>
</ul>
</blockquote>
<h3 id="7-리소스-간에는-연관-관계가-있는-경우">7. 리소스 간에는 연관 관계가 있는 경우</h3>
<blockquote>
<ul>
<li>/리소스명/리소스ID/관계가 있는 다른 리소스명
<code>예로 들면 GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)</code></li>
</ul>
</blockquote>
<hr>
<h2 id="rest-api-응답-상태-코드">REST API 응답 상태 코드</h2>
<table>
<thead>
<tr>
<th align="center">코드</th>
<th align="center">의미</th>
</tr>
</thead>
<tbody><tr>
<td align="center">1XX</td>
<td align="center">전송 프로토콜 수준의 정보 교환</td>
</tr>
<tr>
<td align="center">2XX</td>
<td align="center">클라이언트 요청이 성공적으로 수행됨</td>
</tr>
<tr>
<td align="center">3XX</td>
<td align="center">클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함</td>
</tr>
<tr>
<td align="center">4XX</td>
<td align="center">클라이언트의 잘못된 요청</td>
</tr>
<tr>
<td align="center">5XX</td>
<td align="center">서버쪽 오류로 인한 상태코드</td>
</tr>
</tbody></table>
<hr>
<p>Reference
<a href="https://meetup.nhncloud.com/posts/92">Blog</a>
<a href="https://hanamon.kr/rest-api/">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[RESTAPI]REST란]]></title>
            <link>https://velog.io/@dex_/RESTAPIREST%EB%9E%80</link>
            <guid>https://velog.io/@dex_/RESTAPIREST%EB%9E%80</guid>
            <pubDate>Mon, 26 Dec 2022 16:56:17 GMT</pubDate>
            <description><![CDATA[<h2 id="rest-api에서-rest란">REST API에서 REST란?</h2>
<blockquote>
</blockquote>
<ul>
<li>REST는 Representational State Transfer 라는 용어의 약자로서 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든것을 의미하며, 2000년도 로이 필딩의 박사학위 논문에서 최초로 소개되었습니다.</li>
<li>로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 합니다.</li>
<li>간단히 말해서 자원(Resource)의 표현(Representation)에 의한 상태 전달이라고 할 수 있다.</li>
<li>자원의 표현에서 자원은 해당 소프트웨어가 관리하는 모든것을 의미한다.
<code>예로 들자면 문서, 그림, 데이터, 해당 소프트웨어 자체 등을 말한다</code></li>
<li>자원의 표현은 그 자원을 표현하기 위한 이름을 말할 수 있다.
<code>예로 들자면 DB의 학생 정보가 자원일 때, ‘student&#39;를 자원의 표현으로 정하는 것을 말한다.</code></li>
<li>상태 전달이라는 것은 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달하는 것을 말한다.
<code>예로 들자면 JSON 혹은 XML를 통해 데이터를 주고 받는 것을 말한다.</code></li>
<li>월드 와이드 웹(WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍처의 한 형식REST는 기본적으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하기 때문에 웹의 장점을 최대한 활용할 수 있는 아키텍쳐 스타일이다.</li>
<li>REST는 네트워크상에서 Client와 Server 사이의 통신 방식 중 하나이다.</li>
</ul>
<hr>
<h2 id="rest-구성">REST 구성</h2>
<blockquote>
</blockquote>
<p>HTTP URL(Uniform Resource Identifier)을 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다.</p>
<h3 id="자원resource---url">자원(Resource) - URL</h3>
<blockquote>
</blockquote>
<ul>
<li>모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.</li>
<li>자원을 구별하는 ID는 ‘/groups/:group_id’와 같이 HTTP URL이다.</li>
<li>Client는 URL를 이용해서 자원을 지정하고 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.</li>
</ul>
<h3 id="행위verb---http-method">행위(Verb) - HTTP METHOD</h3>
<blockquote>
</blockquote>
<ul>
<li>HTTP 프로토콜의 Method를 사용한다.</li>
<li>HTTP 프로토콜은 GET, POST, PUT, DELETE와 같은 메서드를 제공한다.</li>
</ul>
<h3 id="표현representations">표현(Representations)</h3>
<blockquote>
</blockquote>
<ul>
<li>Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.</li>
<li>REST에서 하나의 자원은 JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.</li>
<li>JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.</li>
</ul>
<hr>
<h2 id="rest의-특징">REST의 특징</h2>
<h3 id="server-client서버-클라이언트-구조">Server-Client(서버-클라이언트 구조)</h3>
<blockquote>
</blockquote>
<ul>
<li>자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다.</li>
<li>REST Server는 API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.</li>
<li>Client는 사용자 인증이나 context(세션, 로그인 정보) 등을 직접 관리하고 책임진다.</li>
<li>각각의 역할이 확실히 구분되기 때문에 Client와 Server에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어듭니다.</li>
</ul>
<h3 id="stateless무상태">Stateless(무상태)</h3>
<blockquote>
</blockquote>
<ul>
<li>HTTP 프로토콜은 Statless Protocol이므로 REST 역시 무상태성을 갖는다.</li>
<li>Client의 context를 Server에 저장하지 않는데 간단히 말하자면 세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해진다.</li>
<li>Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.</li>
<li>각 API 서버는 Client의 요청만을 단순 처리하는데 즉, 이전 요청이 다음 요청의 처리에 연관되어서는 안된다는 것이다.</li>
<li>물론 이전 요청이 DB를 수정하여 DB에 의해 바뀌는 것은 허용한다.</li>
<li>Server의 처리 방식에 일관성을 부여하고 부담이 줄어들며, 서비스의 자유도가 높아진다.</li>
</ul>
<h3 id="cacheable캐시-처리-기능">Cacheable(캐시 처리 기능)</h3>
<blockquote>
</blockquote>
<ul>
<li>웹 표준 HTTP 프로토콜을 그대로 사용하므로 웹에서 사용하는 기존의 인프라를 그대로 활용할 수 있는데 여기서 HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있다.</li>
<li>HTTP 프로콜 표준에서 사용하는 Last-Modified 태스나 E-Tag를 이용하면 캐싱 구현이 가능하다.</li>
<li>대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.</li>
<li>캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있다.</li>
</ul>
<h3 id="layered-system계층화">Layered System(계층화)</h3>
<blockquote>
</blockquote>
<ul>
<li>Client는 REST API Server만 호출한다.</li>
<li>REST Server는 다중 계층으로 구성될 수 있다.</li>
<li>API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄수 있고 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있다.</li>
<li>PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있다.</li>
</ul>
<h3 id="uniform-interface인터페이스-일관성">Uniform Interface(인터페이스 일관성)</h3>
<blockquote>
</blockquote>
<ul>
<li>URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.</li>
<li>HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.</li>
<li>특정 언어나 기술에 종속되지 않는다.</li>
</ul>
<h3 id="self-descriptiveness자체-표현-구조">Self-descriptiveness(자체 표현 구조)</h3>
<blockquote>
</blockquote>
<ul>
<li>REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것이다.</li>
</ul>
<h2 id="rest의-장단점">REST의 장단점</h2>
<h3 id="장점">장점</h3>
<blockquote>
</blockquote>
<ul>
<li>HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구출할 필요가 없다.</li>
<li>HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해준다.</li>
<li>HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다.</li>
<li>Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.</li>
<li>REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.</li>
<li>여러가지 서비스 디자인에서 생길 수 있는 문제를 최소화 한다.</li>
<li>서버와 클라이언트의 역할을 명확하게 분리한다.</li>
</ul>
<h3 id="단점">단점</h3>
<blockquote>
</blockquote>
<ul>
<li>표준이 존재하지 않는다.</li>
<li>사용할 수 있는 메소드가 4가지 밖에 없다. HTTP Method 형태가 제한적이다.</li>
<li>브라우저를 통해 테스트할 일이 않은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 값이 왠지 더 어렵게 느껴진다.</li>
<li>구형 브라우저가 아직 제대로 지원해주지 못하는 부분이 존재한다.</li>
</ul>
<p>Reference
<a href="https://meetup.nhncloud.com/posts/92">Blog</a>
<a href="https://hanamon.kr/rest-api/">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Network]Session이란]]></title>
            <link>https://velog.io/@dex_/NetworkSession%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/NetworkSession%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Fri, 23 Dec 2022 16:28:42 GMT</pubDate>
            <description><![CDATA[<h2 id="session이란">Session이란?</h2>
<blockquote>
<ul>
<li>영구적이고 상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결 상태를 의미하는 보안적인 다이얼로그 및 시간대를 가르킨다.</li>
<li>클라이언트 별로 각각의 상태 정보를 서버에서 저장하는 기술이다.</li>
<li>사용했던 정보들을 서버에 저장하고 서버에 저장하기 때문에 서버에 부하가 발생한다.</li>
</ul>
</blockquote>
<h3 id="세션의-동작-원리">세션의 동작 원리</h3>
<blockquote>
<ol>
<li>사용자가 ID와 Password를 입력하여 로그인 요청을 한다.</li>
<li>클라이언트는 서버에 로그인을 시도한다.</li>
<li>서버는 로그인을 확인하고, Session ID를 생성하여 클라이언트에게 전달해준다.</li>
<li>클라이언트는 세션 쿠키를 저장하고 웹서버의 서비스를 이용한다.</li>
<li>서비스를 이용할 때 변경되는 정보를 서버의 Session ID에 저장해둔다.</li>
<li>클라이언트가 일정 시간 웹서버를 이용하지 않으면 세션은 자동 소멸된다.</li>
</ol>
</blockquote>
<hr>
<p>Reference
<a href="https://fomaios.tistory.com/entry/Network-%EC%84%B8%EC%85%98Session%EC%9D%B4%EB%9E%80-What-is-a-Session">Blog</a>
<a href="https://jeongkyun-it.tistory.com/105">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JWT]JWT란]]></title>
            <link>https://velog.io/@dex_/JWTJWT%EB%9E%80</link>
            <guid>https://velog.io/@dex_/JWTJWT%EB%9E%80</guid>
            <pubDate>Thu, 22 Dec 2022 09:34:07 GMT</pubDate>
            <description><![CDATA[<h3 id="jwtjson-web-token란">JWT(Json Web Token)란?</h3>
<blockquote>
</blockquote>
<ul>
<li>Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다.</li>
<li>일반적으로 클라이언트와 서버 사이에서 통신을 할 때 권한을 위해 사용하는 토큰이다.</li>
<li>토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.</li>
</ul>
<h3 id="jwt-구성-요소">JWT 구성 요소</h3>
<blockquote>
</blockquote>
<ul>
<li>헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나뉘어져있다.</li>
<li>Json 형태이며 각 부분은 Base64Url로 인코딩 되어있다.</li>
<li>각가의 부분을 이어주기 위해 . 구분자를 사용하여 구분한다.</li>
</ul>
<h4 id="헤더header">헤더(header)</h4>
<blockquote>
</blockquote>
<ul>
<li>어떠한 알고리즘으로 암호화 할 것인지, 어떠한 토큰을 사용할 것 인지에 대한 정보가 들어있다.</li>
</ul>
<h4 id="페이로드payload">페이로드(payload)</h4>
<blockquote>
</blockquote>
<ul>
<li>전달하려는 정보가 들어있는데 정보라는 것은 사용자 ID나 다른 데이터들을 말하며, 이것을 클레임이라고 한다.</li>
<li>페이로드에 있는 정보는 수정 및 추가가 가능하다.</li>
<li>노출이 되어있고 수정이 가능한 지점기 때문에 인증이 필요한 최소한의 정보만이 담겨져있다.</li>
</ul>
<h4 id="서명signature">서명(signature)</h4>
<blockquote>
</blockquote>
<ul>
<li>JWT중에 가장 중요한 부분으로 헤더와 페이로드의 값을 BASE64Url로 인코딩한다.</li>
<li>인코딩한 값을 발급해준 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만들어준다.</li>
</ul>
<h3 id="jwt의-동작-원리">JWT의 동작 원리</h3>
<blockquote>
</blockquote>
<ol>
<li>사용자가 ID와 Password를 입력하여 로그인 요청을 한다.</li>
<li>서버는 DB에 회원 정보가 있는 사용자인지 확인한다.</li>
<li>확인이 되면 서버는 로그인 요청 확인 후, secret key를 통해 토큰을 발급한다.</li>
<li>토큰을 클라이언트에게 전달한다.</li>
<li>서비스 요청과 권한을 확인하기 위해서 헤더에 데이터(JWT) 요청을 한다.</li>
<li>데이터를 확인하고 JWT에서 사용자 정보를 확인한다.</li>
<li>클라이언트 요청에 대한 응답과 요청한 데이터를 전달해준다.</li>
</ol>
<p>Reference
<a href="https://mangkyu.tistory.com/56">Blog</a>
<a href="https://velog.io/@hahan/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Database]RDBMS와 NoSQL]]></title>
            <link>https://velog.io/@dex_/DatabaseRDBMS%EC%99%80-NoSQL</link>
            <guid>https://velog.io/@dex_/DatabaseRDBMS%EC%99%80-NoSQL</guid>
            <pubDate>Wed, 21 Dec 2022 12:26:51 GMT</pubDate>
            <description><![CDATA[<h2 id="database란">Database란?</h2>
<blockquote>
</blockquote>
<ul>
<li>사전적인 의미로는 일반적으론 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미한다.</li>
<li>약어로는 DB라고 불리며, DB에 우리가 사용하는 데이터를 저장하지 않는다면 연결이 끊어졌을땐 휘발성으로 인해 데이터는 사라진다.</li>
</ul>
<hr>
<h2 id="dbmsdatabase-management-system란">DBMS(DataBase Management System)란?</h2>
<blockquote>
</blockquote>
<p>사용자와 데이터베이스 사이에서 사용자의 요청에 따라 데이터를 생성 조회 등 데이터베이스를 관리해주는 역할를 한다.</p>
<hr>
<h2 id="rdbmsrelational-database-management-system란">RDBMS(Relational DataBase Management System)란?</h2>
<blockquote>
</blockquote>
<ul>
<li>사전적인 의미로 해석하자면 관계형 데이터베이스 관리 시스템이라고 말할수 있다.</li>
<li>특징으로는 데이터 테이블 간의 정보가 서로 관계성을 가지고 있는것이고, 2차원의 행(row) 렬(column) 로 테이블을 표현하는 데이터 베이스이다.</li>
<li>외래 키(foreign key)를 이용하여 테이블 간의 Join이 가능하다.</li>
</ul>
<h3 id="nosqlnot-only-sql이란">NoSQL(Not Only SQL)이란?</h3>
<blockquote>
</blockquote>
<ul>
<li>관계형 데이터베이스랑은 다르게 테이블 간의 상호관계가 없는 것이 특징이다.</li>
<li>상호관계가 없기 때문에 테이블 간의 Join이 불가능하다.</li>
<li>RDBMS의 같은 경우 관계형 데이터베이스 이기 때문에 복잡성과 용량이 한계가 있는데 이걸 극복하기 위해 등장했다.</li>
</ul>
<h3 id="key-value-db">Key-Value DB</h3>
<blockquote>
</blockquote>
<ul>
<li>데이터가 Key와 Value의 쌍으로 저장된다.</li>
<li>Key는 Value에 접근하기 위한 용도로 사용되며, Value는 이미지나 비디오도 담을수 있으며 어떠한 형태의 데이터도 담을 수 있다.</li>
<li>간단한 구조이기 때문에 속도가 빠른 편이다.
<code>대표적인 NoSQL Key-Value DB로는 Redis, AWS DynamoDB, Riak 등이 있다.</code></li>
</ul>
<h3 id="document-db">Document DB</h3>
<blockquote>
</blockquote>
<ul>
<li>Key-Value에서 확장된 방식으로 Key와 Document로 저장된다.</li>
<li>Document가 계층적인 형태로 저장이 되고 검색에 최적화 되어있다.</li>
<li>저장되는 데이터 타입이 JSON, XML로 저장되고 JSON 타입을 사용하기 때문에 HTTP 기반의 웹서버의 경우 데이터를 편리하게 주고받을수 있다.
<code>대표적인 NoSQL Document DB로는 MongoDB, Couch DB 등이 있다.</code></li>
</ul>
<h3 id="gragh-db">Gragh DB</h3>
<blockquote>
</blockquote>
<ul>
<li>데이터를 Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 저장한다.</li>
<li>객체와 관계를 그래프 형태로 표현한 것으로 관계형모델이라고 할 수 있으며, 데이터 간의 관계가 키일 경우에 적합하다.</li>
<li>SNS, Network Diagrams 등에 사용되고, SNS에서 함께 아는 친구 찾기, 추천 등 연관된 데이터를 추천해주는 엔진이나 패턴 기능에 사용된다. 
<code>대표적인 NoSQL Graph DB로는 Neo4J가 있다.</code></li>
</ul>
<hr>
<h2 id="rdbms-장점단점">RDBMS 장점/단점</h2>
<h3 id="장점">장점</h3>
<blockquote>
<ul>
<li>정해진 스키마에 따라 데이터를 저장해야 하므로 명확한 데이터 구조를 보장받을수 있다.</li>
<li>각 테이블 간의 관계를 정의해야 하므로, 데이터의 중복이 발생하지 않는다.</li>
</ul>
</blockquote>
<h3 id="단점">단점</h3>
<blockquote>
<ul>
<li>테이블 간 관계를 맺고 있어 시스템이 커질 경우 JOIN문이 많은 복잡한 쿼리가 만들어질 수 있습니다.</li>
<li>성능 향상을 위해서는 Scale-up만을 지원하기 때문에 비용이 기하급수적으로 늘어날수 있습니다.</li>
<li>스키마가 정해져 있기 때문에 데이터가 유연하지 못하며, 스키마가 나중에 변경될 경우 번거롭고 어려워 스키마가 자주 바뀌지 않는 서비스에 사용합니다.</li>
</ul>
</blockquote>
<hr>
<h2 id="nosql-장점단점">NoSQL 장점/단점</h2>
<h3 id="장점-1">장점</h3>
<blockquote>
<ul>
<li>RDBMS와는 다르게 스키마가 없기 때문에 유연하고 자유로운 데이터 구조를 가질수있기 때문에 언제든지 자유롭게 데이터를 조정하고 필드를 추가할수 있습니다.</li>
<li>데이터 분산이 용이하며 성능 향상의 방법으로는 Scale-up과 Scale-out 모두 사용 가능하다.</li>
</ul>
</blockquote>
<h3 id="단점-1">단점</h3>
<blockquote>
<ul>
<li>스키마가 없기 때문에 데이터의 일관성이 존재하지 않고 데이터 구조 결정이 어려울수 있습니다.</li>
<li>데이터의 중복이 발생할수 있고 해당 데이터가 변경 될 경우 모든 컬렉션에서 update를 수행해야 합니다.</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://khj93.tistory.com/entry/Database-RDBMS%EC%99%80-NOSQL-%EC%B0%A8%EC%9D%B4%EC%A0%90">Blog</a>
<a href="https://velog.io/@dat0802/RDBMS%EC%99%80-MySQL%EC%9D%98-%EC%B0%A8%EC%9D%B4">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[자료구조]배열과 LinkedList]]></title>
            <link>https://velog.io/@dex_/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EB%B0%B0%EC%97%B4%EA%B3%BC-LinkedList</link>
            <guid>https://velog.io/@dex_/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EB%B0%B0%EC%97%B4%EA%B3%BC-LinkedList</guid>
            <pubDate>Tue, 20 Dec 2022 10:05:26 GMT</pubDate>
            <description><![CDATA[<h2 id="배열이란">배열이란?</h2>
<blockquote>
<ul>
<li>입력된 데이터들이 메모리 공간에서 연속적으로 저장되어 있는 자료구조</li>
<li>메모리상에서 연속적으로 저장되어 있는 특징을 갖기 때문에 index를 통한 접근이 용이</li>
<li>배열의 크기가 고정적이라서 삽입/삭제가 오래 걸리며 배열 중간에 데이터가 삭제 되면 빈 공간이 생김</li>
</ul>
</blockquote>
<hr>
<h2 id="linkedlist란">LinkedList란?</h2>
<blockquote>
<ul>
<li>각 노드가 &#39;데이터&#39;와 &#39;포인터&#39;를 가지고 한 줄로 연결되어 잇는 방식으로 저장하는 자료구조
<code>데이터 : 실제 값이 저장되는 장소</code>
<code>포인터 : 다음 노드의 주소값이 저장되는 장소</code></li>
<li>데이터를 답고 있는 노드들이 연결되어 있고, 노드의 포인터가 이전 노드와 다음 노드와의 연결을 담당</li>
<li>트리(tree)구조의 근간이 되는 자료 구조</li>
<li>메모리를 연속적으로 사용하지 않아 삽입/삭제에 용이</li>
<li>index로 임의 접근이 불가하며 처음부터 탐색</li>
</ul>
</blockquote>
<hr>
<h2 id="정리">정리</h2>
<p>배열은 빠른 접근이 요구되고, 데이터의 삽입과 삭제가 적을때 사용
LinkedList는 삽입과 삭제 많고 검색 빈도가 적을때 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Spring]IoC, DI란]]></title>
            <link>https://velog.io/@dex_/SpringIoC-DI%EB%9E%80</link>
            <guid>https://velog.io/@dex_/SpringIoC-DI%EB%9E%80</guid>
            <pubDate>Sat, 17 Dec 2022 02:47:57 GMT</pubDate>
            <description><![CDATA[<h2 id="iocinversion-of-control란">IoC(Inversion of Control)란?</h2>
<blockquote>
<ul>
<li>IoC란 그대로 번역을 하면 <strong>제어의 역전</strong>이라는 의미이며, 메소드나 객체의 호출 작업을 개발자가 결정하는 것이 아니라, 생성주기를 컨테이너가 관리해주는 것을 말한다.</li>
<li>즉 프로그램의 흐름을 컨테이너가 관리해주는 것이다.</li>
</ul>
</blockquote>
<h3 id="컨테이너란">컨테이너란?</h3>
<blockquote>
<p>컨테이너란 무언가가 담겨있는 넓은 공간을 의미하는데 위에서 말하는 정의는 무언가를 모아놓고 여러 기능을 수행하는 논리적인 공간이란 뜻이다.</p>
</blockquote>
<h3 id="ioc의-장점">IoC의 장점</h3>
<blockquote>
<p>각 객체마다 자기의 역할과 책임을 온전히 다하며 서로 협력하며 변경에 유연한 프로그래밍을 객체지향 프로그래밍이라고 하는데, IoC를 사용하게 되면 변경에 유연한 코드 구조를 가져갈수 있기 때문에 사용하게 됩니다.</p>
</blockquote>
<h2 id="didependency-injection란">DI(Dependency Injection)란?</h2>
<blockquote>
<ul>
<li>의존성 주입이라는 뜻으로, 제어의 역행이 일어날때 스프링이 내부에 있는 객체들간의 관계를 관리할때 사용하는 기법이다.</li>
<li>의존성 주입이라는 말 그대로 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라, 특정 객체에 필요한 객체를 외부에서 결정해서 연결 시키는것을 의미한다.</li>
<li>의존성 주입을 함으로썬 모듈 간의 결합도가 낮아지고 유연성이 높아진다.</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://jobc.tistory.com/30">Blog</a>
<a href="https://velog.io/@seculoper235/1.-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-IoCDI%EB%9E%80">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[JAVA]JVM 구조]]></title>
            <link>https://velog.io/@dex_/JAVAJVM-%EA%B5%AC%EC%A1%B0</link>
            <guid>https://velog.io/@dex_/JAVAJVM-%EA%B5%AC%EC%A1%B0</guid>
            <pubDate>Wed, 14 Dec 2022 19:54:03 GMT</pubDate>
            <description><![CDATA[<h3 id="jvmjava-virtual-machine-이란">JVM(Java Virtual Machine) 이란?</h3>
<blockquote>
</blockquote>
<ul>
<li>자바 컴파일러(javac)에 의해 소스코드(.java)로 부터 변환된 자바 바이트코드(.class)를 해당 OS에 맞게 해석해주는 역할을 수행한다.</li>
<li>자바의 특징이라고 볼수 있는데 <a href="https://velog.io/@dex_/JAVA%EC%9E%90%EB%B0%94%EB%9E%80">JAVA란</a> 여기서 확인 가능하다.</li>
</ul>
<h4 id="jvm의-구조">JVM의 구조</h4>
<blockquote>
</blockquote>
<ul>
<li>JVM의 구조는 크게 네가지의 구성요소로 볼 수 있다.</li>
</ul>
<ol>
<li>Class Loader</li>
<li>Execution Engine</li>
<li>Runtime Data Area</li>
<li>Garbage Collectors(GC)</li>
</ol>
<h4 id="class-loader란">Class Loader란</h4>
<blockquote>
</blockquote>
<ul>
<li>바이트 코드를 실행할 때 class 객체를 메모리 상에 로드하는 요소, 클래스의 인스턴스를 생성하면, Class Loader에 의해 메모리에 로드한다.</li>
</ul>
<h4 id="execution-engine란">Execution Engine란</h4>
<blockquote>
</blockquote>
<ul>
<li>Class Loader에 의해 메모리에 로드된 바이트코드를 실행하는 요소이고 Runtime Data Area에 배치된 바이트 코드는 Execution Engine에 의해 실행이 된다.</li>
</ul>
<h4 id="runtime-data-area란">Runtime Data Area란?</h4>
<blockquote>
</blockquote>
<ul>
<li>JVM의 메모리 영역으로 Method 영역과, Heap 영역은 모든 스레드에서 공유하며, 스택 영역과 네이티브 메서드 스택 영역 등은 스레드 별로 독립적인 메모리 공간을 갖습니다.</li>
<li>Method 영역이란 프로그램 실행 중 클래스가 사용되면 JVM은 해당 글래스 파일을 읽어서 분석하여 클래스의 인스턴스 변수, 메소드 코드 등을 Methode Area에 저장한다. 이때 클래스 변수도 이 영역에 함께 생성된다.</li>
<li>Heap 영역이란 사용자가 관리하는 인스턴스가 생성되는 공간으로 객체를 동적으로 생성하면 인스턴스가 Heap 영역의 메모리에 할당되어 사용되고, Garbage Collectors의 대상이 되는 영역이다.</li>
<li>Stack 영역이란 프로그램 실행 중 발생하는 메서드 호출과 복귀에 대한 정보를 저장한다.</li>
<li>Native Method Stack 영역이란 자바 이외의 C언어와 같은 언어가 필요한 경우 JNI 기술을 통해서 네이티브 메소드들이 바이트 코드로 변환되면서 사용되고 기록되는 영역이다.</li>
</ul>
<h4 id="garbage-collectorsgc란">Garbage Collectors(GC)란?</h4>
<blockquote>
</blockquote>
<ul>
<li>Heap 영역에서 생성된 객체들 중에 더이상 참조하지 않는 메모리를 정리해주는 역할을 한다.</li>
</ul>
<hr>
<p>Reference
<a href="https://willseungh0.tistory.com/93">Blog</a>
<a href="https://velog.io/@litien/JVM-%EA%B5%AC%EC%A1%B0">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Database]트랜잭션(Transaction)이란]]></title>
            <link>https://velog.io/@dex_/Database%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/Database%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Tue, 13 Dec 2022 16:25:07 GMT</pubDate>
            <description><![CDATA[<h2 id="트랜잭션transaction이란">트랜잭션(Transaction)이란?</h2>
<blockquote>
<ul>
<li>데이터베이스의 트랜젝션이란 데이터의 추가, 수정, 삭제 등을 처리하는 여러 단계들을 하나로 묶는 작업을 의미한다.
<code>예로 들자면 은행에서 계좌 이체를 진행을 할때 송신자가 일정 금액을 보내면 송신자 계좌의 금액은 감소 되어야하고 수신자의 계좌에서는 금액이 증가되어야하는데 이 과정이 트랜잭션 단위로 이루어져야한다. 만약 해당 작업을 진행을 하는데 어떠한 단계에서든 문제가 발생이 된다면 위 과정이 모두 취소가 되고 원 상태로 복구 되어야한다.</code></li>
<li>트랜잭션은 성공적으로 처리되어 데이터베이스의 무결성과 일관성을 보장하려면 4가지 특성인 ACID를 만족해야한다.</li>
</ul>
</blockquote>
<h2 id="트랜잭션의-특징acid">트랜잭션의 특징(ACID)</h2>
<h3 id="atomicity원자성">Atomicity(원자성)</h3>
<blockquote>
<ul>
<li>트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는 all-or-nothing 방식을 의미한다.</li>
</ul>
</blockquote>
<h3 id="consistency일관성">Consistency(일관성)</h3>
<blockquote>
<ul>
<li>트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야한다는 것을 의미한다.</li>
<li>데이터베이스가 일관성이 있다는 것은 첫번째로 트랜잭션이 커밋되면 데이터베이스에 적용한 제약조건을 위반하지 않는다는 것을 보장을 의미한다.
<code>예로 들자면 사용자가 번호를 저장하는데 번호를 저장하는 란에 not Null 제약이 있다면 빈칸으로 저장할 수 없어야한다.</code></li>
<li>두번째로는 트랜잭션의 작업이 애플리케이션에서 의도하고자 한 작동이 정상적으로 일어난다는 보장을 의미한다.
<code>예로 들자면 재고가 떨어졌을 때, 더 이상 판매를 할 수 없도록 제한해야 하는것을 의미한다.</code></li>
</ul>
</blockquote>
<h3 id="isolation독립성-격리성-고립성">Isolation(독립성, 격리성, 고립성)</h3>
<blockquote>
<ul>
<li>트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는것을 의미한다.</li>
<li>데이터베이스의 트랜잭션도 성능과 효율성을 위해 병행처리 될수 있는데 흔히 얘기하는 데이터가 꼬이는 것을 방지하기 위해서 독립성과 고립성을 보장한다는것이다.
<code>예로 들자면 A은행 직원이 계좌에서 돈을 빼는 도중에 B은행 직원이 동일한 계좌에서 작업을 할수 없는것을 의미한다.</code></li>
</ul>
</blockquote>
<h3 id="durability지속성">Durability(지속성)</h3>
<blockquote>
<ul>
<li>트랜잭션이 성공적으로 진행이 됐을때 영원히 반영되어야하는것을 의미한다.</li>
<li>시스템 문제가 발생하거나, 데이터베이스의 일치 작업을 수행 하더라도 데이터베이스의 내용은 기존과 같이 유지되는것을 말한다.</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://jaeseongdev.github.io/development/2021/06/16/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-%ED%8A%B9%EC%A7%95-(ACID)/">Blog</a>
<a href="https://www.stevenjlee.net/2020/06/26/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EC%86%8D%EC%84%B1-acid-%EA%B7%B8/">Blog</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[디자인패턴]MVC 패턴이란]]></title>
            <link>https://velog.io/@dex_/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4MVC-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80</link>
            <guid>https://velog.io/@dex_/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4MVC-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80</guid>
            <pubDate>Mon, 12 Dec 2022 16:04:31 GMT</pubDate>
            <description><![CDATA[<h2 id="mvc-패턴이란">MVC 패턴이란?</h2>
<blockquote>
<ul>
<li>모델-뷰-컨트롤러(Model-View-Controller,MVC) 구조로 이루어져 있는 소프트웨어 디자인 패턴이다.</li>
<li>MVC 패턴을 사용한다면 사용자 인터페이스로부터 비지니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비지니스 로직을 서로 영향 없이 쉽게 고칠수 있는 애플리케이션을 만들수있다.</li>
<li>모델은 애플리케이션의 정보(데이터)를 나타낸다.</li>
<li>뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타낸다.</li>
<li>컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.</li>
</ul>
</blockquote>
<h2 id="model모델">Model(모델)</h2>
<blockquote>
<ul>
<li>모델은 데이터와 애플리케이션이 무엇을 할 것인지를 정의하는 부분으로 내부 비지니스 로직을 처리하기 위한 역할을 한다.</li>
<li>모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 한다.</li>
<li>DB와 연동 되기 때문에 데이터 추출, 저장, 삭제, 업데이트 같은 역할도 한다.</li>
</ul>
</blockquote>
<h3 id="모델의-규칙">모델의 규칙</h3>
<blockquote>
<ol>
<li>사용자가 편집하기를 원하는 모든 데이터를 가지고 있어야 한다.</li>
<li>View나 Controller에 대해서 어떤 정보도 알지 말아야 한다.</li>
<li>변경이 일어나면, 변경 통지에 대한 처리 방법을 구현해야만 한다.</li>
</ol>
</blockquote>
<h2 id="veiw뷰">Veiw(뷰)</h2>
<blockquote>
<ul>
<li>뷰는 사용자에게 보여주는 UI(화면)을 말한다.</li>
<li>사용자와 상호작용을 하며 Controller에서 받은 모델의 결과값을 화면으로 출력하는 일을 한다.</li>
<li>MVC에서는 여러개의 뷰가 존재할 수 있다.</li>
<li>모델에서 받은 데이터는 별도로 저장하지 않습니다.</li>
</ul>
</blockquote>
<h3 id="뷰의-규칙">뷰의 규칙</h3>
<blockquote>
<ol>
<li>Model이 가지고 있는 정보를 따로 저장해서는 안됩니다.</li>
<li>Model이나 Controller와 같이 다른 구성 요소들을 몰라야 합니다.</li>
<li>변경이 일어나면 변경 통지에 대한 처리방법을 구현해야만 합니다.</li>
</ol>
</blockquote>
<h2 id="controller컨트롤러">Controller(컨트롤러)</h2>
<blockquote>
<ul>
<li>컨트롤러는 모델과 뷰 사이를 이어주는 인터페이스 역할을 한다.</li>
<li>모델이 데이터를 어떻게 처리할지 알려주는 역할을 한다.</li>
<li>사용자로부터 뷰에 요청을 받아 해당 업무를 수행하는 모델을 호출하고 모델이 업무를 모두 수행하면 다시 결과를 뷰에게 전달합니다.</li>
</ul>
</blockquote>
<h3 id="컨트롤러의-규칙">컨트롤러의 규칙</h3>
<blockquote>
<ol>
<li>Model이나 View에 대해서 알고 있어야 합니다.</li>
<li>Model이나 View의 변경을 모니터링 해야 합니다.</li>
</ol>
</blockquote>
<h2 id="mvc-패턴을-사용하는-이유">MVC 패턴을 사용하는 이유?</h2>
<blockquote>
<ul>
<li>각자의 맡은바에만 집중할수 있게 코드를 기능별로 분리하여 가독성과 코드 재사용이 증가한다.</li>
<li>기능별로 코드를 분리하였기때문에 개발 후에 유지보수성, 확장성, 유연성이 증가되어 모든 상황에 대해서 대처가 가능하다.</li>
</ul>
</blockquote>
<hr>
<p>Reference
<a href="https://velog.io/@seongwon97/MVC-%ED%8C%A8%ED%84%B4%EC%9D%B4%EB%9E%80">Blog</a>
<a href="https://m.blog.naver.com/jhc9639/220967034588">Blog</a></p>
]]></description>
        </item>
    </channel>
</rss>