<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Harold Lippin's blog]]></title><description><![CDATA[Hackers studying blockchain]]></description><link>https://haroldrippin.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 14:42:53 GMT</lastBuildDate><atom:link href="https://haroldrippin.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[[알고리즘] 탐색 알고리즘 - Dfs / Bfs]]></title><description><![CDATA[탐색이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 DFS와 BFS를 꼽을 수 있다.
깊이 우선 탐색(DFS, Depth - First Search)

DFS는 Depth - First Search, 깊이 우선 탐색이라고도 부르며, 그래프와 트리의 깊은 부분을 우선적으로 탐색하는 알고리즘이다.
그림에서와 같이 갈...]]></description><link>https://haroldrippin.hashnode.dev/dfs-bfs</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/dfs-bfs</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Thu, 15 May 2025 14:03:49 GMT</pubDate><content:encoded><![CDATA[<p><strong>탐색</strong>이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정을 의미한다. 프로그래밍에서는 그래프, 트리 등의 자료구조 안에서 탐색을 하는 문제를 자주 다룬다. 대표적인 탐색 알고리즘으로 <strong>DFS와</strong> <strong>BFS</strong>를 꼽을 수 있다.</p>
<h4 id="heading-dfs-depth-first-search"><strong>깊이 우선 탐색(DFS, Depth - First Search)</strong></h4>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1762686828725/a0f7a58e-e8ac-4409-90f1-347f070c9334.gif" alt class="image--center mx-auto" /></p>
<p>DFS는 Depth - First Search, 깊이 우선 탐색이라고도 부르며, 그래프와 트리의 깊은 부분을 우선적으로 탐색하는 알고리즘이다.</p>
<p>그림에서와 같이 갈 수 있는 한 끝까지 탐색해 리프 노드를 방문하고, 이전 갈림길로 돌아와 선택하지 않았던 노드를 방문하는 식으로 탐색한다. DFS는 스택(Stack) 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다.</p>
<ul>
<li><p>탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.</p>
</li>
<li><p>스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 그리고 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.</p>
</li>
<li><p>두 번째 과정을 더 이상 수행할 수 없을 때까지 반복한다.</p>
</li>
</ul>
<p><strong>※ DFS의 구현</strong></p>
<p>DFS는 스택 자료구조에 기초한다는 점에서 구현이 간단하다.</p>
<p>실제로는 스택을 쓰지 않고 재귀 함수를 이용하여 매우 간결하게 구현할 수 있으며 탐색을 수행함에 있어 O(N)의 시간이 소요된다.</p>
<p><a target="_blank" href="https://sunho-doing.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%83%89-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-DFS-BFS">https://sunho-doing.tistory.com/entry/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%83%89-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-DFS-BFS</a></p>
<p><a target="_blank" href="https://velog.io/@ngngs/%ED%95%9C-%EC%9E%A5%EC%9C%BC%EB%A1%9C-%EB%B3%B4%EB%8A%94-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98">위상정렬</a></p>
]]></content:encoded></item><item><title><![CDATA[Registry - Security 분석 방법]]></title><description><![CDATA[https://live.sysinternals.com/ A. 상단 경로에서 psexec.exe 설치

CMD

psexec -sid cmd.exe A. 관리자 권한 실행 확인  
 



같은 cmd Console를 통해서 regedit 실행


 일반 Regedit 접근으로 확인할 수 없었던 내용을 확인 가능


 
reference
https://4sysops.com/archives/how-to-access-the-sam-and-securi...]]></description><link>https://haroldrippin.hashnode.dev/registry-security</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/registry-security</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Tue, 25 Mar 2025 16:33:44 GMT</pubDate><content:encoded><![CDATA[<ol>
<li><p><a target="_blank" href="https://live.sysinternals.com/">https://live.sysinternals.com/</a><br /> A. 상단 경로에서 psexec.exe 설치</p>
</li>
<li><p>CMD</p>
</li>
<li><p>psexec -sid cmd.exe<br /> A. 관리자 권한 실행 확인  </p>
<p> <img src="https://velog.velcdn.com/images/hskang00/post/77292c79-c95d-493e-adb7-87a0c9f6cf93/image.png" alt /></p>
</li>
</ol>
<ol start="4">
<li><p>같은 cmd Console를 통해서 regedit 실행</p>
</li>
<li><p><img src="https://velog.velcdn.com/images/hskang00/post/97d12fe2-5f2a-49e9-9acb-34556d0a6ccf/image.png" alt /></p>
<p> 일반 Regedit 접근으로 확인할 수 없었던 내용을 확인 가능</p>
</li>
</ol>
<h1 id="heading-ia"> </h1>
<p>reference</p>
<p><a target="_blank" href="https://4sysops.com/archives/how-to-access-the-sam-and-security-hives-in-the-registry-using-the-system-account/">https://4sysops.com/archives/how-to-access-the-sam-and-security-hives-in-the-registry-using-the-system-account/</a></p>
]]></content:encoded></item><item><title><![CDATA[[정보처리기사] 필기 요약]]></title><description><![CDATA[https://velog.io/@stringbuckwheat/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%ED%95%84%EA%B8%B0-4%EA%B3%BC%EB%AA%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4-%ED%99%9C%EC%9A%A9
1. 요구사항 확인
1) 소프트웨어 생명 주기
운용/유지보수 등의 과...]]></description><link>https://haroldrippin.hashnode.dev/wygleuztoyymoumroq4soycrf0g7zwe6riwioyaloyvvq</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/wygleuztoyymoumroq4soycrf0g7zwe6riwioyaloyvvq</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sun, 09 Mar 2025 02:02:20 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://velog.io/@stringbuckwheat/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%ED%95%84%EA%B8%B0-4%EA%B3%BC%EB%AA%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4-%ED%99%9C%EC%9A%A9">https://velog.io/@stringbuckwheat/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EC%82%AC-%ED%95%84%EA%B8%B0-4%EA%B3%BC%EB%AA%A9-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%96%B8%EC%96%B4-%ED%99%9C%EC%9A%A9</a></p>
<h1 id="heading-1">1. 요구사항 확인</h1>
<h2 id="heading-1-1">1) 소프트웨어 생명 주기</h2>
<p><strong>운용/유지보수 등의 과정을 각 단계별로 나눈 것</strong></p>
<ul>
<li><p>소프트웨어 <strong>개발</strong> 단계, 각 단계별 <strong>주요 활동</strong>, <strong>산출물</strong>로 표현</p>
</li>
<li><p>소프트웨어 생명 주기 모형: 소프트웨어 생명 주기를 표현하는 형태</p>
<ul>
<li>aka 소프트웨어 프로세스 모형, 소프트웨어 공학 패러다임</li>
</ul>
</li>
</ul>
<h2 id="heading-2">2) 소프트웨어 공학</h2>
<p>소프트웨어 위기 극복 방안으로 연구된 학문</p>
<h3 id="heading-xc0g6riw67o4ioybkoy5mq">- 기본 원칙</h3>
<ul>
<li><p>현대적 기술</p>
</li>
<li><p>지속적 검증</p>
</li>
<li><p>기록 유지</p>
</li>
</ul>
<h2 id="heading-3">3) 폭포수 모형</h2>
<ul>
<li><p><strong>회귀X</strong>, 선형순차적</p>
</li>
<li><p>고전적 생명주기 모형 → 경험, 성공사례 많음</p>
</li>
<li><p>각 단계 끝에 산출물</p>
</li>
<li><p>타당성 검토 → 계획 → 요구 분석 → 설계 → 구현(코딩) → 시험(검사) → 유지보수</p>
</li>
</ul>
<h2 id="heading-4">4) 나선형 모형</h2>
<ul>
<li><p>보헴</p>
</li>
<li><p><strong>폭포수, 프로토타입의 장점 + 위험 분석 기능</strong></p>
</li>
<li><p>나선을 따라 돌듯 여러번의 SW 개발과정 <strong>반복</strong></p>
</li>
<li><p>계획 → 위험 분석 → 개발/검증 → 고객평가 (→ 계획 ...)</p>
</li>
</ul>
<h2 id="heading-5">5) 애자일 모형</h2>
<p>민첩한, 기민한</p>
<ul>
<li><p><strong>요구사항 변동</strong>에 대응하기 쉽도록 일정 주기 <strong>반복</strong></p>
</li>
<li><p><strong>고객 소통</strong>에 초점, 기업활동 전반적 사용</p>
</li>
<li><p>ex) <strong>스크럼</strong>, <strong>XP</strong>, 칸반, Lean, 크리스탈, ASD, 기능 중심 개발(FDD)</p>
</li>
</ul>
<h3 id="heading-4-1">- 4가지 핵심 가치</h3>
<blockquote>
<p>상호작용, 실행되는 SW, 고객 협업, 변화</p>
</blockquote>
<ul>
<li><p>프로세스, 도구 &lt; 개인과 상호작용</p>
</li>
<li><p>문서 &lt; 실행되는 SW</p>
</li>
<li><p>계약, 협상 &lt; 고객과 협업</p>
</li>
<li><p>계획 &lt; 변화</p>
</li>
</ul>
<h3 id="heading-xc0g7iqk7ygs658">- 스크럼</h3>
<ul>
<li><p><strong>팀 중심</strong>으로 개발 효율↑</p>
</li>
<li><p>self-organizing, cross-functional</p>
</li>
</ul>
<h4 id="heading-gt">&gt; 스크럼 팀 구성</h4>
<ul>
<li><p><strong>제품 책임자(PO, Project Owner)</strong></p>
<ul>
<li><p>이해 관계자 중 제품 이해도 높고 의사 결정할 사람 → 주로 개발 의뢰자, 사용자</p>
</li>
<li><p>요구사항 작성 주체</p>
</li>
<li><p>테스트 수행 → 요구사항 우선순위 갱신</p>
</li>
</ul>
</li>
<li><p><strong>스크럼 마스터(SM)</strong></p>
<ul>
<li><p>스크럼 팀 조언, 가이드(통제X)</p>
</li>
<li><p>일일 스크럼 회의 주관 → 진행사항 점검, 장애요소 처리</p>
</li>
</ul>
</li>
<li><p><strong>개발팀(DT)</strong></p>
<ul>
<li><p>위에 두 명 빼고 다. 개발자 + 디자이너 + 테스터</p>
</li>
<li><p>최대 7~8명</p>
</li>
</ul>
</li>
</ul>
<h4 id="heading-gt-1">&gt; 스크럼 개발 프로세스</h4>
<ul>
<li><p><strong>제품 백로그</strong>(Product Backlog)</p>
<ul>
<li>요구사항(User Story) 우선순위에 따라 나열</li>
</ul>
</li>
<li><p><strong>스프린트 계획 회의</strong></p>
<ul>
<li>백로그 중 이번 스프린트 작업 대상 단기 계획</li>
</ul>
</li>
<li><p><strong>스프린트</strong></p>
<ul>
<li>실제 개발(2~4주), 백로그 테스트 대상으로 속도 추정, 담당자 할당</li>
</ul>
</li>
<li><p><strong>일일 스크럼 회의</strong></p>
<ul>
<li>15분간 진행상황 점검, 서서 진행, 남은 작업 시간은 소멸차트에(Burn-down Chart)</li>
</ul>
</li>
<li><p><strong>스프린트 검토 회의</strong></p>
<ul>
<li>사용자가 포함된 참석자 앞에서 테스트</li>
</ul>
</li>
<li><p><strong>스프린트 회고</strong></p>
</li>
</ul>
<h3 id="heading-xp">- XP</h3>
<p>eXtreme Programming</p>
<ul>
<li><p>요구사항에 대한 유연한 대처를 위해 <strong>고객 참여, 개발 과정 반복 극대화</strong></p>
</li>
<li><p>목적: 짧고 반복적인 개발 주기, 단순한 설계, 고객의 적극적 참여 → 빠른 개발</p>
</li>
<li><p><strong>릴리즈 기간 짧게 반복</strong> → 요구사항 반영 가시성</p>
</li>
<li><p>핵심 가치: 1) 의사소통 2) 단순성 3) 용기 4) 존중 5) 피드백</p>
</li>
</ul>
<h4 id="heading-gt-2">&gt; 주요 실천 방법</h4>
<ul>
<li><p>짝 프로그래밍</p>
</li>
<li><p>공동 코드 소유(Collective Ownership)</p>
</li>
<li><p>TDD: 테스트 우선 작성, 테스트 자동화 도구</p>
</li>
<li><p>전체 팀: 구성원(고객 포함) 모두 역할, 책임 가짐</p>
</li>
<li><p>CI: 모듈 개발 → 지속적 통합</p>
</li>
<li><p>Design Improving/Refactoring</p>
</li>
<li><p>Small Release</p>
</li>
</ul>
<h2 id="heading-6">6) 현행 시스템 파악</h2>
<h3 id="heading-1-2">- 1단계: 시스템</h3>
<ul>
<li><p>시스템 <strong>구성</strong> 파악: 기간 업무(주요 업무), 지원 업무 구분</p>
</li>
<li><p>시스템 <strong>기능</strong> 파악: 주요, 하부, 세부 기능으로 계층화</p>
</li>
<li><p>시스템 <strong>인터페이스</strong> 파악: 단위 업무 시스템 간 데이터 종류/형식/프로토콜/연계유형/주기</p>
</li>
</ul>
<h3 id="heading-2-sw">- 2단계: SW</h3>
<ul>
<li><p><strong>아키텍처</strong> 구성 파악: 최상위 수준에서 계층별로 아키텍처 구성도 작성</p>
</li>
<li><p><strong>소프트웨어</strong> 구성 파악: 제품명, 용도, 라이센스 등</p>
</li>
</ul>
<h3 id="heading-3-hw">- 3단계: HW</h3>
<ul>
<li><p><strong>하드웨어</strong> 구성 파악: 서버 사양, 수, 이중화 여부</p>
</li>
<li><p><strong>네트워크</strong> 구성 파악: 네트워크 구성도(서버 위치, 연결 등)</p>
</li>
</ul>
<h2 id="heading-7-os">7) 운영체제(OS)</h2>
<ul>
<li><p>컴퓨터 시스템 자원 관리, 유저의 효율적/편리한 사용 환경 제공 SW</p>
</li>
<li><p>사용자 - 하드웨어 간 인터페이스로 동작하는 시스템 SW → 다른 응용프로그램 환경 제공</p>
</li>
<li><p>OS관련 요구사항 식별 시 고려사항: 1) 가용성 2) 성능 3) 기술지원 4) 주변 기기 5) 구축 비용</p>
</li>
</ul>
<h2 id="heading-8-dbms">8) 데이터베이스 관리시스템(DBMS)</h2>
<ul>
<li><p>사용자-DB 간(유저 요구에 따라) 정보 생성, DB 관리 SW</p>
</li>
<li><p>기존 파일 시스템이 갖는 데이터 종속성/중복성 문제 해결 → 모든 응용 프로그램이 DB 공용</p>
</li>
<li><p>DB 구성, 접근 방법, 유지관리 책임짐</p>
</li>
<li><p>DB 요구사항 식별 시 고려사항: 1) 가용성 2) 성능 3) 기술 지원 4) 상호호환성 5) 구축 비용</p>
</li>
</ul>
<h2 id="heading-9-was">9) 웹 애플리케이션 서버(WAS)</h2>
<ul>
<li><p><strong>동적인 콘텐츠</strong> 처리를 위해 사용되는 미들웨어 cf) WS</p>
</li>
<li><p>데이터 접근, 세션 관리, 트랜잭션 관리 라이브러리 제공</p>
</li>
<li><p>주로 DB와 연동해서 사용</p>
</li>
<li><p>톰캣, GlassFish, JBoss, Jetty, JEUS, Resin, WebLogic, WebSphere ...</p>
</li>
</ul>
<h2 id="heading-10">10) 요구사항</h2>
<h3 id="heading-xc0g7jqu6rws7iks7zwtioygleydma">- 요구사항 정의</h3>
<p>서비스 설명, 정상 운영을 위한 제약 조건</p>
<h3 id="heading-gt-3">\&gt; 기능 요구사항</h3>
<ul>
<li><p>입출력 무엇 포함, 시스템이 무엇을 저장하고 연산을 수행할지</p>
</li>
<li><p>시스템이 반드시 수행해야 하는 기능, 사용자가 원하는 기능</p>
</li>
</ul>
<h3 id="heading-gt-4">\&gt; 비기능 요구사항</h3>
<ul>
<li><p>시스템 장비 구성: HW, SW, 네트워크 등</p>
</li>
<li><p>성능: 처리 속도, 시간, 양, 동/정적 사용량, 가용성</p>
</li>
<li><p>인터페이스: 시스템/사용자 인터페이스 요구사항</p>
<ul>
<li>정보 교환 시 사용되는 프로토콜과의 연계도 포함하여 기술</li>
</ul>
</li>
<li><p>데이터: 초기 자료, 변환, 보안 등</p>
</li>
<li><p>테스트: 장비 성능, 정상적 운영 여부</p>
</li>
<li><p>보안</p>
</li>
<li><p>품질</p>
</li>
<li><p>제약 사항: 기술, 표준, 업무, 법/제도</p>
</li>
<li><p>프로젝트 관리: 수행 관리 방법</p>
</li>
<li><p>프로젝트 지원: 수행 지원</p>
</li>
</ul>
<h3 id="heading-xc0g7jqu6rws7iks7zwtioqwnouwncdtlitrozzshljsiqq">- 요구사항 개발 프로세스</h3>
<p>도출(Eliciation) → 분석(analysis) → 명세(specification) → 확인(validation)</p>
<ul>
<li><p>도출: 요구사항 수집(인터뷰, 설문, 브레인스토밍, 프로토타이핑, 유스케이스...)</p>
</li>
<li><p>분석: 모호한 부분 필터링 → 자료흐름도(DFD), 자료사전(DD)</p>
</li>
<li><p>명세: 문서화</p>
</li>
<li><p>확인(검증)</p>
</li>
</ul>
<h3 id="heading-xc0g7jqu6rws7iks7zwtiouqheyeucdquldrspu">- 요구사항 명세 기법</h3>
<h4 id="heading-gt-5">\&gt; 정형 명세 기법</h4>
<ul>
<li><p>수학적 기호, 정형화된 표기법</p>
</li>
<li><p>특징: 간결한 표현, 작성자 독립적 결과(완전성 검증 가능), 표기법 어려움</p>
</li>
<li><p>VDM, Z, Petri-net, CSP</p>
</li>
</ul>
<h4 id="heading-gt-6">\&gt; 비정형 명세 기법</h4>
<ul>
<li><p>상태, 기능, 객체 중심 → 자연어, 다이어그램 작성</p>
</li>
<li><p>특징: 자연어라 일관성↓, 의사소통 용이</p>
</li>
<li><p>FSM, Decision Table, ER 모델링, State Chart(SADT)</p>
</li>
</ul>
<h3 id="heading-xc0g7jqu6rws7iks7zwtiou2hoyenq">- 요구사항 분석</h3>
<ul>
<li><p>유저 요구사항 이해, 타당성 조사 → 비용, 일정 제약</p>
</li>
<li><p>목표, 해결방법 결정</p>
</li>
<li><p>도구: <strong>UML(Unified Modeling Language)</strong>, <strong>자료흐름도(DFD)</strong>, <strong>자료 사전(DD)</strong>, 소단위 명세서, ERD(개체 관계도), 상태 전이도(STD), 제어 명세서</p>
</li>
</ul>
<h4 id="heading-gt-data-flow-diagram">\&gt; 자료 흐름도(Data Flow Diagram)</h4>
<p>자료 흐름, 변환, 기능을 도형으로 기술<br />aka 자료 흐름 그래프, 버블 차트</p>
<p>기본 기호</p>
<ul>
<li><p>프로세스(process): 자료 변환 시스템의 한 부분 (처리, 기능, 변환, 버블)</p>
</li>
<li><p>자료 흐름(data flow): 자료 이동, 연관관계</p>
</li>
<li><p>자료 저장소(data store): 파일, DD 등</p>
</li>
<li><p>단말(terminator): 시스템과 교신하는 외부 개체</p>
</li>
</ul>
<h4 id="heading-gt-7">\&gt; 자료 사전</h4>
<p>자료 흐름도에 있는 자료를 더 정확히 정의 (=메타 데이터)</p>
<ul>
<li><p>\=: 정의</p>
</li>
<li><p>+: and</p>
</li>
<li><p>(): 생략</p>
</li>
<li><p><code>[|]</code>: 선택(or)</p>
</li>
<li><p>{}: 반복</p>
</li>
<li><p>**: 주석</p>
</li>
</ul>
<h2 id="heading-11-case">11) 요구사항 분석을 위한 CASE(자동화 도구)</h2>
<ul>
<li><p>SADT</p>
<ul>
<li><p>Structured Analysis &amp; Design Technique</p>
</li>
<li><p>SoftTech사, 시스템 정의/요구사항 분석, 설계, popular</p>
</li>
</ul>
</li>
<li><p>SREM</p>
<ul>
<li><p>Software Requirement Engineering Methodology</p>
</li>
<li><p>RSL/REVS 사용</p>
<ul>
<li><p>RSL: 요구사항 기술 언어</p>
</li>
<li><p>REUS: RSL 분석해서 명세서 만듦</p>
</li>
</ul>
</li>
<li><p>TRW사, 우주국방 시스템 그룹 요구사항 목적으로 개발</p>
</li>
</ul>
</li>
<li><p>PSL/PSA: 미시간 대학</p>
</li>
<li><p>TAGS: 개발주기 전과정에서 이용 가능한 통합 자동화 도구</p>
</li>
</ul>
<h2 id="heading-12-hipo">12) HIPO</h2>
<p>Hierarchy Input Process Output</p>
<p>시스템 분석/설계/문서화에 사용되는 기법<br />시스템 실행 과정인 입력-처리-출력 기능을 나타냄</p>
<h3 id="heading-xc0g7yq57kev">- 특징</h3>
<ul>
<li><p>기본 시스템 모델: 입력-처리-출력</p>
</li>
<li><p>하향식 소프트웨어 개발 문서화 도구</p>
</li>
<li><p>체계적 문서관리 가능</p>
</li>
<li><p>기호, 도표 사용 → 가독성, 이해↑</p>
</li>
<li><p>기능/자료 의존 단계 동시에 표현</p>
</li>
<li><p>변경, 유지보수 용이</p>
</li>
</ul>
<h3 id="heading-hipo-chart">- HIPO Chart</h3>
<p>시스템을 여러개 모듈로 분할 → 이들간의 인터페이스를 계층 구조로 표현</p>
<h4 id="heading-gt-8">\&gt; 종류</h4>
<ul>
<li><p>가시적 도표(도식 목차): 시스템 전체 기능, 흐름을 Tree 구조로</p>
</li>
<li><p>총체적 도표(총괄 도표, 개요 도포): 프로그램 구성 기능 (입-처-출 overall)</p>
</li>
<li><p>세부적 도표(상세 도포): detail</p>
</li>
</ul>
<h2 id="heading-13-uml">13) UML</h2>
<p>Unified Modeling Language<br />시스템 개발 과정의 의사소통을 위해 만든, 대표적인 객체지향 모델링 언어</p>
<ul>
<li><p>Rumbaugh(OMT), Booch, Jacobson의 객체지향 방법론의 장점 통합</p>
</li>
<li><p>OMG(객체 기술에 관한 국제 표준화 기구)에서 표준으로 지정</p>
</li>
<li><p>6개의 구조 다이어그램과 7개의 행위 다이어그램</p>
</li>
<li><p>각 다이어그램은 사물간 관계를 용도에 맞게 표현</p>
</li>
<li><p>구성요소: 사물(things), <strong>관계, 다이어그램</strong></p>
</li>
</ul>
<h3 id="heading-relationship">- 관계(Relationship)</h3>
<ul>
<li><p><strong>연관(Association)</strong></p>
</li>
<li><p><strong>집합(Aggregation)</strong>: 2개 이상의 사물이 서로 <strong>포함</strong></p>
</li>
<li><p><strong>포함(Composition)</strong>: 특수한 집합, 포함하는 사물의 변화가 포함되는 사물에게 <strong>영향</strong></p>
</li>
<li><p><strong>일반화(Generalization)</strong>: A가 B보다 더 <strong>일반적</strong>인지, <strong>구체적</strong>인지</p>
</li>
<li><p><strong>의존(Dependency)</strong>: <strong>필요한 만큼만</strong> 연관 유지(오퍼레이션 매개변수)</p>
</li>
<li><p><strong>실체화(Realization)</strong>: 행위, 인터페이스로 서로 <strong>그룹화</strong> 할 수 있는 관계</p>
</li>
</ul>
<h3 id="heading-diagram">- 다이어그램(Diagram)</h3>
<h4 id="heading-gt-9">\&gt; 개념</h4>
<p>사물과 관계를 도형으로 표현</p>
<ul>
<li><p>시스템을 가시화한 뷰 제공 → 의사소통</p>
</li>
<li><p>정적 모델링 = 구조적 다이어그램</p>
</li>
<li><p>동적 모델링 = 행위 다이어그램</p>
</li>
</ul>
<h4 id="heading-gt-10">\&gt; 구조적 다이어그램</h4>
<ul>
<li><p><strong>클래스</strong> 다이어그램: 클래스 간 관계, 시스템 구조 파악, 문제점 도출 가능</p>
</li>
<li><p><strong>객체</strong> 다이어그램: 인스턴스, 럼바우 객체모델링에서 사용</p>
</li>
<li><p><strong>컴포넌트</strong> 다이어그램: 컴포넌트간 관계/인터페이스, 구현단계에서 사용</p>
</li>
<li><p><strong>배치</strong> 다이어그램: Deployment, 노드와 의사소통 경로, 물리적 요소의 위치</p>
</li>
<li><p><strong>복합체</strong> 구조 다이어그램: 클래스, 컴포넌트가 복합 구조를 갖는 경우 그 내부</p>
</li>
<li><p><strong>패키지</strong> 다이어그램: 유스케이스, 클래스 등 모델 요소를 그룹화한 패키지 관계</p>
</li>
</ul>
<h4 id="heading-gt-11">\&gt; 행위 다이어그램</h4>
<ul>
<li><p><strong>유스케이스</strong> 다이어그램: 유저 요구 분석, 사용자/사용 사례로 구성, 사례간 관계로 이루어짐</p>
</li>
<li><p><strong>순차</strong> 다이어그램: 상호작용하는 시스템/객체간 주고받는 메시지</p>
</li>
<li><p><strong>커뮤니케이션</strong> 다이어그램: 메시지 + 객체 간 연관</p>
</li>
<li><p><strong>상태</strong> 다이어그램: 한 객체가 상호작용에 따라 어떻게 변화하는지 (럼바우 객체지향 분석기법의 동적 모델링)</p>
</li>
<li><p><strong>활동</strong> 다이어그램: 로직 처리 흐름</p>
</li>
<li><p><strong>상호작용 개요</strong> 다이어그램: 상호작용 다이어그램 간 제어흐름</p>
</li>
<li><p><strong>타이밍</strong> 다이어그램: 상태변화와 시간 제약을 표현</p>
</li>
</ul>
<h4 id="heading-gt-12">\&gt; 유스케이스 다이어그램 (행위)</h4>
<p>사용자 관점에서 사용자가 할 수 있는 것 표현</p>
<p><strong>구성요소</strong></p>
<ul>
<li><p><strong>시스템, 시스템 범위</strong>: 시스템 내부의 유스케이스를 사각형으로 묶어 외부 시스템과 구분</p>
</li>
<li><p><strong>액터</strong>: 시스템과 상호작용하는 대상들</p>
<ul>
<li><p>주 액터: 이득을 얻는 대상 ex) 사람</p>
</li>
<li><p>부 액터: 주액터의 목적 달성을 위해 서비스를 제공하는 외부 시스템 ex) 조직, 기관</p>
</li>
</ul>
</li>
<li><p><strong>유스케이스</strong>: 제공 기능</p>
</li>
<li><p><strong>관계</strong>: 액-유, 유-유 사이에서 나타남 → 연관, 포함, 확장, 일반화</p>
</li>
</ul>
<h4 id="heading-gt-13">\&gt; 클래스 다이어그램(구조적)</h4>
<p>클래스, 속성과 오퍼레이션, 제약조건, 클래스간 관계 표현</p>
<p><strong>구성요소</strong></p>
<ul>
<li><p>클래스: 이름, 속성, 오퍼레이션 표기</p>
</li>
<li><p>제약조건</p>
</li>
<li><p>관계: 연관, 집합, 포함, 일반화, 의존</p>
</li>
</ul>
<h4 id="heading-gt-14">\&gt; 순차 다이어그램 (행위)</h4>
<p>시스템-객체가 메시지를 주고받으며 상호작용하는 과정을 그림으로</p>
<p><strong>구성요소</strong></p>
<ul>
<li><p>액터</p>
</li>
<li><p>객체: 메시지 주고받는 주체</p>
</li>
<li><p>생명선(lifeline): 객체가 메모리에 존재하는 구간(점선)</p>
</li>
<li><p>실행상자(active box): 객체가 메시지를 주고받으며 구동중</p>
</li>
<li><p>메시지</p>
</li>
</ul>
<h4 id="heading-gt-15">\&gt; 스테레오타입</h4>
<p>UML 기본 기능 외 추가 기능 표현<br />&lt;&lt; &gt;&gt; → 길러멧</p>
<ul>
<li><p><code>&lt;&lt;include&gt;&gt;</code>: 포함</p>
</li>
<li><p><code>&lt;&lt;extend&gt;&gt;</code>: 확장</p>
</li>
<li><p><code>&lt;&lt;interface&gt;&gt;</code></p>
</li>
<li><p><code>&lt;&lt;exception&gt;&gt;</code></p>
</li>
<li><p><code>&lt;&lt;constructor&gt;&gt;</code></p>
</li>
</ul>
<h1 id="heading-2-1">2. 화면 설계</h1>
<h2 id="heading-1-3">1) 사용자 인터페이스의 특징</h2>
<ul>
<li><p>사용자 만족도에 가장 큰 영향 → 변경 잦음</p>
</li>
<li><p>유저 편리성, 가독성 높여서 작업시간 단축, 업무 이해도 ↑</p>
</li>
<li><p>최소 노력으로 결과 내게끔</p>
</li>
<li><p>사용자 중심 설계, 상호작용</p>
</li>
<li><p>수행결과 오류 줄이기</p>
</li>
<li><p>정보제공자, 공급자간 매개 역할</p>
</li>
<li><p>설계 시 소프트웨어 아키텍처 숙지 필요</p>
</li>
</ul>
<h2 id="heading-2-ui">2) UI 구분</h2>
<ul>
<li><p>CLI(Command Line Interface): 명령, 출력, 테스트</p>
</li>
<li><p>GUI</p>
</li>
<li><p>NUI(Natural): 유저의 말, 행동</p>
</li>
<li><p>VUI(Voice): 음성</p>
</li>
<li><p>OUI(Organic): 모든 사물-사용자간 상호작용, HW → IoT, VR, 증강현실, 혼합현실</p>
</li>
</ul>
<h2 id="heading-3-1">3) 기본 원칙</h2>
<ul>
<li><p>직관성</p>
</li>
<li><p>유효성: 사용자의 목적을 달성</p>
</li>
<li><p>학습성: 러닝커브 낮추기</p>
</li>
<li><p>유연성: 요구사항 최대한 수용 및 실수 최소화</p>
</li>
</ul>
<h2 id="heading-4-2">4) 설계 지침</h2>
<ul>
<li><p>사용자 중심</p>
</li>
<li><p>사용성: 학습 쉽고 효율적이게 → 가장 우선적 고려사항</p>
</li>
<li><p>심미성</p>
</li>
<li><p>오류 발생 해결: 사용자의 오류 인지 쉽도록</p>
</li>
</ul>
<h2 id="heading-5-1">5) 기능</h2>
<p>입력 검증, 에러 처리 및 메시지 표시, 도움/프롬프트 제공</p>
<h2 id="heading-6-1">6) 설계 도구</h2>
<h3 id="heading-xc0g7jma7j207ja07zse66ci7j6e">- 와이어프레임</h3>
<p>기획 초기 개략적인 레이아웃<br />손그림, ppt, 키노트, 스케치, 일러스트, 포토샵</p>
<h3 id="heading-xc0g66qp7jef">- 목업</h3>
<p>와이어프레임보다 실제 화면에 가깝지만 정적인 모형(구현 X)<br />파워 목업, 발사믹 목업</p>
<h3 id="heading-xc0g7iqk7yag66as67o065oc">- 스토리보드</h3>
<p>와이어프레임 + 콘텐츠 설명 + 페이지간 이동 흐름<br />디자이너, 개발자의 초종 참고본 → 정책, 프로세스, 콘텐츠 구성, 와이어프레임, 기능정의<br />ppt, 키노트, 스케치, Axure</p>
<h3 id="heading-xc0g7zse66gc7yag7yoa7j6f">- 프로토타입</h3>
<p>와이어프레임/스토리보드 + 인터렉션 → 테스트 가능, 동적 모형<br />사용성 테스트, 작업자간 서비스 이해를 위해 작성</p>
<h3 id="heading-xc0g7jyg7iqk7lya7j207iqk">- 유스케이스</h3>
<p>사용자 측면의 요구사항, 사용자 목표 달성을 위해 수행할 내용<br />프로젝트 초기에 기능적 요구 결정, 결과 문서화 가능</p>
<h2 id="heading-7">7) 품질 요구 사항</h2>
<p>사용자 요구사항 충족으로 확립</p>
<ul>
<li><p>ISO/IEC 9126: 국제 표준(SW 품질 표준 지침)</p>
</li>
<li><p>ISO/IEC 25010: 9126 개정, 제품에 대한 국제 표준</p>
</li>
<li><p>ISO/IEC 12119: 9126 + 테스트</p>
</li>
<li><p>ISO/IEC 14598: 개발자, 구매자, 평가자 별 수행활동 규정</p>
</li>
</ul>
<h3 id="heading-xc0g7jqu7iam">- 요소</h3>
<ul>
<li><p>기능성(functionality): 요구사항 만족 여부</p>
</li>
<li><p>신뢰성(reliability): 요구된 기능을 일관적으로 오류 없이 수행</p>
</li>
<li><p>사용성(usability): 사용자가 정확히 이해하고 사용하는지, 또 쓰고 싶은지</p>
</li>
<li><p>효율성(efficiency): 빨리 처리</p>
</li>
<li><p>유지보수성(maintainablity): 분석성, 변경성, 안정성, 시험성</p>
</li>
<li><p>이식성(portablity): 다른 환경에서 적용 가능한지</p>
</li>
</ul>
<h2 id="heading-8-ui">8) UI 요소</h2>
<ul>
<li><p>체크박스: 다중다선택</p>
</li>
<li><p>라디오 버튼: 다중일</p>
</li>
<li><p>텍스트박스</p>
</li>
<li><p>콤보박스: 지정된 목록 + 새 입력</p>
</li>
<li><p>목록 상자: 입력X</p>
</li>
</ul>
<h1 id="heading-3-2">3. 애플리케이션 설계</h1>
<h2 id="heading-1-4">1) 상위 설계, 하위 설계</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>상위설계</td><td>하위설계</td></tr>
</thead>
<tbody>
<tr>
<td>아키텍서 설계, 예비 설계</td><td>모듈 설계, 상세 설계</td></tr>
<tr>
<td>시스템의 전체적 구조</td><td>시스템 내부 구조, 행위</td></tr>
<tr>
<td>구조, DB, 인터페이스</td><td>컴포넌트, 자료구조, 알고리즘</td></tr>
</tbody>
</table>
</div><h2 id="heading-2-2">2) 소프트웨어 아키텍처 설계</h2>
<h3 id="heading-xc0g6riw67o4ioybkoumra">- 기본 원리</h3>
<ul>
<li><p>모듈화: 성능 향상, 수정, 재사용, 유지관리</p>
</li>
<li><p>추상화: 전체적 설계 → 세분화/구체화 → 추상화</p>
</li>
<li><p>단계적 분해: 하향식 설계 전략 (상위 중요 개념 → 하위개념)</p>
</li>
<li><p>정보 은닉: 다른 모듈 접근, 변경X</p>
</li>
</ul>
<h3 id="heading-xc0g7zki7keiioygjeyesq">- 품질 속성</h3>
<p>품질 평가 요소를 세 측면으로 나누어 구체화시킨 것</p>
<ul>
<li><p>시스템 측면: 성능, 보안, 가능성, 기능성, 사용성, 변경 용이성 ...</p>
</li>
<li><p>비즈니스 측면: 시장적시성, 비용/혜택, 예상 시스템 수명</p>
</li>
<li><p>아키텍처 측면: 개념적 무결성, 정확성, 완결성, ...</p>
</li>
</ul>
<h3 id="heading-xc0g7isk6roeioqzvoyglq">- 설계 과정</h3>
<ul>
<li><p>설계 목표 설정</p>
</li>
<li><p>시스템 타입 결정: 시스템/서브시스템 타입, 아키텍처 패턴...</p>
</li>
<li><p>아키텍처 패턴 적용: 시스템 표준 아키텍처 설계</p>
</li>
<li><p>서브 시스템 구체화</p>
</li>
<li><p>검토</p>
</li>
</ul>
<h2 id="heading-3-contract">3) 협약(Contract)에 의한 설계</h2>
<p>컴포넌트 설계 시 클래스에 대한 여러 가정을 공유할 수 있도록 명세</p>
<ul>
<li><p>선행조건: 오퍼레이션 호출 전 true여야 할 조건</p>
</li>
<li><p>결과조건: 오퍼레이션 수행 후 만족해야 할 조건</p>
</li>
<li><p>불변조건: 오퍼레이션 실행동안 항상 만족되어야 할 조건</p>
</li>
</ul>
<h2 id="heading-4-3">4) 아키텍처 패턴</h2>
<h3 id="heading-xc0g7yym7j207zseio2vho2escdtjkjthlq">- 파이프 필터 패턴</h3>
<p>데이터스트림 각 단계를 필터로 캡슐화, 파이프를 통해 전송</p>
<ul>
<li><p>필터 재사용성 ↑, 추가 쉬움 → 확장성</p>
</li>
<li><p>필터 컴포넌트 재배치하여 다양한 파이프라인 구축 가능</p>
</li>
<li><p>데이터 변환, 버퍼링, 동기화에 사용</p>
</li>
<li><p>ex) UNIX Shell</p>
</li>
<li><p><strong>Source</strong> --Pipe1--&gt; Filter1 --Pipe2--&gt; Filter2 --Pipe3--&gt; <strong>Sink</strong></p>
</li>
</ul>
<h3 id="heading-mvc">- MVC</h3>
<p>서브 시스템을 3개로 구조화하는 패턴</p>
<ul>
<li><p>Model: 서브시스템 핵심 기능 + 데이터 보관</p>
</li>
<li><p>View</p>
</li>
<li><p>Controller: 사용자 입력값 처리를 위해 모델에게 명령</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/9c964149-86f0-4c3f-990c-414740d5a93b/image.png" alt="mvc" /></p>
<h3 id="heading-xc0g6riw7yoaio2mqo2eta">- 기타 패턴</h3>
<ul>
<li><p>마스터-슬레이브 패턴</p>
<ul>
<li><p>마스터 컴포넌트가 슬레이브한테 작업 분할해주면 슬레이브가 돌려줌</p>
</li>
<li><p>장애 허용 시스템, 병렬 컴퓨팅 시스템</p>
</li>
</ul>
</li>
<li><p>브로커 패턴</p>
<ul>
<li><p>브로커가 요청에 맞는 컴포넌트 찾아서 유저와 연결</p>
</li>
<li><p>분산 환경 시스템</p>
</li>
</ul>
</li>
<li><p>피어 투 피어 패턴</p>
<ul>
<li>피어가 클라이언트가 될 수도 있고 서버가 될 수도</li>
</ul>
</li>
<li><p>이벤트-버스 패턴</p>
<ul>
<li>publish-subscribe</li>
</ul>
</li>
<li><p>블랙보드 패턴</p>
<ul>
<li><p>모든 컴포넌트가 공유데이터, 블랙보드 컴포넌트에 접근 가능</p>
</li>
<li><p>음성인식, 차량 식별, 신호해석</p>
</li>
</ul>
</li>
<li><p>인터프리터 패턴</p>
<ul>
<li>코드 각 라인 수행방법 지정 → 기호마다 클래스를 갖도록 구성</li>
</ul>
</li>
</ul>
<h2 id="heading-5-2">5) 객체지향</h2>
<h3 id="heading-xc0g6rcd7lk0">- 객체</h3>
<h4 id="heading-gt-16">&gt; 개념</h4>
<p>소프트웨어 모듈. 데이터 + 함수</p>
<ul>
<li><p>데이터</p>
<ul>
<li><p>객체가 가진 정보 → 속성, 상태, 분류</p>
</li>
<li><p>aka 속성, 상태, 변수, 상수, 자료구조</p>
</li>
</ul>
</li>
<li><p>함수</p>
<ul>
<li><p>객체가 수행하는 기능 → 데이터 처리 알고리즘</p>
</li>
<li><p>aka 메소드, 서비스, 동작(Operation), 연산</p>
</li>
</ul>
</li>
</ul>
<h4 id="heading-gt-17">&gt; 특성</h4>
<ul>
<li><p>독립적으로 식별 가능한 이름</p>
</li>
<li><p>상태(state)는 시간에 따라 변함</p>
</li>
<li><p>객체간 상호 연관성에 의한 관계</p>
</li>
<li><p>행위: 객체가 반응할 수 있는 메시지의 집합 → 객체는 행위의 특징을 나타낼 수 있다</p>
</li>
<li><p>일정한 기억장소를 가짐</p>
</li>
</ul>
<p>메소드는 다른 객체로부터 메시지를 받았을 때 정해진 기능을 수행</p>
<h3 id="heading-xc0g7yg0656y7iqk">- 클래스</h3>
<p>공통된 속성, 연산을 갖는 객체의 집합 / 객체의 일반적인 타입</p>
<ul>
<li><p>객체의 속성, 연산을 정의하는 틀</p>
</li>
<li><p>객체지향 프로그램에서 데이터를 추상화하는 단위</p>
</li>
<li><p>인스턴스, 인스턴스화</p>
</li>
</ul>
<h3 id="heading-encapsulation">- 캡슐화(Encapsulation)</h3>
<p>데이터와 함수를 하나로 묶는 것</p>
<ul>
<li><p>캡슐화된 객체는 인터페이스를 제외한 디테일이 은폐(정보은닉) → 외부 접근 제한 → 외부 변경에 의한 파급↓</p>
</li>
<li><p>재사용 용이</p>
</li>
<li><p>메시지 주고 받을 때 상대 객체의 디테일은 몰라도 됨 → simple interface, 결합도 ↓</p>
</li>
</ul>
<h3 id="heading-inheritance">- 상속(Inheritance)</h3>
<p>부모클래스의 모든 속성/연산을 자식클래스가 물려받음</p>
<ul>
<li>자신만의 속성/연산 추가 가능</li>
</ul>
<h3 id="heading-xc0g64uk7ziv7isx">- 다형성</h3>
<p>메시지에 의해 객체가 연산 수행 시, 각 객체가 고유한 방법으로 응답할 수 있는 능력</p>
<ul>
<li><p>객체는 동일한 메소드명으로 같은 응답 가능</p>
</li>
<li><p>한 함수/연산자로 둘 이상의 다른 클래스의 인스턴스가 같은 인스턴스처럼 수행할 수 있게</p>
<ul>
<li><p>+: 숫자 클래스 == 덧셈, 문자열 클래스 == 결합</p>
</li>
<li><p>오버로딩: 같은 이름, 다른 파라미터 타입/개수</p>
</li>
<li><p>오버라이딩: 상위 클래스 메소드 재정의</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7jew6rsa7isx">- 연관성</h3>
<p>둘 이상의 객체가 상호참조하는 관계</p>
<p>종류</p>
<ul>
<li><p>is member of(연관화, association): 상호 관련</p>
</li>
<li><p>is instance of(분류화, classification): 동일한 형의 특성 모으기</p>
</li>
<li><p>is part of(집단화, aggregation): 객체 모아 하나의 상위 객체</p>
</li>
<li><p>is a (특수화, 상세화, specification): 상위 구체화 → 하위 객체</p>
</li>
</ul>
<h2 id="heading-2-3">2) 객체지향 분석 및 설계</h2>
<h3 id="heading-xc0g6rcd7lk07kea7zaliou2hoyeneydmcdrsknrspxroaa">- 객체지향 분석의 방법론</h3>
<ul>
<li><p>럼바우: 가장 일반적으로 사용 / 객체, 동적, 기능 모델로 분석</p>
</li>
<li><p>부치: 미시, 거시 개발 프로세스</p>
</li>
<li><p>제이콥슨: 유스케이스</p>
</li>
<li><p>Coad/Yourdon: ERD</p>
</li>
<li><p>Wirfs/Brock: 분석, 설계 구분 X, 명세서 중심</p>
</li>
</ul>
<h3 id="heading-xc0g65867cu7jqw7j2yiou2hoyensdquldrspu">- 럼바우의 분석 기법</h3>
<p>SW 구성요소를 그래픽 표기법으로 모델링<br />객체 모델링 표기법(OMT, Object-Modeling Technique)</p>
<ul>
<li><p>순서: 객체 모델링 → 동적 모델링 → 기능 모델링</p>
<ul>
<li><p>객체 모델링: 정보 모델링, 객체를 <strong>ERD</strong>로</p>
</li>
<li><p>동적 모델링: <strong>상태다이어그램</strong>으로 시간에 따른 객체 행위 모델링</p>
</li>
<li><p>기능 모델링: **자료흐름도(DFD)**로 자료 흐름/처리과정 모델링</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-solid">- 객체지향 설계 원칙(SOLID)</h3>
<ul>
<li><p>단일 책임(SRP, Single Responsibility Principle)</p>
</li>
<li><p>개방 폐쇄(OCP, Open-Closed P): 기존 코드 변경 없이 기능 추가 가능해야</p>
</li>
<li><p>리스코프 치환(LSP, Liskov Substitution): 자식 클래스는 최소한 부모가 할 수 있는 일은 할 줄 알아야 함</p>
</li>
<li><p>인터페이스 분리(ISP, Interface Segregation): 사용X 인터페이스와 관계, 영향X</p>
</li>
<li><p>의존역전(DIP, Dependency Inversion): 추상성 높은 클래스와 의존</p>
</li>
</ul>
<h2 id="heading-3-3">3) 모듈</h2>
<h3 id="heading-coupling">- 결합도(Coupling)</h3>
<p>모듈 간 상호의존 하는 정도, 모듈간 연관관계<br />약할수록 품질이 높고, 강할수록 구현, 유지보수성 낮아짐</p>
<h4 id="heading-gt-18">&gt; 종류(약한 순)</h4>
<ul>
<li><p>자료 결합도: 인터페이스가 자료 요소로만 구성</p>
</li>
<li><p>스탬프 결합도: 자료구조 요소로만 구성</p>
</li>
<li><p>제어 결합도: 제어신호, 제어요소(function, switch, tag, flag)</p>
</li>
<li><p>외부 결합도: 한 모듈의 데이터(변수)를 다른 모듈에서 참조</p>
</li>
<li><p>공통(공유) 결합도: 공통 데이터 영역을 여러 모듈이 사용</p>
</li>
<li><p>내용 결합도: 다른 모듈의 기능, 자료를 직접 참조</p>
</li>
</ul>
<h3 id="heading-cohesion">- 응집도(Cohesion)</h3>
<p>모듈이 독립된 정도 → 강할수록 품질 좋음</p>
<h4 id="heading-gt-19">&gt; 종류 (강한 순)</h4>
<ul>
<li><p>기능적 응집도: 모든 기능이 단일 문제 연관</p>
</li>
<li><p>순차적 응집도: A모듈의 출력이 B모듈의 입력</p>
</li>
<li><p>교환(통신)적: 동일 입출력으로 서로 다른 기능</p>
</li>
<li><p>절차적: 모듈이 다수 기능 가질 때, 구성요소가 그 기능을 순차적 수행</p>
</li>
<li><p>시간적: 특정 시간에 처리되는 몇 기능을 묶은 하나의 모듈</p>
</li>
<li><p>논리적: 유사 성격/형태의 요소로 모듈 구성</p>
</li>
<li><p>우연적: 관련 없는 요소</p>
</li>
</ul>
<h3 id="heading-xc0g7yys7j24l2mroyvhoybgw">- 팬인/팬아웃</h3>
<p>팬인(제어, 호출하는 모듈의 수), 팬아웃(호출되는 모듈의 수)</p>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/545ec245-ba25-4723-82c9-7ceb59893111/image.png" alt="fan-in-out" /></p>
<h3 id="heading-n-s">- N-S 차트</h3>
<p>Nassi-Scheneiderman Chart</p>
<p>논리 기술 중점, 도형으로 표현<br />박스 다이어그램, Chapin Chart</p>
<ul>
<li><p>제어 논리 구조 표현: 연속, 선택/다중석택, 반복 등</p>
</li>
<li><p>GOTO, 화살표 사용 X</p>
</li>
<li><p>복합 조건의 처리, 선택, 반복 구조를 시각적으로 명확히 표현 가능</p>
</li>
<li><p>단일 입구, 단일 출구</p>
</li>
<li><p>이해하기 쉽고 코드 변환 용이 / 작성 어렵고 임의적 제어선이 없음, 총체적 구조나 인터페이스 표현 난해</p>
</li>
</ul>
<h2 id="heading-4-4">4) 공통 모듈</h2>
<h3 id="heading-xc0g6rcc64wq">- 개념</h3>
<p>자주 쓰는 계산식, 매번 필요한 사용자 인증 등<br />설계 과정에서 공통부분 식별, 명세 작성 필요</p>
<h4 id="heading-gt-20">\&gt; 명세 기법</h4>
<p>정확성, 명확성, 완전성, 일관성, 추적성</p>
<h3 id="heading-xc0g7j6s7iks7jqp">- 재사용</h3>
<p>이미 개발된 기능으로 새 시스템, 기능 개발 재구성</p>
<ul>
<li><p>사용법 공개: 누구나 쓰기 쉽도록</p>
</li>
<li><p>결합도는 낮게, 응집도는 높게</p>
</li>
</ul>
<h4 id="heading-gt-21">\&gt; 규모에 따른 분류</h4>
<ul>
<li><p>함수, 객체: 냅다 갖다씀</p>
</li>
<li><p>컴포넌트</p>
<ul>
<li><p>독립적 기능을 수행하는 코드 기반으로 작성된 모듈</p>
</li>
<li><p>컴포넌트 수정 없이 인터페이스 사용해 통신</p>
</li>
</ul>
</li>
<li><p>애플리케이션: 공통 기능 애플리케이션 공유</p>
</li>
</ul>
<h3 id="heading-xc0g7isk6roeiouwqeyvia">- 설계 방안</h3>
<ul>
<li><p>결합도는 낮게 응집도는 높게</p>
</li>
<li><p>모듈의 제어영역 안에서 영향영역 유지</p>
</li>
<li><p>복잡도, 중복성 낮게, 일관성 유지</p>
</li>
<li><p>모듈의 기능은 예층 가능해야하고, 지나치게 제한적이면 안됨</p>
</li>
<li><p>유지보수성</p>
</li>
<li><p>시스템 전반적인 기능/구조를 이해하기 쉬운 크기로 분리</p>
</li>
<li><p>모듈간 계층관계 자료 필요</p>
</li>
</ul>
<h2 id="heading-5-3">5) 코드</h2>
<h3 id="heading-xc0g6rcc7jqu">- 개요</h3>
<p>자료 처리 과정, 자료 추출을 용이하게 하려고 쓰는 기호</p>
<ul>
<li><p>정보를 신속, 명확, 정확하게 전달할 수 있게</p>
</li>
<li><p>주민등록번호, 학번, 전화번호</p>
</li>
</ul>
<p>주요 기능: 식별, 분류, 배열(의미 부여해서 나열 가능), 표준화(다양한 데이터를 기준에 맞게 표현), 간소화</p>
<h3 id="heading-xc0g7kkf66wy">- 종류</h3>
<ul>
<li><p>순차코드: auto_increment</p>
</li>
<li><p>블록코드: 공통성 블록으로 묶고 그 안에서 auto_increment</p>
</li>
<li><p>10진 코드: 도서관</p>
</li>
<li><p>그룹 분류 코드: 1-01-001 == 총무부</p>
</li>
<li><p>연상코드: TV-40</p>
</li>
<li><p>표의 숫자 코드: 120-720-1500</p>
</li>
<li><p>합성코드: Ke-711 대한항공 711</p>
</li>
</ul>
<h2 id="heading-6-2">6) 디자인 패턴</h2>
<h3 id="heading-xc0g6rcc7jqu-1">- 개요</h3>
<p>설계 시 참조할만한 전형적인 해결방식</p>
<ul>
<li><p>문제/배경, 사례, 샘플코드</p>
</li>
<li><p>Don't reinvent the wheel</p>
</li>
<li><p>GoF의 디자인 패턴: 생성(5), 구조(7), 행위(11) → 총 23</p>
</li>
</ul>
<h3 id="heading-xc0g7j6l64uo7kcq">- 장단점</h3>
<ul>
<li><p>범용성 높고 구조 파악 용이</p>
</li>
<li><p>객체지향 설계, 생산력 증대</p>
</li>
<li><p>이미 검증됨 → 개발 시간, 비용 단축</p>
</li>
<li><p>초기 투자비용 높음</p>
</li>
<li><p>개발자간 의사소통 용이</p>
</li>
<li><p>설계 변경 요청 대처 가능</p>
</li>
<li><p>객체지향 아니면 곤란</p>
</li>
</ul>
<h3 id="heading-creational-pattern">- 생성 패턴(Creational Pattern)</h3>
<p>객체의 생성, 참조과정 캡슐화 → 객체 생성/변경 시 영향 낮춤 → 프로그램 유연성 증대</p>
<h4 id="heading-gt-22">\&gt; 추상팩토리</h4>
<ul>
<li><p>구체적 클래스가 아니라 인터페이스를 통해 연관객체 그룹으로 생성</p>
</li>
<li><p>서브클래스 통째로 교체 가능</p>
</li>
</ul>
<h4 id="heading-gt-23">\&gt; 빌더</h4>
<p>생성, 표현 분리</p>
<h4 id="heading-gt-24">\&gt; 팩토리 메소드</h4>
<ul>
<li><p>객체 생성을 서브클래스로 분리</p>
</li>
<li><p>상위 클래스에선 인터페이스만 정의</p>
</li>
<li><p>가상생성자 패턴</p>
</li>
</ul>
<h4 id="heading-gt-25">\&gt; 프로토타입</h4>
<ul>
<li><p>원본 객체 복제</p>
</li>
<li><p>일반적 방법으로 생성, 비용이 큰 경우 사용</p>
</li>
</ul>
<h4 id="heading-gt-26">\&gt; 싱글톤</h4>
<ul>
<li><p>생성된 객체를 어디서든 참조 가능, 여러 프로세스 동시 참조 불가</p>
</li>
<li><p>메모리 낭비 X. 하나의 인스턴스 보장</p>
</li>
</ul>
<h3 id="heading-xc0g6rws7kgwio2mqo2eta">- 구조 패턴</h3>
<p>클래스 조합해서 더 큰 구조로</p>
<h4 id="heading-gt-27">\&gt; 어댑터</h4>
<ul>
<li><p>호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있게</p>
</li>
<li><p>기존 클래스 쓰고 싶은데 인터페이스가 다를 때</p>
</li>
</ul>
<h4 id="heading-gt-28">\&gt; 브릿지</h4>
<ul>
<li><p>추상층 분리, 독립적 확장</p>
</li>
<li><p>기능과 구현을 두 개의 별도 클래스로</p>
</li>
</ul>
<h4 id="heading-gt-29">\&gt; 컴포지트</h4>
<ul>
<li><p>여러 객체를 가진 복합객체와 단일 객체를 구분없이 다루고자 할 때</p>
</li>
<li><p>객체들을 트리구조로 구성 → 복합 객체 안에 복합객체</p>
</li>
</ul>
<h4 id="heading-gt-30">\&gt; 데코레이터</h4>
<ul>
<li><p>객체간 결합으로 기능 확장</p>
</li>
<li><p>부가 기능 추가를 위해 다른 객체 덧붙이기</p>
</li>
</ul>
<h4 id="heading-gt-31">\&gt; 퍼싸드</h4>
<ul>
<li><p>복잡한 서브클래스를 피해 더 상위에 인터페이스 구현, 서브클래스들 간편하게 사용</p>
</li>
<li><p>서브 클래스 간 통합 인터페이스로서의 Wrapper 객체 필요</p>
</li>
</ul>
<h4 id="heading-gt-32">\&gt; 플라이웨이트</h4>
<ul>
<li><p>인스턴스를 가능한 한 공유해서 메모리 절약</p>
</li>
<li><p>다수의 유사객체 필요시 유용</p>
</li>
</ul>
<h4 id="heading-gt-33">\&gt; 프록시</h4>
<ul>
<li><p>접근 어려운 객체와 얘한테 연결하려는 객체 간 인터페이스</p>
</li>
<li><p>네트워크 연결, 메모리 대용량 객체로의 접근 시</p>
</li>
</ul>
<h3 id="heading-xc0g7zaj7jyeio2mqo2eta">- 행위 패턴</h3>
<p>객체간 상호작용, 책임 분배 방법 정의<br />하나의 객체로 수행할 수 없는 작업을 다른 객체로 분배하여 결합도 낮춤</p>
<h4 id="heading-gt-chain-of-responsibility">\&gt; 책임 연쇄(Chain of Responsibility)</h4>
<ul>
<li><p>요청처리 객체가 둘 이상일 때, 한 객체가 처리 못하면 다음 객체 줌</p>
</li>
<li><p>객체간 고리로 연결 - 요청 해결까지 고리 따라감</p>
</li>
</ul>
<h4 id="heading-gt-34">\&gt; 커맨드</h4>
<ul>
<li><p>요청을 객체로 캡슐화 → 재이용, 취소 가능하도록 정보 저장/로그 남김</p>
</li>
<li><p>요청에 사용되는 각종 명령어를 추상/구체 클래스로 분리하여 단순화</p>
</li>
</ul>
<h4 id="heading-gt-35">\&gt; 인터프리터</h4>
<ul>
<li><p>언어에 문법 표현을 정의</p>
</li>
<li><p>SQL, 통신 프로토콜</p>
</li>
</ul>
<h4 id="heading-gt-36">\&gt; 반복자</h4>
<ul>
<li><p>자료구조와 같이 접근이 잦은 객체에 동일한 인터페이스 사용</p>
</li>
<li><p>내부 노출 없이 순차적 접근 가능</p>
</li>
</ul>
<h4 id="heading-gt-37">\&gt; 중재자</h4>
<ul>
<li><p>객체간 복잡한 상호작용을 캡슐화하여 객체로 정의</p>
</li>
<li><p>객체간 의존성 줄여 결합도 감소</p>
</li>
</ul>
<h4 id="heading-gt-38">\&gt; 메멘토</h4>
<ul>
<li>특정 시점에서의 객체 내부를 객체화 → ctrl z</li>
</ul>
<h4 id="heading-gt-39">\&gt; 옵서버</h4>
<ul>
<li>객체 - 상속된 다른 객체 간 publish-subscribe</li>
</ul>
<h4 id="heading-gt-40">\&gt; 상태</h4>
<ul>
<li><p>객체 상태에 따라 동일 동작 다르게 처리할 때</p>
</li>
<li><p>객체 상태를 캡슐화, 이를 참조</p>
</li>
</ul>
<h4 id="heading-gt-41">\&gt; 전략</h4>
<ul>
<li><p>유사 알고리즘 개별적 캡슐화 → 상호 교환 가능하도록 정의</p>
</li>
<li><p>클라이언트는 독립적으로 원하는 알고리즘 선택 가능, 클라이언트에 영향 없이 알고리즘 변경 가능</p>
</li>
</ul>
<h4 id="heading-gt-42">\&gt; 템플릿 메소드</h4>
<ul>
<li><p>상위 클래스에서 골격을, 하위 클래스에서 구체화</p>
</li>
<li><p>유사한 서브 클래스를 묶어 공통된 내용을 상위 클래스에서 정의 → 코드 양 줄이고 유지보수성 높임</p>
</li>
</ul>
<h4 id="heading-gt-43">\&gt; 방문자</h4>
<ul>
<li><p>각 클래스의 데이터 구조에서 처리기능을 분리하여 별도의 클래스로</p>
</li>
<li><p>분리된 처리 기능은 각 클래스를 방문하여 수행</p>
</li>
</ul>
<h1 id="heading-4-5">4. 인터페이스 설계</h1>
<h2 id="heading-1-5">1) 시스템 인터페이스 요구사항</h2>
<h3 id="heading-xc0g6rka7kadiouwqeuylq">- 검증 방법</h3>
<h4 id="heading-gt-requirements-review">\&gt; 요구사항 검토(Requirements Review)</h4>
<p>명세서 오류, 결함을 담당자들이 수작업으로 분석</p>
<ul>
<li><p>동료 검토: 작성자가 발표하면 동료가 들어보면서 결함 찾기</p>
</li>
<li><p>워크스루: 명세서 배포 후 검토 회의</p>
</li>
<li><p>인스펙션: 검토 전문가들이 확인</p>
</li>
</ul>
<h4 id="heading-gt-44">\&gt; 프로토타이핑</h4>
<p>견본품(prototype)을 만들어 최종 결과물 예측</p>
<h4 id="heading-gt-45">\&gt; 테스트 설계</h4>
<p>테스트 케이스 생성</p>
<h4 id="heading-gt-case">\&gt; CASE 도구 활용</h4>
<p>일관성 분석을 통해 확인</p>
<h2 id="heading-2-4">2) 시스템 연계 기술</h2>
<ul>
<li><p>DB Link: DB가 제공하는 DB Link 객체를 이용</p>
</li>
<li><p>API/Open API: 송신시스템 DB에서 데이터 제공하는 애플리케이션 프로그래밍 인터페이스 프로그램</p>
</li>
<li><p>연계 솔루션: EAI 서버와 송수신 시스템의 클라이언트 이용</p>
</li>
<li><p>Socket: 서버는 소켓 생성, 포트 할당 → 클라이언트 요청 시 연결하여 통신하는 네트워크 기술</p>
</li>
<li><p>Web Service: WSDL, UDDI, SOAP 프로토콜</p>
</li>
</ul>
<h2 id="heading-3-4">3) 연계 매커니즘 구성 요소</h2>
<ul>
<li><p>송신 시스템</p>
<ul>
<li><strong>연계 프로그램에서 온 데이터</strong>를 형식에 맞게 인터페이스 테이블, 파일 등으로 변환 후 송신하는 시스템</li>
</ul>
</li>
<li><p>수신 시스템</p>
<ul>
<li>수신한 인터페이스 테이블, 파일을 연계 프로그램에서 처리할 수 있는 형식으로 변환</li>
</ul>
</li>
<li><p>연계 서버</p>
<ul>
<li>송/수신 시스템 사이에서 현황 모니터링</li>
</ul>
</li>
</ul>
<h2 id="heading-4-6">4) 미들웨어</h2>
<p>운영체제와 응용 프로그램, 서버와 클라이언트 사이에서 다양한 서비스를 제공하는 SW</p>
<ul>
<li><p>DB</p>
<ul>
<li><p>DB 클라이언트-원격DB 연결용 미들웨어</p>
</li>
<li><p>2-Tier 아키텍처: DB를 사용하여 시스템 구축</p>
</li>
</ul>
</li>
<li><p>RPC</p>
<ul>
<li><p>Remote Procedure Call, 원격 프로시저 호출</p>
</li>
<li><p>원격 프로시저를 로컬처럼 호출</p>
</li>
</ul>
</li>
<li><p>MOM</p>
<ul>
<li><p>Message Oriented Middleware, 메시지 지향 미들웨어</p>
</li>
<li><p>비동기형 메시지 전달 방식</p>
</li>
<li><p>온라인 업무보다는 이기종 분산 데이터 시스템의 데이터 동기를 위해 사용</p>
</li>
</ul>
</li>
<li><p>TP-Monitor</p>
<ul>
<li><p>Transaction Processing Monitor, 트랜잭션 처리 모니터</p>
</li>
<li><p>항공기, 철도 예약 업무 등 온라인 트랜잭션 업무에서 트랜잭션 처리, 감시 미들웨어</p>
</li>
<li><p>사용자가 증가해도 빠른 응답 속도를 유지해야 하는 업무</p>
</li>
</ul>
</li>
<li><p>ORB</p>
<ul>
<li><p>Object Request Broker, 객체 요청 브로커</p>
</li>
<li><p>객체 지향, 코바(CORBA) 표준 스펙 구현</p>
</li>
<li><p>최근에는 TP-Monitor의 장점인 트랜잭션 처리, 모니터링 추가 구현 제품도 있음</p>
</li>
</ul>
</li>
<li><p>WAS</p>
<ul>
<li><p>Web Application Server</p>
</li>
<li><p>동적인 콘텐츠 처리를 위한 미들웨어</p>
</li>
<li><p>클라이언트-서버 환겨보다는 웹 환경을 구현하기 위한 미들웨어</p>
</li>
</ul>
</li>
</ul>
<h1 id="heading-1-6">1. 데이터 입출력 구현</h1>
<h2 id="heading-1-7">1) 자료 구조</h2>
<ul>
<li><p>선형 구조: 배열, 선형 리스트(연속/연결 리스트), 스택, 큐, 데크</p>
</li>
<li><p>비선형 구조: 트리, 그래프</p>
</li>
</ul>
<h2 id="heading-2-5">2) 선형 구조</h2>
<h3 id="heading-xc0g7isg7zivioumroykpo2kua">- 선형 리스트</h3>
<h4 id="heading-gt-46">&gt; 연속 리스트</h4>
<ul>
<li><p><strong>연속되는 기억장소</strong>(≒<strong>배열</strong>)</p>
</li>
<li><p>기억장소 <strong>이용 효율</strong> 가장 좋음 (밀도 1)</p>
</li>
<li><p>데이터 중간 <strong>삽입 시 빈 공간</strong> 필요, <strong>삽입/삭제 시 자료 이동</strong> 필요</p>
</li>
</ul>
<h4 id="heading-gt-47">&gt; 연결 리스트</h4>
<ul>
<li><p>자료를 임의의 기억공간에 기억, <strong>노드로 연결</strong> → 삽입/삭제 용이</p>
</li>
<li><p><em>기억 공간이 연속적으로 놓여있지 않아도</em> 저장 가능</p>
</li>
<li><p>순차 리스트 대비 <strong>기억 공간 효율 ↓</strong></p>
</li>
<li><p><strong>접근 속도 느림</strong>: <em>포인터</em> 찾아야함</p>
</li>
<li><p>중간 노드 <strong>끊어지면</strong> 다음 노드 찾기 어려움</p>
</li>
</ul>
<h3 id="heading-xc0g7iqk7yod">- 스택</h3>
<ul>
<li><p>한쪽 끝으로만 삽입, 삭제 (<strong>LIFO</strong>)</p>
</li>
<li><p>스택 full인 상태에서 데이터 삽입 → <strong>오버플로</strong></p>
</li>
<li><p>빈 스택에서 데이터 삭제 → <strong>언더플로</strong></p>
</li>
</ul>
<h4 id="heading-gt-48">&gt; 응용 분야</h4>
<p>함수 호출 순서 제어, 인터럽트 처리, 수식 계산, 컴파일러의 언어 번역, 복귀 주소 저장</p>
<h3 id="heading-xc0g7ygq">- 큐</h3>
<ul>
<li><p>한 쪽에서 삽입, 다른 쪽에서 삭제 (<strong>FIFO</strong>)</p>
</li>
<li><p>시작과 끝을 표시하는 <strong>두 개의 포인터</strong></p>
</li>
</ul>
<h2 id="heading-3-5">3) 비선형 구조</h2>
<h3 id="heading-xc0g6re4656y7zse">- 그래프</h3>
<h4 id="heading-gt-49">&gt; 방향/무방향 그래프의 최대 간선 수</h4>
<p>정점 n개</p>
<ul>
<li><p>무방향 그래프: n(n-1)/2</p>
</li>
<li><p>방향 그래프: n(n-1)</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/7ff97858-d7b3-4006-b1f5-5e35ef7573ff/image.png" alt="graph" /></p>
<h3 id="heading-xc0g7yq466as">- 트리</h3>
<h4 id="heading-gt-50">&gt; 정의</h4>
<p>**정점(노드)과 선분(브랜치)**를 이용하여 <strong>사이클을 이루지 않도록</strong> 구성한 <strong>특수한 그래프</strong></p>
<h4 id="heading-gt-51">&gt; 관련 용어</h4>
<ul>
<li><p>노드: 자료 항목 + 가지(branch)</p>
</li>
<li><p>근 노드(Root Node): 최상위 노드</p>
</li>
<li><p>디그리(차수): 각 노드에서 뻗어나온 가지의 수</p>
</li>
<li><p>단말 노드(Terminal Node): 잎 노드(Leaf Node), 자식이 하나도 없는 노드, 디그리 0</p>
</li>
<li><p>자식 노드 / 부모 노드 / 형제 노드</p>
</li>
<li><p>트리의 디그리: 디그리 최대값</p>
</li>
</ul>
<h4 id="heading-gt-52">&gt; 운행법</h4>
<ul>
<li><p>Preorder 운행: Root → Left → Right</p>
</li>
<li><p>Inorder 운행: Left → Root → Right</p>
</li>
<li><p>Postorder 운행: Left → Right → Root</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/869a7de8-54af-425d-9c32-1acc49b7f43f/image.png" alt="node" /></p>
<ul>
<li><p>Preorder</p>
<ul>
<li>A13 → AB2E3 → ABDHIE3 → ABDHIECFG</li>
</ul>
</li>
<li><p>Inorder</p>
<ul>
<li>1A3 → 2BEA3 → HDIBEA3 → HDIBEAFCG</li>
</ul>
</li>
<li><p>Postorder</p>
<ul>
<li>13A → 2EB3A → HIDEB3A → HIDEBFGCA</li>
</ul>
</li>
</ul>
<h2 id="heading-4-7">4) 수식의 표기법</h2>
<h3 id="heading-xc0g7zgc6riw67kv">- 표기법</h3>
<ul>
<li><p>전위 표기법(Prefix): +AB</p>
</li>
<li><p>중위 표기법(InFix): A+B</p>
</li>
<li><p>후위 표기법(PostFix): AB+</p>
</li>
</ul>
<h3 id="heading-infix-prefix-postfix">- Infix → PreFix, PostFix</h3>
<blockquote>
<p>X = A / B * (C + D) + E</p>
</blockquote>
<ul>
<li><p>PreFix<br />  \=X+*/AB+CDE</p>
</li>
<li><p>PostFix<br />  XAB/CD+*E+=</p>
</li>
</ul>
<h3 id="heading-postfix-infix">- PostFix → Infix</h3>
<blockquote>
<p>A B C - / D E F + * +</p>
</blockquote>
<p>A / (B - C) + D * (E + F)</p>
<h3 id="heading-prefix-infix">- PreFix → Infix</h3>
<blockquote>
<p>+ / A - B C * D + E F</p>
</blockquote>
<p>A / (B - C) + D * (E + F)</p>
<h2 id="heading-5-4">5) 정렬</h2>
<h3 id="heading-xc0g7ik97j6fioygleugra">- 삽입 정렬</h3>
<p><strong>key 요소</strong>를 기존의 정렬된 자료 사이의 <strong>올바른 자리를 찾아 삽입</strong><br />key 요소는 <strong>두번째 요소</strong>부터 시작</p>
<ul>
<li><p>8 5 6 2 4</p>
</li>
<li><p>5 8 | 6 2 4</p>
</li>
<li><p>5 6 8 | 2 4</p>
</li>
<li><p>2 5 6 8 | 4</p>
</li>
<li><p>2 4 5 6 8</p>
</li>
</ul>
<h3 id="heading-xc0g7isg7yodioygleugra">- 선택 정렬</h3>
<p>해당 순서에 원소를 <strong>넣을 위치는 이미 정해져 있고, 어떤 원소를 넣을지 선택</strong>하는 알고리즘<br /><strong>최소값 찾기 → 맨 앞 값과 교체 → 계속 반복</strong></p>
<ul>
<li><p>8 5 6 2 4</p>
</li>
<li><p><strong>2</strong> 8 5 6 4</p>
</li>
<li><p>2 <strong>4</strong> 8 5 6</p>
</li>
<li><p>2 4 <strong>5</strong> 8 6</p>
</li>
<li><p>2 4 5 <strong>6 8</strong></p>
</li>
</ul>
<h3 id="heading-xc0g67ke67iuioygleugra">- 버블 정렬</h3>
<p>인접 요소끼리 비교해서 크면 한 칸씩 뒤로 보냄 (매번 비교 + 교환)</p>
<ul>
<li><p>8 5 6 2 4</p>
</li>
<li><p><strong>5 8</strong> 6 2 4 → 5 <strong>6 8</strong> 2 4 → 5 6 <strong>2 8</strong> 4 → 5 6 2 <strong>4 8</strong></p>
</li>
<li><p>5 <strong>2 6</strong> 4 8 → 5 2 <strong>4 6</strong> 8</p>
</li>
<li><p><strong>2 5</strong> 4 6 8 → 2 <strong>4 5</strong> 6 8</p>
</li>
</ul>
<h3 id="heading-xc0g7yc1ioygleugra">- 퀵 정렬</h3>
<p>피벗 기준 작으면 왼쪽, 크면 오른 쪽으로<br />분할과 정복<br />평균: O(n log n) / 최악: O(n^2)</p>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/cd333119-941f-42ce-917f-373f4d8e1942/image.png" alt /></p>
<h3 id="heading-xc0g7z6zioygleugra">- 힙 정렬</h3>
<p>완전 이진 트리(Complete Binary Tree) 사용<br />구성된 전이진 트리를 Heap Tree로 변환 후 정렬<br />O(n log n)</p>
<p>cf) 완전 이진 트리<br />부모 자식 간 특정 조건 만족, 자식 노드 최대2, 모든 레벨 노드 full</p>
<h3 id="heading-xc0g7zwp67orioygleugra">- 합병 정렬</h3>
<p>이미 정렬된 두 개의 파일을 하나로 합병하는 정렬<br />O(n log n)</p>
<h2 id="heading-6-3">6) 이진 검색</h2>
<p>전체 파일을 두 개의 서브 파일로 분리하며 key 레코드 검색하는 방식</p>
<ul>
<li><p>순서화된 파일만 가능</p>
</li>
<li><p>대상 key 값을 중간 레코드 key 값과 비교하며 검색</p>
</li>
<li><p>비교 거듭 할때마다 검색 대상이 절반으로 줄어듦</p>
</li>
<li><p>중간 레코드 번호 = (first + last ) / 2</p>
</li>
</ul>
<h2 id="heading-7-1">7) 해싱 함수</h2>
<ol>
<li>제산법(Division)</li>
</ol>
<ul>
<li><p>홈 주소: 해시테이블의 크기보다 큰 수 중 가장 작은 소수(Prime, Q)로 나눈 나머지</p>
</li>
<li><p>h(K) = K mod Q</p>
</li>
</ul>
<ol start="2">
<li>제곱법(Mid-Square)</li>
</ol>
<ul>
<li>홈 주소: K^2의 중간 부분 값</li>
</ul>
<ol start="3">
<li>폴딩법(Folding)</li>
</ol>
<ul>
<li>홈 주소: K를 여러 부분으로 나눈 후 각 부분의 합이나 XOR(배타적 논리합)한 값</li>
</ul>
<ol start="4">
<li>기수 변환법(Radix)</li>
</ol>
<ul>
<li>키 숫자를 다른 진수로 변환 후 주소 범위에 맞게 조정</li>
</ul>
<ol start="5">
<li>대수적 코딩법</li>
</ol>
<ul>
<li>홈 주소: 키 값 각 자리의 비트수를 다항식의 계수로 간주, 이를 해시표의 크기로 정의된 다항식으로 나누어 얻은 나머지 다항식의 계수</li>
</ul>
<ol start="6">
<li>숫자 분석법</li>
</ol>
<ul>
<li>키 값 숫자의 분포 분석 → 비교적 고른 자리를 택해서 홈주소</li>
</ul>
<ol start="7">
<li>무작위법: 난수</li>
</ol>
<h2 id="heading-8-db">8) DB</h2>
<h3 id="heading-dbms">- DBMS</h3>
<p>DB 관리, 요구에 따른 정보 생성 SW</p>
<h4 id="heading-7zwe7iiyioq4soukpq">필수 기능</h4>
<ul>
<li><p><strong>정의</strong> 기능: <strong>데이터 타입, 구조, 제약 조건 등을 명시</strong> 가능</p>
</li>
<li><p><strong>조작</strong> 기능: CRUD <strong>인터페이스</strong> 제공</p>
</li>
<li><p><strong>제어</strong> 기능: CUD의 정확한 수행으로 데이터의 <strong>무결성</strong> 유지</p>
</li>
</ul>
<h4 id="heading-7j6l7kcq">장점</h4>
<ul>
<li><p>데이터의 논리적, 물리적 <strong>독립성</strong> 보장</p>
</li>
<li><p>중복 피해서 <strong>기억 공간 절약</strong></p>
</li>
<li><p>저장된 데이터 공동 이용, 데이터 표준화, 통합 관리, 최신성, 실시간 처리 가능</p>
</li>
<li><p>데이터의 <strong>일관성/무결성, 보안</strong> 유지</p>
</li>
</ul>
<h4 id="heading-64uo7kcq">단점</h4>
<ul>
<li><p>DB 전문가 부족</p>
</li>
<li><p>전산화 비용 증가</p>
</li>
<li><p><strong>과부하(오버헤드)</strong> 발생 가능</p>
</li>
<li><p><strong>백업, 리커버리</strong> 어려움</p>
</li>
<li><p>시스템 복잡</p>
</li>
</ul>
<h3 id="heading-xc0g7iqk7ykk66ei">- 스키마</h3>
<p>DB 구조, 제약 조건에 관한 <strong>명세를 기술한 메타데이터</strong>의 집합<br /><strong>속성, 개체, 관계, 제약조건</strong> 등</p>
<h4 id="heading-67ae66wy">분류</h4>
<ul>
<li><p><strong>외부 스키마</strong></p>
<ul>
<li><strong>사용자, 개발자</strong>가 필요로하는 DB 구조</li>
</ul>
</li>
<li><p><strong>개념 스키마</strong></p>
<ul>
<li><p><strong>DB 전체</strong>적인 논리적 구조</p>
</li>
<li><p>모든 응용 프로그램 등이 필요로 하는 데이터를 종합한 <strong>조직 전체의 DB → 하나만 존재</strong></p>
</li>
</ul>
</li>
<li><p><strong>내부 스키마</strong></p>
<ul>
<li><p><strong>물리적 저장장치 입장</strong>에서 본 DB 구조</p>
</li>
<li><p>실제로 DB에 저장될 레코드의 형식 정의, 저장 데이터의 표현 방법, 내부 레코드의 물리적 순서 등</p>
</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/b6ef65b2-e464-417f-a20a-a949dbec97de/image.png" alt="schema" /></p>
<h3 id="heading-sql">- 절차형 SQL의 테스트와 디버깅</h3>
<ul>
<li><p>디버깅으로 기능의 적합성 여부를 검증, 실행을 통해 결과를 확인하는 테스트 과정</p>
</li>
<li><p>목적: 테스트를 통해 오류를 발견한 후 디버깅을 통해 오류 발생 소스 코드를 추적하며 수정</p>
</li>
</ul>
<h1 id="heading-2-6">2. 통합 구현</h1>
<h2 id="heading-1-unit-module">1) 단위 모듈(Unit Module)</h2>
<p>SW 구현에 필요한 여러 동작 중 <strong>한 가지 동작을 수행하는 기능을 모듈로 구현</strong>한 것</p>
<ul>
<li><p><strong>단위 기능</strong>: 단위 모듈로 구현되는 하나의 기능</p>
</li>
<li><p>사용자, 다른 모듈로부터 값을 전달받아 시작되는 <strong>작은 프로그램</strong>을 의미하기도 함</p>
</li>
<li><p>두 개의 단위모듈을 합쳐서 두 개의 기능 구현 가능</p>
</li>
<li><p>구성요소: 처리문, 명령문, 데이터 구조 등</p>
</li>
<li><p>독립적인 컴파일, 다른 모듈에 호출/삽입 가능</p>
</li>
<li><p>단위기능 명세서 작성 후 입출력 기능과 알고리즘 구현</p>
</li>
</ul>
<h2 id="heading-2-ipc">2) IPC</h2>
<p>Inter-Process Communication</p>
<p><strong>모듈 간 통신</strong> 방식을 구현하기 위해 사용되는 대표적인 프로그래밍 인터페이스 집합<br />복수의 프로세스를 수행하며 이뤄지는 <strong>프로세스 간 통신까지 구현 가능</strong></p>
<h3 id="heading-xc0g64ya7zgciouploygjoutna">- 대표 메소드</h3>
<ul>
<li><p><strong>Shared Memory</strong></p>
<ul>
<li>다수 프로세스가 <strong>공유 메모리</strong>로 통신</li>
</ul>
</li>
<li><p><strong>Socket</strong></p>
<ul>
<li>네트워크 소켓</li>
</ul>
</li>
<li><p><strong>Semaphores</strong></p>
<ul>
<li><strong>공유 자원에 대한 접근 제어</strong>를 통해 통신</li>
</ul>
</li>
<li><p><strong>Pipes &amp; Named Pipes</strong></p>
<ul>
<li><strong>파이프(선입선출)라는 메모리를 공유</strong>하며 통신, 프로세스 간 파이프 <strong>동시 접근 불가</strong></li>
</ul>
</li>
<li><p><strong>Message Queueing</strong></p>
<ul>
<li>메시지가 발생하면 이를 전달하며 통신</li>
</ul>
</li>
</ul>
<h2 id="heading-3-6">3) 단위 모듈 테스트</h2>
<p>단위 기능을 구현하는 모듈이 정해진 기능을 정확히 수행하는지<br /><strong>Unit Test</strong></p>
<ul>
<li><p>화이트박스 테스트, 블랙박스 테스트 기법 사용</p>
</li>
<li><p>모듈 단독 실행 환경과 데이터가 필요</p>
</li>
<li><p>기능 단위 디버깅 용이 / 시스템 수준의 오류는 못 잡음</p>
</li>
</ul>
<h2 id="heading-4-8">4) 테스트 케이스</h2>
<p><strong>입력값, 실행조건, 기대결과</strong> 등의 항목에 대한 <strong>명세서</strong></p>
<h3 id="heading-isoiecieee-29119-3">- 구성요소 (ISO/IEC/IEEE 29119-3 표준)</h3>
<ul>
<li><p>식별자</p>
</li>
<li><p>테스트 항목: 테스트 대상(모듈, 기능)</p>
</li>
<li><p>입력 명세: 입력값, 조건</p>
</li>
<li><p>출력 명세</p>
</li>
<li><p>환경 설정: 필요한 HW, SW</p>
</li>
<li><p>특수 절차 요구</p>
</li>
<li><p>의존성 기술</p>
</li>
</ul>
<h2 id="heading-5-ide">5) 통합 개발 환경(IDE)</h2>
<p>코딩, 디버그, 컴파일, 배포 등을 제공하는 SW 개발환경</p>
<h2 id="heading-6-4">6) 빌드 도구</h2>
<ul>
<li><p>소스 코드 → 제품 소프트웨어</p>
</li>
<li><p>전처리, 컴파일 등</p>
</li>
<li><p>Ant: 아파치, 자바 공식 빌드 도구</p>
</li>
<li><p>Maven: 아파치, ant 대안</p>
</li>
<li><p>Gradle: ant, maven 보완</p>
</li>
</ul>
<h1 id="heading-3-7">3. 소프트웨어 패키징</h1>
<h2 id="heading-1-8">1) 소프트웨어 패키징</h2>
<p>모듈별로 생성한 실행 파일을 묶어 <strong>배포용 설치 파일 만들기</strong></p>
<ul>
<li><p>사용자 중심 진행</p>
</li>
<li><p>소스코드는 모듈화하여 패키징</p>
</li>
</ul>
<h3 id="heading-xc0g6rog66ck7iks7zwt">- 고려사항</h3>
<ul>
<li><p><strong>사용자 시스템 환경</strong> 정의 (OS, CPU, 메모리 등)</p>
</li>
<li><p><strong>UI는 시각적인 자료</strong>와 함께 제공</p>
</li>
<li><p>하드웨어와 함께 관리되도록 <strong>Managed Service</strong> 형태로 제공</p>
</li>
<li><p>내부 콘텐츠 <strong>암호화</strong> 및 보안</p>
</li>
<li><p>다른 콘텐츠 및 단말기간 <strong>DRM</strong> 연동 고려</p>
</li>
<li><p>사용자 <strong>편의성을</strong> 위한 복잡성 및 비효율성 문제 고려</p>
</li>
<li><p>소프트웨어 종류에 적합한 <strong>암호화 알고리즘</strong> 적용</p>
</li>
</ul>
<h2 id="heading-2-7">2) 릴리즈 노트</h2>
<p>개발 과정의 <strong>릴리즈 정보를 최종 사용자와 공유</strong>하는 문서</p>
<ul>
<li><p>테스트 진행 방법, 결과, 소프트웨어 사양 확인 가능</p>
</li>
<li><p>전체 기능, 서비스 내용, 개선 사항 공유</p>
</li>
<li><p>버전 관리, 릴리즈 정보 관리 가능</p>
</li>
<li><p>초기 배포 및 출시 후 추가 배포 시에 제공</p>
</li>
</ul>
<h3 id="heading-xc0g7lsi6riwiouyhoyghcdsnphshleg7iucioqzoougpoycro2vrq">- 초기 버전 작성 시 고려사항</h3>
<ul>
<li><p>현재 시제로 작성</p>
</li>
<li><p>신규 소스, 빌드, 변경/개선된 이력 작성</p>
</li>
<li><p>머릿말, 개요, 목적, 문제 요약, 재현 항목, 수정/개선 내용, 사용자 영향도, SW 지원 영향도, 노트, 면책 조항, 연락처</p>
</li>
</ul>
<h2 id="heading-3-drm">3) 디지털 저작권 관리(DRM)</h2>
<ul>
<li><p>원본 콘텐츠가 아날로그인 경우, <strong>디지털로 변환 후 패키저로 DRM 패키징</strong></p>
</li>
<li><p>콘텐츠 크기가 <strong>작은 경우</strong>(음원, 문서) 요청 시점에 <strong>실시간 패키징</strong>, <strong>큰 경우 패키징 후 배포</strong></p>
</li>
<li><p>패키징 수행 시 암호화된 저작권자의 <strong>전자서명</strong> 포함, <strong>라이선스 정보가 클리어링 하우스</strong>에 등록됨</p>
</li>
<li><p>콘텐츠 사용 시 클리어링 하우스에 등록된 라이선스 정보로 <strong>사용자 인증, 권한 여부 확인 필요</strong></p>
</li>
<li><p><strong>종량제 방식</strong>, 클리어링 하우스로 실제 사용량 측정 후 요금 부과</p>
</li>
</ul>
<h3 id="heading-drm">- DRM 구성 요소</h3>
<ul>
<li><p><strong>클리어링 하우스</strong></p>
<ul>
<li>저작권 사용 권한, 라이선스, 암호화된 키, 사용량에 따른 결제 관리 수행</li>
</ul>
</li>
<li><p><strong>콘텐츠 제공자</strong>: 저작권자</p>
</li>
<li><p><strong>패키저</strong></p>
<ul>
<li>콘텐츠를 메타데이터와 함께 <strong>배포 가능한 형태로 묶어 암호화</strong>하는 프로그램</li>
</ul>
</li>
<li><p><strong>콘텐츠 분배자</strong></p>
<ul>
<li>암호화된 콘텐츠를 <strong>유통</strong>하는</li>
</ul>
</li>
<li><p><strong>콘텐츠 소비자</strong></p>
</li>
<li><p><strong>DRM 컨트롤러</strong></p>
<ul>
<li>배포된 콘텐츠의 <strong>이용권한 통제</strong> 프로그램</li>
</ul>
</li>
<li><p><strong>보안 컨테이너</strong></p>
<ul>
<li>콘텐츠 원본을 안전하게 유통하기 위한 <strong>전자적 보안 장치</strong></li>
</ul>
</li>
</ul>
<h3 id="heading-drm-1">- DRM 기술 요소</h3>
<ul>
<li><p>암호화 (+전자 서명)</p>
</li>
<li><p>키 관리</p>
</li>
<li><p>암호화 파일 생성(Packager)</p>
</li>
<li><p>식별 기술</p>
</li>
<li><p>저작권 표현</p>
</li>
<li><p>정책 관리</p>
</li>
<li><p>크랙 방지</p>
</li>
<li><p>인증</p>
</li>
</ul>
<h2 id="heading-4-9">4) 소프트웨어 매뉴얼</h2>
<h3 id="heading-xc0g7isk7lmyiounpoujtoywva">- 설치 매뉴얼</h3>
<ul>
<li><p>사용자 기준 작성</p>
</li>
<li><p>설치 a-z 빠짐없이 순서대로 작성</p>
</li>
<li><p>오류 메시지, 예외 상황 별도 분류 설명</p>
</li>
<li><p>목차/개요, 서문, 기본 사항 포함</p>
</li>
<li><p>기능 식별 → UI 분류 → 설치/백업 파일 → Uninstall 절차 확인 → 이상 케이스 확인 → 최종 매뉴얼 적용</p>
</li>
</ul>
<h4 id="heading-gt-53">&gt; 기본 사항</h4>
<ul>
<li><p>소프트웨어 개요</p>
<ul>
<li>주요 기능 및 UI, 그림으로 설명</li>
</ul>
</li>
<li><p>설치 관련 파일</p>
<ul>
<li>설치에 필요한 파일, exe, ini, log 등 파일 설명</li>
</ul>
</li>
<li><p>설치 아이콘</p>
</li>
<li><p>프로그램 삭제</p>
</li>
<li><p>관련 추가 정보</p>
</li>
</ul>
<h3 id="heading-xc0g7iks7jqp7j6qiounpoujtoywva">- 사용자 매뉴얼</h3>
<p>사용 과정에서 필요한 내용에 대한 문서</p>
<ul>
<li><p>오류 패치, 기능 업그레이드 등을 위해 매뉴얼 <strong>버전 관리</strong></p>
</li>
<li><p>개별 동작 가능한 <strong>컴포넌트 단위</strong>로작성</p>
</li>
<li><p>컴포넌트 명세서, 구현 설계서 토대로 작성</p>
</li>
<li><p>목차/개요, 서문, 기본사항 등 포함</p>
</li>
<li><p>작성 지침 정의 → 사용자 매뉴얼 구성 요소 정의 → 구성 요소별 내용 작성 → 사용자 매뉴얼 검토</p>
</li>
</ul>
<h2 id="heading-5-5">5) 형상 관리</h2>
<p>Git, CVS, Subversion 등</p>
<h3 id="heading-xc0g7ksr7jqu7isx">- 중요성</h3>
<ul>
<li><p>SW 변경사항 추적, 통제</p>
</li>
<li><p>무절제한 변경 방지</p>
</li>
<li><p>버그, 수정사항 추적</p>
</li>
<li><p>진행 정도 확인 기준으로 사용 가능</p>
</li>
<li><p>배포본 관리 효율</p>
</li>
<li><p>여러 개발자 동시 개발 가능</p>
</li>
</ul>
<h3 id="heading-xc0g6riw64ql">- 기능</h3>
<ul>
<li><p>형상 식별</p>
<ul>
<li>형상관리 대상에 이름, 관리번호를 부여하고 계층(Tree) 구조로 구분 → 수정, 추적 용이하도록</li>
</ul>
</li>
<li><p>버전 제어</p>
<ul>
<li>다른 버전의 형상 항목 관리</li>
</ul>
</li>
<li><p>형상 통제(변경 관리)</p>
<ul>
<li>변경 요구 검토</li>
</ul>
</li>
<li><p>형상 감사</p>
</li>
<li><p>형상 기록(상태 보고)</p>
</li>
</ul>
<h3 id="heading-xc0g7iam7zse7yq47juo7ja0iouyhoyghcdrk7hroz0g6rsa66coioyjvoyalcdquldriqu">- 소프트웨어 버전 등록 관련 주요 기능</h3>
<ul>
<li><p>저장소(Repository): 최신 버전 파일, 변경 정보 저장소</p>
</li>
<li><p>가져오기: 빈 저장소에 파일 복사</p>
</li>
<li><p>체크아웃: 저장소에서 파일 받아옴</p>
</li>
<li><p>체크인: 소스 수정 후 저장소 갱신</p>
</li>
<li><p>커밋: 충돌을 알리고 수정 후 갱신 완료</p>
</li>
<li><p>동기화</p>
</li>
</ul>
<h3 id="heading-xc0g67cp7iud7jeqiouusoulucdrtotrpzg">- 방식에 따른 분류</h3>
<h4 id="heading-gt-54">&gt; 공유 폴더 방식</h4>
<p>버전 관리 자료를 로컬 컴퓨터의 공유폴더에 저장<br />SCSS, RCS, PVCS, QVCS</p>
<h4 id="heading-gt-55">&gt; 클라이언트/서버 방식</h4>
<p>중앙시스템(서버)에 저장<br />CVS, SVN(Subversion), CVSNT, Clear Case, CMVC, Perforce</p>
<h4 id="heading-gt-56">&gt; 분산 저장소 방식</h4>
<p>하나의 원격 저장소와 분산된 개발자 PC의 로컬 저장소에 함께 저장</p>
<ul>
<li><p>개발자가 로컬 저장소에서 우선 반영(버전 관리)한 뒤, 이걸 다시 원격 저장소에 반영</p>
</li>
<li><p>원격 저장소에 문제가 생겨도 로컬 저장소 자료로 작업 가능</p>
</li>
</ul>
<p>Git, GNU arch, DCVS, Bazaar, Mecurial, TeamWare, BitKepper, Plastic SCM</p>
<h3 id="heading-xc0g64ya7zgc7kcbioq4soyioa">- 대표적 기술</h3>
<h4 id="heading-gt-subversionsvn">&gt; Subversion(SVN)</h4>
<p>CVS 개선, 아파치</p>
<ul>
<li><p><strong>클라이언트/서버</strong> 구조, 서버에는 최신 파일</p>
</li>
<li><p>서버 자료를 클라이언트로 복사해서 작업 후 변경 내용을 서버에 반영</p>
</li>
<li><p>모든 개발 작업은 <strong>trunk 디렉토리</strong>에서 수행</p>
</li>
<li><p>추가 개발 작업은 <strong>branches 디렉토리</strong> 안에 별도의 디렉토리를 만들어 작업을 완료 후 trunk에 머지</p>
</li>
<li><p>커밋 시 <strong>리비전</strong> 1씩 증가</p>
</li>
<li><p>서버는 주로 유닉스, 클라이언트는 상관 없음</p>
</li>
<li><p>오픈 소스, 무료</p>
</li>
<li><p><strong>CVS의 단점이었던 파일, 디렉토리명 변경, 이동</strong> 등이 가능</p>
</li>
</ul>
<h4 id="heading-gt-git">&gt; Git</h4>
<p>리누스 토발즈</p>
<ul>
<li><p><strong>분산 버전 관리 시스템. 로컬/원격 저장소</strong></p>
<ul>
<li><p><strong>지역 저장소</strong>: 개발자들이 실제 개발을 진행, 버전관리 수행</p>
</li>
<li><p><strong>원격 저장소</strong>: 협업을 위해 <strong>버전 공동 관리</strong>, 내 작업 반영하거나 다른 개발자의 작업 가져오기</p>
</li>
</ul>
</li>
<li><p><strong>버전 관리가 로컬</strong>에서 진행되므로 버전관리 신속, 원격/네트워크 문제 시 작업 가능</p>
</li>
<li><p><strong>브랜치</strong>를 이용하면 기존 코드에 영향 없이 다양한 테스팅 가능</p>
</li>
<li><p><strong>스냅샷</strong>: 파일의 변화 → 이전 스냅샷의 포인터를 가지므로 버전 흐름 파악 가능</p>
</li>
</ul>
<h2 id="heading-6-5">6) 빌드 자동화 도구</h2>
<p>소스 코드를 컴파일한 후 여러개의 모듈을 묶어 <strong>실행 파일</strong>로 만드는 과정<br />→ <strong>빌드, 테스트, 배포를 자동화</strong> 하는 도구</p>
<ul>
<li><p>지속적인 통합 개발환경</p>
<ul>
<li><p>한 작업 마무리 시 모듈 단위로 개발된 코드를 지속적으로 통합</p>
</li>
<li><p>빌드 자동화 도구 유용</p>
</li>
</ul>
</li>
</ul>
<p>Ant, Make, Maven, Gradle, Jenkins</p>
<h3 id="heading-jenkins">- Jenkins</h3>
<p><strong>자바</strong> 기반 오픈소스</p>
<ul>
<li><p><strong>서블릿 컨테이너</strong>에서 실행되는 서버 기반 도구</p>
</li>
<li><p><strong>형상관리 도구와 연동</strong> 가능, Web UI 제공</p>
</li>
<li><p><strong>분산 빌드, 테스트</strong> 가능</p>
</li>
</ul>
<h3 id="heading-gradle">- Gradle</h3>
<p><strong>Groovy</strong> 기반 오픈소스</p>
<ul>
<li><p>Groovy로 만든 **DSL(Domain Specific Language)**를 스크립트 언어로 사용</p>
</li>
<li><p>실행 명령을 모아 <strong>태스크</strong>로 만든 후, 태스크 단위로 실행</p>
</li>
<li><p><strong>빌드 캐시</strong>: 태스크 재사용 / 다른 시스템의 태스크 공유</p>
</li>
</ul>
<h1 id="heading-4-10">4. 애플리케이션 테스트</h1>
<h2 id="heading-1-9">1) 애플리케이션 테스트</h2>
<p>잠재 결함을 찾아내는 일련의 행위<br />→ 요구사항 만족 여부 확인, 기능 수행 검증 (명세서에 맞는지)</p>
<h2 id="heading-2-8">2) 테스트 관련 용어</h2>
<ul>
<li><p><strong>결함 집중(Defect Clustering)</strong>: 대부분의 결함이 소수의 특정 모듈에 집중해서 발생</p>
</li>
<li><p><strong>파레토 법칙</strong>: 80%의 오류는 20% 모듈에서 발견 → 20% 모듈을 집중적으로 테스트하자</p>
</li>
<li><p><strong>살충제 패러독스</strong>: 살충제 내성</p>
</li>
<li><p><strong>오류 부재의 궤변</strong>: 결함이 없어도 요구사항 불만족 시 품질이 낮은 것</p>
</li>
</ul>
<h2 id="heading-3-8">3) 실행 여부에 따른 분류</h2>
<ul>
<li><p><strong>정적 테스트</strong></p>
<ul>
<li><p>프로그램 <strong>실행 없이 명세서, 소스 코드를 대상</strong>으로</p>
</li>
<li><p><strong>개발 초기 결함</strong> 발견 가능 → <strong>비용 ↓</strong></p>
</li>
<li><p>ex) <strong>워크스루, 인스펙션, 코드 검사</strong></p>
</li>
</ul>
</li>
<li><p><strong>동적 테스트</strong></p>
<ul>
<li><p><strong>실행해서</strong> 하는 테스트</p>
</li>
<li><p>소프트웨어 개발 <strong>모든 단계</strong>에서 수행 가능</p>
</li>
<li><p>ex) <strong>블랙박스, 화이트박스</strong></p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-4-11">4) 테스트 기반에 따른 분류</h2>
<ul>
<li><p><strong>명세 기반 테스트</strong>: 명세 빠진 것 없는지</p>
<ul>
<li>ex) 동등 분할, 경계 값 분석</li>
</ul>
</li>
<li><p><strong>구조 기반</strong> 테스트: SW 내부 논리 흐름에 따라 <em>테스트 케이스</em> 작성 후 확인</p>
<ul>
<li>ex) 구문/결정/조건 기반</li>
</ul>
</li>
<li><p><strong>경험</strong> 기반 테스트: <em>테스터의 경험 기반</em>, 명세/시간이 충분하지 않을 때</p>
<ul>
<li>ex) 에러 추정, 체크리스트, 탐색적 테스팅</li>
</ul>
</li>
</ul>
<h2 id="heading-5-6">5) 시각에 따른 분류</h2>
<ul>
<li><p><strong>검증 테스트</strong></p>
<ul>
<li><strong>개발자의 시각</strong>에서, 명세서 일치 여부</li>
</ul>
</li>
<li><p><strong>확인 테스트</strong></p>
<ul>
<li><strong>사용자의 시각</strong>에서, 요구한대로 완성됐는지</li>
</ul>
</li>
</ul>
<h2 id="heading-6-6">6) 목적에 따른 분류</h2>
<ul>
<li><p>회복 테스트: 시스템에 결함을 주어 실패 유도 → 올바르게 복구되는지</p>
</li>
<li><p>안전 테스트: 시스템 보호 도구가 침입에 대응을 잘 하는지</p>
</li>
<li><p>강도 테스트: 과부하 확인</p>
</li>
<li><p>성능 테스트</p>
</li>
<li><p>구조 테스트: SW 내부 논리, 소스 코드의 복잡도</p>
</li>
<li><p>회귀 테스트: 변경/수정 사항의 결함</p>
</li>
<li><p>병행 테스트: 변경된 SW와 기존 SW에 동일한 인풋 → 결과 비교</p>
</li>
</ul>
<h2 id="heading-7-2">7) 화이트박스 테스트</h2>
<p><strong>원시 코드의 논리적인 경로로 테스트 케이스 설계</strong></p>
<ul>
<li><p>모듈 내부 작동 관찰</p>
</li>
<li><p>원시 코드(모듈)의 <strong>모든 문장을 한 번 이상 실행</strong></p>
</li>
<li><p>프로그램 제어 구조에 따라 선택, 반복 등 분기점 부분을 수행 → <strong>논리적 경로</strong> 제어</p>
</li>
</ul>
<h3 id="heading-xc0g7kkf66wy-1">- 종류</h3>
<ul>
<li><p><strong>기초 경로 검사</strong></p>
<ul>
<li><p>가장 대표적</p>
</li>
<li><p>설계자가 논리적 복잡성 측정할 수 있게 해줌</p>
</li>
<li><p>결과는 실행 경로의 기초를 정의하는 지침으로 사용</p>
</li>
</ul>
</li>
<li><p><strong>제어 구조 검사</strong></p>
<ul>
<li><p>조건 검사: 논리적 조건</p>
</li>
<li><p>루프 검사: 반복 구조</p>
</li>
<li><p>데이터 흐름 검사: 변수</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g6rka7kadioq4soykga">- 검증 기준</h3>
<ul>
<li><p><strong>문장</strong> 검증 기준: 모든 구문이 한 번 이상 수행되도록</p>
</li>
<li><p><strong>분기</strong> 검증 기준: 결정 검증 기준, 모든 조건문 true/false</p>
</li>
<li><p><strong>조건</strong> 검증 기준: 조건문에 포함된 개별 조건식의 결과 true/false</p>
</li>
<li><p><strong>분기/조건</strong> 기준: 분기 + 조건</p>
</li>
</ul>
<h2 id="heading-8">8) 블랙박스 테스트</h2>
<p><strong>각 기능의 완전한 작동</strong>을 입증, 기능 테스트</p>
<ul>
<li><p>프로그램 구조 고려 X → <strong>테스트 케이스는 모듈 요구나 명세를 기초</strong>로 결정</p>
</li>
<li><p>소프트웨어 인터페이스에서 실시</p>
</li>
<li><p>부정확/누락된 기능, 인터페이스 오류, 자료 구조나 외부 DB 접근에 따른 오류, 행위/성능 오류, 초기화 종료 오류 등을 발견하기 위해 사용</p>
</li>
<li><p>테스트 과정의 후반부</p>
</li>
</ul>
<h3 id="heading-xc0g7kkf66wy-2">- 종류</h3>
<ul>
<li><p><strong>동치 분할 검사</strong></p>
<ul>
<li><p>동치 클래스 분해, 동등 분할 기법</p>
</li>
<li><p><strong>입력 자료</strong>에 초점을 맞춰 테스트 케이스를 만들어 검사</p>
</li>
<li><p>타당한 입력, 타당하지 않은 입력 자료의 개수를 균등하게 배분</p>
</li>
</ul>
</li>
<li><p><strong>경계값 분석</strong></p>
<ul>
<li><p>입력자료에만 치중한 동치 분할 기법을 보완</p>
</li>
<li><p>입력 조건의 중간값보다 경계값에서 오류가 발생할 확률이 높음 → <strong>경계값을 테스트 케이스</strong>로 선정</p>
</li>
</ul>
</li>
<li><p><strong>원인-효과 그래프 검사</strong></p>
<ul>
<li>입출력 상황 분석 → <strong>효용성이 높은 테스트케이스</strong>를 선정하여 검사</li>
</ul>
</li>
<li><p><strong>오류 예측 검사</strong></p>
<ul>
<li><p>과거의 경험이나 확인자의 감각으로 테스트</p>
</li>
<li><p>보충적 검사 기법</p>
</li>
<li><p>데이터 확인 검사</p>
</li>
</ul>
</li>
<li><p><strong>비교 검사</strong></p>
<ul>
<li>여러 버전의 프로그램에 동일한 테스트 자료를 제공 → 동일 결과 출력되는지</li>
</ul>
</li>
</ul>
<h2 id="heading-9">9) 개발 단계에 따른 애플리케이션 테스트</h2>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/3c3dda83-ddc1-42bf-b957-5ee111a70ac6/image.png" alt="app_test" /></p>
<h3 id="heading-unit-test">- 단위 테스트(Unit Test)</h3>
<p>코딩 직후 모듈, 컴포넌트 초점 테스트</p>
<ul>
<li><p>인터페이스, 외부적 I/O, 자료 구조, 독립적 기초 경로, 오류 처리 경로, 경계 조건 검사</p>
</li>
<li><p>사용자의 요구사항을 기반으로 한 기능성 테스트를 우선적으로</p>
</li>
<li><p>(주로)구조 기반 테스트 cf) 명세 기반 테스트</p>
</li>
<li><p>발견 가능한 오류: 알고리즘 오류, 탈출구 없는 반복문, 틀린 수식</p>
</li>
</ul>
<h3 id="heading-integration-test">- 통합 테스트(Integration Test)</h3>
<p>단위 테스트가 완료된 모듈을 결합, 하나의 시스템으로 완성시키는 테스트</p>
<ul>
<li><p>비점진적 통합 방식</p>
<ul>
<li><p>단계적 통합 절차 없이 모두 결합된 프로그램 전체를 테스트</p>
</li>
<li><p>빅뱅 통합 테스트 방식</p>
</li>
<li><p>소규모 SW, 단시간</p>
</li>
<li><p>오류 발견 및 장애 위치 파악, 수정이 어려움</p>
</li>
</ul>
</li>
<li><p>점진적 통합 방식</p>
<ul>
<li><p>모듈 단위로 단계적으로 통합하면서 테스트</p>
</li>
<li><p>하향식, 상향식, 혼합식</p>
</li>
<li><p>오류 수정 용이, 인터페이스 연관 오류 테스트 가능성 높음</p>
</li>
</ul>
</li>
</ul>
<h4 id="heading-gt-57">&gt; 하향식 통합 테스트</h4>
<p>상위 모듈에서 하위 모듈로 통합</p>
<ul>
<li><p>깊이 우선 통합법, 넓이 우선 통합법</p>
</li>
<li><p>테스트 초기부터 사용자에게 시스템 구조를 보여줄 수 있다</p>
</li>
<li><p>상위 모듈에서 테스트 케이스 사용하기 어려움</p>
</li>
</ul>
<h4 id="heading-gt-58">&gt; 상향식 통합 테스트</h4>
<p>하위 → 상위 모듈</p>
<ul>
<li>스텁은 필요하지 않지만, 한 주요 제어모듈과 관련된 종속 모듈의 그룹인 클러스터가 필요</li>
</ul>
<h4 id="heading-gt-59">&gt; 테스트 드라이버와 테스트 스텁</h4>
<ul>
<li><p>드라이버</p>
<ul>
<li><p>하위 모듈 호출 도구 / 매개 변수를 전달하고 테스트 결과 도출</p>
</li>
<li><p>상위 모듈 없이 하위 모듈이 있는 경우</p>
</li>
<li><p>상향식 테스트</p>
</li>
</ul>
</li>
<li><p>스텁</p>
<ul>
<li><p>제어 모듈이 호출하는 타 모듈의 기능을 단순히 수행 / 일시적 조건만 가지는 테스트용 모듈</p>
</li>
<li><p>상위 모듈은 있는데 하위 모듈이 없는 경우</p>
</li>
<li><p>하향식 테스트</p>
</li>
</ul>
</li>
<li><p>공통점과 차이점</p>
<ul>
<li><p>공통점: 소프트웨어 개발, 테스트 병행 시 이용</p>
</li>
<li><p>차이점</p>
<ul>
<li><p>드라이버</p>
<ul>
<li><p>존재하는 하위 모듈과 존재하지 않는 상위 모듈 간의 인터페이스 역할</p>
</li>
<li><p>개발 완료 시 드라이버는 본래 모듈로 교체</p>
</li>
</ul>
</li>
<li><p>스텁</p>
<ul>
<li><p>가짜 모듈, 임시 모듈</p>
</li>
<li><p>시험용 모듈이기 때문에 드라이버보다 작성 쉬움</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7iuc7iqk7ywcio2fjoykpo2kua">- 시스템 테스트</h3>
<p>개발된 SW가 해당 컴퓨터에서 완벽히 수행되는가</p>
<ul>
<li><p>실제 사용 환경과 유사한 환경 만들어야 함</p>
</li>
<li><p>기능적/비기능적 요구사항을 모두 만족하는지</p>
</li>
</ul>
<h3 id="heading-xc0g7j247iiyio2fjoykpo2kua">- 인수 테스트</h3>
<p>사용자의 요구사항 충족 여부</p>
<ul>
<li><p>사용자가 직접 테스트</p>
</li>
<li><p>문제가 없으면 사용자는 SW를 인수 → 프로젝트 종료</p>
</li>
<li><p>알파 테스트: 개발자 앞에서, 통제된 환경, 오류/문제점을 사용자와 개발자가 함께 확인</p>
</li>
<li><p>베타 테스트: 선정된 유저가 여러 사용자 앞에서. 필드 테스팅. 제어되지 않은 환경</p>
</li>
</ul>
<h2 id="heading-10-1">10) 회귀 테스팅</h2>
<p>테스트된 프로그램의 테스팅을 반복<br />통합 테스트로 인해 변경된 모듈이나 컴포넌트의 새로운 오류를 확인</p>
<ul>
<li><p>수정 부분 때문에 새로운 오류를 발생하지 않음을 보증하기 위해</p>
</li>
<li><p>변경 부분을 테스트할 수 있는 케이스만 선정하여 수행</p>
</li>
</ul>
<h2 id="heading-11">11) 애플리케이션 테스트 프로세스</h2>
<p>순서</p>
<ul>
<li><p>테스트 계획: 명세서 등을 기반으로 테스트 목표, 대상, 범위 결정</p>
</li>
<li><p>테스트 분석 및 디자인</p>
</li>
<li><p>테스트 케이스 및 시나리오 작성</p>
</li>
<li><p>테스트 수행</p>
</li>
<li><p>테스트 결과 평가 및 리포팅</p>
</li>
<li><p>결함 추적 관리</p>
</li>
</ul>
<h2 id="heading-12">12) 테스트 케이스</h2>
<p>요구사항 준수 여부 확인을 위해 설계된 <strong>테스트 항목 명세서</strong><br /><strong>입력값, 실행 조건, 기대 결과</strong><br />→ <strong>명세 기반 테스트</strong>의 설계 산출물</p>
<ul>
<li><p>테스트 오류 방지, 인력/시간 ↓</p>
</li>
<li><p>테스트 <strong>목표, 방법 설정 후 작성</strong></p>
</li>
<li><p><strong>시스템 설계 단계</strong>에서 작성하는 것이 이상적</p>
</li>
</ul>
<h3 id="heading-xc0g7ywm7iqk7yq4ioylnoucmoumroyypa">- 테스트 시나리오</h3>
<p>테스트 케이스 적용 <strong>순서에 따라 묶음</strong> 집합<br />테스트 케이스를 적용하는 구체적인 절차 명세<br />→ 절차, 조건, 입력 데이터 등</p>
<h3 id="heading-xc0g7ywm7iqk7yq4ioyypoudvo2bta">- 테스트 오라클</h3>
<p>테스트 결과가 올바른지 판단하기 위해 <strong>정의된 참 값을 대입하여 비교</strong></p>
<h4 id="heading-gt-60">&gt; 종류</h4>
<ul>
<li><p>참 오라클: 모든 테스트 케이스의 기대값 제공, 발생된 모든 오류 검출 가능</p>
</li>
<li><p>샘플링 오라클: 특정한 몇몇 케이스만</p>
</li>
<li><p>추정 오라클: 샘플링 오라클 개선, 몇 개는 결과 제공, 나머지는 추정</p>
</li>
<li><p>일관성 검사 오라클: 앱 변동 시 전후 결과값 동일한지 확인</p>
</li>
</ul>
<h2 id="heading-13">13) 테스트 자동화 도구</h2>
<p>사람이 하던 걸 스크립트 형태의 자동화 도구 시킴</p>
<h3 id="heading-xc0g7jyg7ziv">- 유형</h3>
<ul>
<li><p>정적 분석 도구: 프로그램 실행 X, 소스 코드의 코딩 표준, 스타일, 복잡도 등을 발견</p>
</li>
<li><p>테스트 케이스 생성 도구</p>
<ul>
<li><p>자료 흐름도: 자료 원시 프로그램 입력 → 파싱 → 자료 흐름도 작성</p>
</li>
<li><p>기능 테스트: 기능 구동의 모든 가능한 상태를 파악하여 입력 작성</p>
</li>
<li><p>입력 도메인 분석: 코드 내부 말고 입력 변수 도메인 분석해서 테스트 데이터 만듦</p>
</li>
<li><p>랜덤 테스트: 입력 값 무작위 추출</p>
</li>
</ul>
</li>
<li><p>테스트 실행 도구: 데이터/수행방법 등이 포함된 스크립트</p>
<ul>
<li><p>데이터 주도 접근 방식: 스프레드 시트에 데이터 저장</p>
</li>
<li><p>키워드 주도 접근 방식: 스프레드 시트에 동작 키워드와 테스트 데이터 저장</p>
</li>
</ul>
</li>
<li><p>성능 테스트 도구</p>
</li>
<li><p>테스트 통제 도구</p>
<ul>
<li><p>테스트 계획, 관리, 수행, 결함 관리 도구</p>
</li>
<li><p>ex) 형상 관리 도구, 결함/추적 관리 도구</p>
</li>
</ul>
</li>
<li><p>테스트 하네스 도구</p>
<ul>
<li><p>컴포넌트, 모듈 테스트 환경의 한 부분 → 테스트를 위한 코드, 데이터</p>
</li>
<li><p>테스트 실행 환경 시뮬레이션 후 테스트</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7ywm7iqk7yq4io2vmouepoykpoydmcdqtazshleg7jqu7iam">- 테스트 하네스의 구성 요소</h3>
<ul>
<li><p>테스트 드라이버: 하위 모듈 호출, 매개변수 전달, 결과 도출</p>
</li>
<li><p>테스트 스텁: 제어 모듈이 호출하는 타 모듈의 기능만 단순히 수행, 일시적으로 필요한 조건만 충족</p>
</li>
<li><p>테스트 슈트: 테스트 케이스의 집합</p>
</li>
<li><p>테스트 케이스: 입력값, 조건, 기대값</p>
</li>
<li><p>테스트 스크립트: 자동화된 테스트 실행 절차에 대한 명세서</p>
</li>
<li><p>목 오브젝트: 조건 입력하면 그 상황에 맞는 행위 수행</p>
</li>
</ul>
<h2 id="heading-14">14) 결함</h2>
<p>오류, 작동 실패 등 이상 동작<br />→ 기대값/결과 간 차이나 업무 내용과의 불일치도 모두 결함에 해당</p>
<h2 id="heading-15">15) 애플리케이션 성능 분석</h2>
<p>요구한 기능을 최소한의 자원으로 최대한 많이, 신속하게 처리하는 정도</p>
<h3 id="heading-xc0g7isx64qlioy4oeyglsdsp4dtkzw">- 성능 측정 지표</h3>
<ul>
<li><p>처리량</p>
</li>
<li><p>응답 시간: 요청~응답</p>
</li>
<li><p>경과 시간: 작업 의뢰~처리 완료</p>
</li>
<li><p>자원 사용률</p>
</li>
</ul>
<h3 id="heading-big-o-notation">- 빅 오 표기법(Big-O Notation)</h3>
<p>알고리즘 실행시간 최악일 때를 표기하는 방법<br />cf) 오메가 표기법(신뢰성 ↓), 세타 표기법(평가 까다로움)</p>
<ul>
<li><p>O(1)</p>
<ul>
<li><p><strong>입력값(n)에 독립적</strong>으로 문제 해결에 <strong>하나의 단계</strong>만 거침</p>
</li>
<li><p><em>스택의 삽입(push), 삭제(pop)</em></p>
</li>
</ul>
</li>
<li><p>O(log n)</p>
<ul>
<li><p>필요 단계가 <strong>입력값, 조건에 의해 감소</strong></p>
</li>
<li><p><em>이진트리, 이진 검색</em></p>
</li>
</ul>
</li>
<li><p>O(n)</p>
<ul>
<li><p><strong>입력값과 1:1 관계</strong></p>
</li>
<li><p><em>for문</em></p>
</li>
</ul>
</li>
<li><p>O(n log n)</p>
<ul>
<li><p><strong>nlogn번</strong>만큼 수행</p>
</li>
<li><p><em>힙정렬, 합병 정렬</em></p>
</li>
</ul>
</li>
<li><p>O(n^2)</p>
<ul>
<li><em>삽입 정렬, 쉘 정렬, 선택 정렬, 버블 정렬, 퀵 정렬</em></li>
</ul>
</li>
<li><p>O(2^n)</p>
<ul>
<li><strong>피보나치 수열</strong></li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7iic7zmyiouzteyeoeupha">- 순환 복잡도</h3>
<p>한 프로그램의 <strong>논리적 복잡도</strong> 측정<br /><em>맥케이브 순환도, 맥케이브 복잡도 메트릭</em></p>
<ul>
<li>프로그램의 경로의 수 정의 → 모든 경로가 한 번 이상 수행됨을 보장하기 위해 <strong>테스트 횟수 상한선</strong></li>
</ul>
<h4 id="heading-gt-61">&gt; 순환 복잡도 계산</h4>
<p>제어 흐름도 G에서 순환 복잡도 V(G) 계산</p>
<ul>
<li><p>순환 복잡도는 제어흐름도의 영역 수와 일치하므로 영역 수를 계산</p>
</li>
<li><p>V(G) = E - N + 2</p>
<ul>
<li><p>E == 화살표 수</p>
</li>
<li><p>N == 노드 수</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-16">16) 소스 코드 최적화</h2>
<ul>
<li><p>클린 코드</p>
<ul>
<li>단순 명료한 코드, 잘 작성된 코드</li>
</ul>
</li>
<li><p>나쁜 코드(Bad Code)</p>
<ul>
<li><p>로직이 복잡하고 이해하기 어려운 코드</p>
</li>
<li><p>스파게티 코드: 코드 로직이 서로 복잡하게 얽혀있는 코드</p>
</li>
<li><p>외계인 코드: 너무 오래되거나 참고할 게 없어서 유지보수 어려운 코드</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7yg066awioy9loutncdsnphshleg7juq7lmz">- 클린 코드 작성 원칙</h3>
<ul>
<li><p>가독성</p>
</li>
<li><p>단순성: 한 번에 한 가지 처리하도록, 클래스/메소드 등을 최소 단위로 분리</p>
</li>
<li><p>의존성 배제: 코드가 다른 모듈에 미치는 영향을 최소화, 변경 시 다른 부분에 영향이 없도록 작성</p>
</li>
<li><p>중복성 최소화</p>
</li>
<li><p>추상화: 상위 클래스/메소드/함수에서는 간략히 애플리케이션의 특성을 나타내고, 상세 내용은 하위에서 구현</p>
</li>
</ul>
<h2 id="heading-17">17) 소스 코드 품질 분석 도구</h2>
<ul>
<li><p>정적 분석 도구</p>
<ul>
<li><p>실행 X. 코딩 표준이나 스타일, 결함 확인</p>
</li>
<li><p>애플리케이션 초기 결함 찾기 → 완료 시점에서는 품질 검증 차원</p>
</li>
<li><p>자료 흐름, 논리 흐름을 분석 → 비정상적 패턴 찾기</p>
</li>
<li><p>코딩의 복잡도, 모델 의존성, 불일치성 분석</p>
</li>
<li><p>pmd, cppcheck, SonarQube, checkstyle, ccm, cobertura</p>
</li>
</ul>
</li>
<li><p>동적 분석 도구</p>
<ul>
<li><p>실행하여 메모리 누수, 스레드 결함 분석</p>
</li>
<li><p>Avalanche, Valgrind</p>
</li>
</ul>
</li>
</ul>
<h1 id="heading-4-12">4. 인터페이스</h1>
<h2 id="heading-1-eai">1) EAI</h2>
<p>Enterprise Application Integration</p>
<p>기업 내 앱/플랫폼 간 정보 연동 솔루션<br />비즈니스 간 통합, 연계성 증대 → 효율성, 확정성 ↑</p>
<h3 id="heading-xc0g6rws7lavioycoo2ylq">- 구축 유형</h3>
<ul>
<li><p>Point-to-point: 애플리케이션 1:1 연결 / 변경, 재사용 어려움</p>
</li>
<li><p>Hub &amp; Spoke: 중앙 집중형(허브 시스템) / 확장, 유지보수 용이 / 허브 시스템 장애 시 시스템 전체에 영향</p>
</li>
<li><p>Message Bus(ESB 방식): 앱 사이에 미들웨어 / 확장성 ↑, 대용량 처리 가능</p>
</li>
<li><p>Hybrid: Hub&amp;Spoke + Message Bus</p>
<ul>
<li><p>그룹 내에서는 허브 시스템, 그룹 간에는 메시지 버스</p>
</li>
<li><p>필요한 경우 한 가지 방식으로 EAI 구현 가능</p>
</li>
<li><p>데이터 병목 최소화</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-esb">- ESB</h3>
<p>Enterprise Service Bus</p>
<p>애플리케이션 간 연계, 데이터 변환, 웹 서비스 지원 등 표준 기반의 인터페이스를 제공하는 솔루션</p>
<ul>
<li><p>애플리케이션 통합 측면에선 EAI와 유사, 그러나 서비스 중심 통합 지향</p>
</li>
<li><p>애플리케이션과 Loose Coupling 유지 → 범용성을 위해</p>
</li>
<li><p>관리, 보안 유지 쉬움, 높은 품질 지원 가능</p>
</li>
</ul>
<h2 id="heading-2-json">2) JSON</h2>
<p>JavaScript Object Notation</p>
<p>속성-값 쌍, ajax에서 xml 대체</p>
<h2 id="heading-3-xml">3) XML</h2>
<p>eXtensible Markup Language<br />다목적 마크업 언어</p>
<p>HTML이 웹 브라우저에서 상호 호환적이지 못함<br />SGML의 복잡성 해결</p>
<h2 id="heading-4-ajax">4) AJAX</h2>
<p>Asynchronous JavaScript and XML<br />비동기 통신 기술<br />클라이언트-서버 간 XML 데이터를 교환 → 웹 페이지와 자유롭게 상호작용</p>
<h2 id="heading-5-7">5) 인터페이스 보안 기능 적용</h2>
<p>일반적으로 네트워크, 애플리케이션, 데이터베이스 영역에 적용</p>
<ul>
<li><p>네트워크 영역</p>
<ul>
<li><p>인터페이스 송/수신 간 스니핑으로 데이터 탈취 및 변조 위협 때문에 네트워크 트래픽 암호화</p>
</li>
<li><p>IPSec, SSL, S-HTTP 등</p>
<ul>
<li>IPSec: IP Security. IP 패킷 단위의 데이터 보안 프로토콜, 양방향 암호화 지원</li>
</ul>
</li>
</ul>
</li>
<li><p>애플리케이션 영역</p>
<ul>
<li>코드 상 보안 취약점 보완</li>
</ul>
</li>
<li><p>데이터 베이스 영역</p>
<ul>
<li>DB, 스키마, 엔티티 접근 권한 및 프로시저, 트리거 등</li>
</ul>
</li>
</ul>
<h2 id="heading-6-7">6) 데이터 무결성 검사 도구</h2>
<p>시스템 파일 변경 시 관리자에게 알려줌<br />인터페이스 보안 취약점 분석에 사용</p>
<p>백도어 만들거나 시스템 파일에서 발자국 지우는 행위 감지<br />해시 함수로 현재 파일/디렉토리 상태 DB 저장 후 상태 변경 시 알려줌</p>
<p>Tripwire, AIDE, Samhain, Claymore, Slipwire, Fcheck</p>
<h2 id="heading-7-3">7) 인터페이스 구현 검증 도구</h2>
<ul>
<li><p>xUnit</p>
<ul>
<li><p>테스트 코드 반복 줄여주고, 자동화된 예상 결과 제공 → 단위 테스트 프레임워크</p>
</li>
<li><p>JUnit, CppUnit, NUnit, HttpUnit 등</p>
</li>
</ul>
</li>
<li><p>STAF</p>
<ul>
<li><p>서비스 호출, 컴포넌트 재사용 등 다양한 환경 지원</p>
</li>
<li><p>크로스 플랫폼, 분산 소프트웨어 테스트 환경 지원</p>
</li>
<li><p>분산의 경우, 데몬이 테스트 응답 대신, 테스트 완료 시 통합/자동화하여 프로그램 완성</p>
</li>
</ul>
</li>
<li><p>FitNesse</p>
<ul>
<li>웹 기반 테스트 케이스 설계, 실행, 결과 확인 지원</li>
</ul>
</li>
<li><p>NTAF</p>
<ul>
<li><p>FitNesse의 협업 기능 + STAF의 재사용성, 확장성</p>
</li>
<li><p>네이버의 테스트 자동화 프레임워크</p>
</li>
</ul>
</li>
<li><p>Selenium</p>
<ul>
<li>다양한 브라우저, 개발 언어 지원 → 웹 앱 테스트 프레임워크</li>
</ul>
</li>
<li><p>watir: Ruby</p>
</li>
</ul>
<h2 id="heading-8-apm">8) APM</h2>
<p>Application Performance Management/Monitoring</p>
<p>성능 관리를 위해 접속자, 자원 현황, 트랜잭션 수행 내역, 장애 진단 등 다양한 모니터링 도구</p>
<ul>
<li><p>리소스 방식: Nagios, Zabbix, Cacti</p>
</li>
<li><p>엔드투엔드 방식: VisualVM, 제니퍼, 스카우터</p>
</li>
</ul>
<h1 id="heading-1-10">1. 논리 데이터베이스 설계</h1>
<h2 id="heading-1-11">1) 데이터 베이스 설계</h2>
<ul>
<li><p>요구 조건 분석</p>
</li>
<li><p>구현: 목표 DBMS의 DDL(데이터 정의어)로 DB 생성, 트랜잭션 작성</p>
</li>
<li><p>개념적 설계 → 논리적 설계 → 물리적 설계</p>
</li>
</ul>
<h3 id="heading-xc0g6rcc64wq7kcbioyepoqzhcjsojxrs7qg66qo642466eblcdqsjzrhzdtmzqp">- 개념적 설계(정보 모델링, 개념화)</h3>
<p>현실의 추상화</p>
<ul>
<li><p>개념 스키마 모델링, 트랜잭션 모델링</p>
</li>
<li><p><strong>DBMS에 독립적인</strong> ERD, 개념 스키마</p>
</li>
</ul>
<h3 id="heading-xc0g64w866as7kcbioyepoqzhcjrjbdsnbtthlag66qo642466ebkq">- 논리적 설계(데이터 모델링)</h3>
<p><strong>목표 DBMS에 맞는 논리 스키마, 트랜잭션 인터페이스</strong> 설계<br />현실 자료 → 논리적 자료</p>
<ul>
<li><p>데이터 타입(필드), 타입 간 관계로 표현되는 논리적 구조의 데이터로 모델화</p>
</li>
<li><p>개념적 설계는 개념 스키마 설계 단계 → 논리적 설계: 개념스키마 평가/정제</p>
</li>
<li><p>관계형 DB라면 테이블 설계 단계</p>
</li>
</ul>
<h3 id="heading-xc0g66y866as7kcbioyepoqzhcjrjbdsnbtthlag6rws7kgw7zmukq">- 물리적 설계(데이터 구조화)</h3>
<p>목표 DBMS에 맞는 <strong>물리적 구조의 데이터</strong>로 변환</p>
<ul>
<li><p>처리 성능을 위해 DB 파일의 저장 구조 및 액세스 경로 결정</p>
</li>
<li><p>데이터가 컴퓨터에 저장되는 방법 묘사: 저장 레코드의 양식, 순서, 접근 경로, 조회가 집중되는 레코드</p>
</li>
<li><p>고려 사항: 트랜잭션 처리량, 응답 시간, 디스크 용량, 저장 공간 효율화</p>
</li>
</ul>
<h2 id="heading-2-9">2) 데이터 모델</h2>
<p>현실 정보를 단순화, 추상화한 개념적 모형</p>
<h3 id="heading-xc0g6rws7isxioyaloygja">- 구성 요소</h3>
<ul>
<li><p>개체: DB에 표현하려는 것, 현실 세계의 대상체</p>
</li>
<li><p>속성: 데이터의 가장 작은 논리적 단위. 데이터 필드, 항목</p>
</li>
<li><p>관계: 개체 간 관계, 속성 간 논리적 연결</p>
</li>
</ul>
<h3 id="heading-xc0g7zgc7iuc7zwgioyaloygja">- 표시할 요소</h3>
<ul>
<li><p>구조: 개체 타입들 간 관계, 데이터 구조 및 정적 성질을 표현</p>
</li>
<li><p>연산: 실제 데이터 처리 작업에 대한 명세, DB 조작 기본 도구</p>
</li>
<li><p>제약조건</p>
</li>
</ul>
<h2 id="heading-3-e-r">3) E-R 모델</h2>
<p>피터 첸, 대표적인 개념적 데이터 모델</p>
<ul>
<li><p>개체타입(Entity Type), 관계 타입(Relationship Type) 이용</p>
</li>
<li><p>데이터를 개체(Entity), 관계(Relationship), 속성(Attribute)으로 묘사</p>
</li>
<li><p>DBMS 독립적</p>
</li>
<li><p>ERD로 표현, 1:1, 1:N, N:M 등의 관계를 제한없이 표현 가능</p>
</li>
</ul>
<h3 id="heading-erd">- ERD</h3>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/325f2933-cfa4-4056-ae5d-d28fb650a589/image.png" alt="erd" /></p>
<h2 id="heading-4-13">4) 관계형 데이터 모델</h2>
<p>가장 널리 사용됨, 2차원 표(table)를 이용하여 데이터 관계 정의하는 DB 구조</p>
<ul>
<li><p>구성한 테이블을 하나의 DB로 묶고, 속성/테이블 간 관계 설정</p>
</li>
<li><p>PK, FK로 관계 표현</p>
</li>
<li><p>계층 모델, 망 모델을 단순화 시킨 모델</p>
</li>
<li><p>대표적인 언어: SQL</p>
</li>
<li><p>1:1, 1:N, N:M 등의 관계를 제한없이 표현 가능</p>
</li>
</ul>
<h3 id="heading-db-relation">- 관계형 DB의 Relation 구조</h3>
<p>릴레이션 스키마: 테이블의 구조<br />릴레이션 인스턴스: 실제 값</p>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/11869fc1-cc0b-4759-a2c1-de96017e6bb7/image.png" alt="relation" /></p>
<ul>
<li><p>튜플: 각 행, 속성의 모임, (파일 구조)레코드와 같은 의미, 튜플의 수 == 카디널리티 / 기수 / 대응 수</p>
</li>
<li><p>속성: DB 구성의 가장 작은 논리적 단위, (파일 구조)데이터 항목/필드, 개체 특성 기술, 속성의 수 == 디그리, 차수</p>
</li>
<li><p>도메인: 하나의 attribute가 취할 수 있는 같은 타입의 원자값들의 집합, 실제 애트리뷰트 값의 합법 여부를 시스템이 검사하는 데에도 이용</p>
</li>
</ul>
<h3 id="heading-xc0g66a066ci7j207iwy7j2yio2kueynlq">- 릴레이션의 특징</h3>
<ul>
<li><p>한 릴레이션에는 똑같은 튜플 X</p>
</li>
<li><p>튜플 사이 순서 X (서로 순서 바꿔도 상관 없음)</p>
</li>
<li><p>튜플들의 삽입, 삭제로 인해 릴레이션은 시간에 따라 변함</p>
</li>
<li><p>속성 간 순서 X</p>
</li>
<li><p>속성의 명칭은 유니크, 값은 X</p>
</li>
<li><p>튜플 식별을 위해 속성의 부분집합을 key로 설정</p>
</li>
<li><p>속성 값은 원자값</p>
</li>
</ul>
<h3 id="heading-xc0g7ykk">- 키</h3>
<p>조건 만족하는 튜플 찾거나 정렬할 때, 튜플 구분 기준이 되는 애트리뷰트</p>
<ul>
<li><p>후보키: 기본키로 사용가능한 속성, 유일성과 최소성 만족해야</p>
</li>
<li><p>기본키: 후보키 중 선정된 주 키(main key), 중복 불가, 튜플 유니크 구분, not null</p>
</li>
<li><p>대체키: 보조키, 후보키 중 기본키 제외한 것들</p>
</li>
<li><p>슈퍼키: 속성들의 집합으로 구성된 키, 유일성O, 최소성X</p>
</li>
<li><p>외래키</p>
</li>
</ul>
<h2 id="heading-5-8">5) 무결성</h2>
<p>DB 저장 값과 현실 세계의 값이 일치하는 정확성</p>
<ul>
<li><p>개체 무결성(Entity Integrity, 실체 무결성): 기본키는 not null, unique</p>
</li>
<li><p>도메인 무결성(영역 무결성): 속성 값은 도메인에 속한 값이어야함</p>
</li>
<li><p>참조 무결성(Referential): 외래키는 null이거나 참조 릴레이션의 PK → 참조 불가능한 FK 안됨</p>
</li>
<li><p>사용자 정의 무결성: 제약조건 만족</p>
</li>
</ul>
<h2 id="heading-6-8">6) 관계 대수</h2>
<p>RDB에서 원하는 정보 검색을 위한 절차적 언어</p>
<ul>
<li><p>연산자, 규칙을 제공하는 언어 (피연산자 == 릴레이션, 결과도 릴레이션)</p>
</li>
<li><p>연산 순서 명시</p>
</li>
<li><p>순수 관계 연산자, 일반 집합 연산자로 이루어짐</p>
<ul>
<li><p>순수 관계 연산자: SELECT, PROJECT, JOIN, DIVISION</p>
</li>
<li><p>일반 집합 연산자: UNION, INTERSECTION, DIFFERENCE, CARTESIAN PRODUCT</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7iic7iiyioq0goqzhcdsl7dsgrdsnpa">- 순수 관계 연산자</h3>
<ul>
<li><p>Select</p>
<ul>
<li><p>조건 만족 튜플의 부분집합으로 새로운 릴레이션 만듦</p>
</li>
<li><p>수평연산: 릴레이션의 행 추출 / 연산자 기호 == 시그마(σ)</p>
</li>
</ul>
</li>
<li><p>Project</p>
<ul>
<li><p>속성 리스트에 제시된 값만 추출하여 새로운 릴레이션</p>
</li>
<li><p>중복 제거됨</p>
</li>
<li><p>수직연산: 릴레이션의 열 추출 / 연산자 기호 == 파이(π)</p>
</li>
</ul>
</li>
<li><p>Join</p>
<ul>
<li>공통 속성으로 두 개의 릴레이션 하나로 / ▷◁</li>
</ul>
</li>
<li><p>Division</p>
<ul>
<li>X ⊃ Y인 R(X)와 S(Y)가 있을 때, R의 속성이 S의 속성값을 모두 가진 튜플에서 S가 가진 속성을 제외한 속성만을 구하는 연산</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/6920242c-264e-4c18-a825-17ff66729376/image.png" alt="division" /></p>
<h3 id="heading-xc0g7j2867cyioynke2vqsdsl7dsgrdsnpa">- 일반 집합 연산자</h3>
<p>카디널리티(튜플 수), 디그리(속성 수)</p>
<ul>
<li><p>UNION(합집합): 중복 제거 → 합집합의 카디널리티 &lt;= 두 릴레이션 카디널리티의 합</p>
</li>
<li><p>INTERSECTION(교집합)</p>
</li>
<li><p>DIFFERENCE</p>
</li>
<li><p>CARTESIAN PRODUCT(교차곱): 튜플의 순서쌍</p>
<ul>
<li><p>교차곱 디그리 == 두 릴레이션의 디그리의 합</p>
</li>
<li><p>카디널리티 == 두 릴레이션의 카디널리티 곱</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-7-4">7) 관계 해석</h2>
<p>관계 데이터 모델의 제안자 코드(Codd)가 Predicate Calculus(술어 해석)에 기반을 두고 관계형 DB를 위해 제안</p>
<ul>
<li><p>데이터의 연산을 표현, 계산 수식 사용</p>
</li>
<li><p>비절차적 특성: 원하는 정보가 무엇인지만 정의</p>
</li>
<li><p>튜플 관계 해석, 도메인 관계 해석이 있다</p>
</li>
<li><p>관계 해석, 관계 대수는 RDB 기능/능력 면에서 동등</p>
<ul>
<li>관계 대수로 표현한 식은 관계 해석으로 표현할 수 있다</li>
</ul>
</li>
<li><p>질의어로 표현</p>
</li>
<li><p>논리 기호</p>
<ul>
<li><p>∃: 존재한다(하나라도 일치하는 튜플이 있음), 존재정량자</p>
</li>
<li><p>∈: t가 r에 속함( t ∈ r )</p>
</li>
<li><p>∀: 모든 튜플에 대하여(for all), 전칭정량자</p>
</li>
<li><p>∪: 합집합</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-8-1">8) 정규화</h2>
<p>스키마 예쁘게 만들기<br />종속성 이론 활용</p>
<ul>
<li><p>하나의 종속성이 하나의 릴레이션에 표현되게끔 분해</p>
</li>
<li><p>제 1, 2, 3, BCNF, 4, 5 정규형 → 높아질수록 제약조건 늘어남</p>
</li>
<li><p>논리적 설계 단계에서 수행</p>
</li>
<li><p>논리적 처리, 품질에 영향 ↑</p>
</li>
<li><p>데이터의 일관성, 정확성, 단순성, 비중복성, 안정성 보장</p>
</li>
</ul>
<h3 id="heading-xc0g66qp7kcb">- 목적</h3>
<ul>
<li><p>안정성, 무결성 유지</p>
</li>
<li><p>어떤 릴레이션이든 DB 내에서 표현 가능하게</p>
</li>
<li><p>효과적인 검색 알고리즘 생성</p>
</li>
<li><p>데이터 중복 배제 → 이상현상 방지 및 저장공간 최소화</p>
</li>
<li><p>삽입 시 릴레이션 재구성 필요성 ↓</p>
</li>
<li><p>데이터 모형 단순화</p>
</li>
<li><p>속성의 배열상태 검증</p>
</li>
<li><p>개체 속성, 누락여부 확인</p>
</li>
<li><p>자료 검색, 추출의 효율성 추구</p>
</li>
</ul>
<h3 id="heading-anomaly">- 이상(Anomaly)의 개념, 종류</h3>
<p>데이터 중복으로 릴레이션 조작 시 예기치 못한 오류 발생하는 것<br />→ 삽입 이상, 삭제 이상, 갱신 이상</p>
<h3 id="heading-xc0g7kcv6rec7zmuioqzvoyglq">- 정규화 과정</h3>
<ul>
<li><p>비정규 릴레이션</p>
</li>
<li><p>1NF: 도메인이 원자값</p>
</li>
<li><p>2NF: 부분적 함수 종속 제거</p>
</li>
<li><p>3NF: 이행적 함수 종속 제거</p>
</li>
<li><p>BCNF: 결정자이면서 후보키가 아닌 것 제거</p>
</li>
<li><p>4NF: 다치 종속 제거</p>
</li>
<li><p>5NF: 조인 종속성 이용</p>
</li>
</ul>
<p>도부이결다조 ㅋㅋ</p>
<h4 id="heading-gt-62">&gt; 이행적 종속, 함수적 종속</h4>
<ul>
<li><p>이행적 종속: A → B, B → C일 때, A → C인 관계</p>
</li>
<li><p>함수적 종속: 데이터들이 어떤 기준값에 의해 종속되는 것</p>
<ul>
<li><p>수강 릴레이션이 (학번, 이름, 과목명)일 때, 학번이 결정되면 과목명에 상관없이 같은 이름이 대응됨</p>
</li>
<li><p>이 경우, 이름을 학번에 함수 종속적</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g67cy7kcv6rec7zmu">- 반정규화</h3>
<p>시스템 성능 향상, 개발/운영의 편의성을 위해 의도적으로 정규화 원칙 위배</p>
<ul>
<li><p>시스템 성능 향상, 관리 효율성 증가 / 데이터 일관성, 정합성 저하 → 우선순위 정해야함</p>
</li>
<li><p>과도하면 오히려 성능 저하</p>
</li>
<li><p>방법</p>
<ul>
<li><p>테이블 통합</p>
<ul>
<li>매번 JOIN 시 하나로 합치기</li>
</ul>
</li>
<li><p>테이블 분할</p>
<ul>
<li>수평분할, 수직 분할</li>
</ul>
</li>
<li><p>중복 테이블 추가</p>
<ul>
<li><p>여러 테이블, 다른 서버 테이블 이용 시 중복</p>
</li>
<li><p>집계 테이블, 진행 테이블, 특정 부분만 포함하는 테이블</p>
</li>
</ul>
</li>
<li><p>중복 속성 추가 등</p>
<ul>
<li>JOIN 조회 경로 단축 → 자주 사용하는 속성 추가 해버리기</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="heading-9-1">9) 시스템 카탈로그</h2>
<p>시스템 데이터베이스</p>
<ul>
<li><p>DBMS의 사용자, 데이터 객체, 명세 등을 유지관리하는 시스템 테이블</p>
</li>
<li><p>카탈로그는 데이터사전에 저장</p>
</li>
<li><p>시스템 카탈로그에 저장된 정보 == 메타데이터</p>
</li>
<li><p>SQL로 내용 검색 가능</p>
</li>
<li><p>INSERT, DELETE, UPDATE 불가</p>
</li>
<li><p>DB 시스템에 따라 다름</p>
</li>
<li><p>DBMS가 스스로 생성하고 유지</p>
</li>
<li><p>카탈로그의 갱신: 사용자가 SQL로 변화를 주면 시스템이 자동으로 갱신</p>
</li>
<li><p>Data Directory</p>
<ul>
<li><p>데이터 사전에 수록된 데이터에 실제로 접근하는데 필요한 정보를 관리, 유지하는 시스템</p>
</li>
<li><p>시스템 카탈로그는 사용자와 시스템 모두 접근 가능 / 데이터 디렉터리는 시스템만 접근 가능</p>
</li>
</ul>
</li>
</ul>
<h1 id="heading-2-10">2. 물리 데이터베이스 설계</h1>
<h2 id="heading-1-12">1) 트랜잭션</h2>
<p>한꺼번에 모두 수행되어야 할 일련의 연산</p>
<ul>
<li><p>DB 병행 제어 및 회복 작업 시 처리되는 논리적 단위</p>
</li>
<li><p>사용자의 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위</p>
</li>
</ul>
<h3 id="heading-xc0g7iob7yoc">- 상태</h3>
<ul>
<li><p>활동(active): 트랜잭션 실행 중</p>
</li>
<li><p>실패(failed)</p>
</li>
<li><p>철회(aborted): 트랜잭션 비정상 종료 → 롤백 수행한 상태</p>
</li>
<li><p>부분 완료(partially committed): 커밋 직전</p>
</li>
<li><p>완료: 커밋까지 완료</p>
</li>
</ul>
<h3 id="heading-xc0g7yq57isx">- 특성</h3>
<ul>
<li><p>원자성: commit or rollback</p>
</li>
<li><p>일관성: commit 시 언제나 일관성있는 DB 상태 보장</p>
</li>
<li><p>독립성(격리성, 순차성): 한 트랜잭션이 다른 트랜잭션 사이에 끼어들 수 없음</p>
</li>
<li><p>영속성: 시스템이 고장나더라도 영구적 반영</p>
</li>
</ul>
<h2 id="heading-2-crud">2) CRUD 분석</h2>
<p>테이블에 발생하는 트랜잭션 주기별 발생 횟수 파악, 연관된 테이블 분석 → 저장되는 데이터 양 유추 가능</p>
<h2 id="heading-3-9">3) 인덱스</h2>
<p>레코드에 빠르게 접근하기 위해 &lt;키 값, 포인터&gt; 쌍으로 구성되는 데이터 구조</p>
<ul>
<li><p>데이터의 물리적 구조와 밀접, 접근법 제공</p>
</li>
<li><p>빠름</p>
</li>
<li><p>삽입, 삭제가 빈번한 경우 인덱스 개수 최소화</p>
</li>
<li><p>DDL로 CUD 가능</p>
</li>
</ul>
<h3 id="heading-xc0g7j24642x7iqk7j2yioyiheulma">- 인덱스의 종류</h3>
<ul>
<li><p>트리 기반 인덱스: 상용 DBMS에서는 트리 기반 B+ 트리 인덱스 주로 사용</p>
</li>
<li><p>비트맵 인덱스: 컬럼 데이터를 bit 값인 0, 1로 변환하여 인덱스 키로 사용</p>
</li>
<li><p>함수 기반 인덱스: 컬럼에 특정 함수를 적용한 값 → B+트리, 비트맵 인덱스 생성 / 부하 발생 가능</p>
</li>
<li><p>비트맵 조인 인덱스: 조인된 객체로 인덱스 → 액세스 방법 상이</p>
</li>
<li><p>도메인 인덱스: custom, 확장된 인덱스</p>
</li>
</ul>
<h2 id="heading-4-14">4) 뷰</h2>
<p>접근 허용된 자료만 제한적으로 보여주는 가상 테이블</p>
<ul>
<li><p>물리적 존재 X, 논리적 독립성 O</p>
</li>
<li><p>데이터 보정, 처리 과정 시험 등 임시 작업 용도 사용 가능</p>
</li>
<li><p>기본 테이블 PK를 포함시켜야 CUD 가능</p>
</li>
</ul>
<h3 id="heading-xc0g7j6l64uo7kcq-1">- 장단점</h3>
<p>장점</p>
<ul>
<li><p>논리적 데이터 독립성</p>
</li>
<li><p>동일 데이터에 대해 동시 접근 가능</p>
</li>
<li><p>데이터 관리 간편</p>
</li>
<li><p>접근 제어를 통한 자동 보안</p>
</li>
</ul>
<p>단점</p>
<ul>
<li><p>독립적 인덱스 X</p>
</li>
<li><p>뷰 정의 변경 X</p>
</li>
<li><p>삽입, 삭제, 갱신에 제약</p>
</li>
</ul>
<h2 id="heading-5-9">5) 파티션</h2>
<p>대용량 테이블, 인덱스를 작은 논리적 단위인 파티션으로 나누는 것</p>
<ul>
<li>중요한 몇 개 테이블에만 집중적으로 데이터 증가 → 분산 시키면 성능 저하 방지, 데이터 관리 쉬워짐</li>
</ul>
<h3 id="heading-xc0g7kkf66wy-3">- 종류</h3>
<ul>
<li><p>범위 분할: 일별, 월별, 분기별</p>
</li>
<li><p>해시 분할: 해시 결과값에 따라 분할 → 범위분할 개선(데이터 고르게 분산)</p>
<ul>
<li><p>특정 데이터가 어디에 있는지 판단 불가</p>
</li>
<li><p>고객번호, 주민번호 등 데이터가 고른 컬럼에 효과적</p>
</li>
</ul>
</li>
<li><p>조합 분할: 범위 분할 후 해시 분할</p>
</li>
<li><p>목록 분할: 특정 열 값에 대한 목록 기준으로 분할</p>
<ul>
<li>한국, 미국, 일본 → 미국 제외 목적으로 아시아 목록 만들기</li>
</ul>
</li>
<li><p>라운드 로빈 분할: 레코드 균일 분배 → 순차적 분배, PK 필요 없음</p>
</li>
</ul>
<h2 id="heading-6-9">6) 분산 데이터베이스</h2>
<p>논리적 하나, 물리적으론 여러 시스템의 데이터베이스</p>
<h3 id="heading-xc0g6rws7isxioyaloygja-1">- 구성 요소</h3>
<ul>
<li><p>분산 처리기: 지리적으로 분산된 컴퓨터 시스템</p>
</li>
<li><p>분산 데이터베이스</p>
</li>
<li><p>통신 네트워크: 분산 처리기를 통신망으로 연결, 하나의 시스템처럼 작동하게끔</p>
</li>
</ul>
<h3 id="heading-xc0g66qp7zgc">- 목표</h3>
<ul>
<li><p>위치 투명성: DB 실제 위치 알 필요 없이 DB 논리적 명칭으로 액세스 가능</p>
</li>
<li><p>중복 투명성: 동일 데이터가 여러곳에 있더라도, 사용자는 마치 하나만 있는 것처럼 사용</p>
</li>
<li><p>병행 투명성: 다수 트랜잭션 동시 실현 시 결과 영향 받지 않음</p>
</li>
<li><p>장애 투명성: 트랜잭션, DBMS, 네트워크, 컴퓨터 장애에도 트랜잭션 정확히 처리</p>
</li>
</ul>
<h3 id="heading-xc0g7j6l64uo7kcq-2">- 장단점</h3>
<ul>
<li><p>장점: 지역 자치성, 자료의 공유성, 분산 제어, 시스템 성능, 중앙 컴퓨터의 장애에 독립적, 효용성/융통성, 신뢰성/가용성, 점진적 용량 확장 용이</p>
</li>
<li><p>단점: DBMS 수행 기능 복잡, 설계 까다로움, 개발비용/처리비용/잠재적 오류 증가</p>
</li>
</ul>
<h2 id="heading-7-5">7) 암호화</h2>
<p>암호화, 복호화</p>
<h3 id="heading-xc0g6rcc7j247ykkioyvlo2yucdrsknsi50o67me67ca7ykkkq">- 개인키 암호 방식(비밀키)</h3>
<p>동일한 키로 데이터 암호화/복호화</p>
<ul>
<li><p>대칭 암호방식, 단일키 암호 방식</p>
</li>
<li><p>비밀키는 노출 X</p>
</li>
<li><p>전위 기법, 대체 기법, 대수 기법, 합성 기법(DES, LUCIFER)</p>
</li>
</ul>
<h3 id="heading-xc0g6ro16rcc7ykkioyvlo2yucdrsknsi50">- 공개키 암호 방식</h3>
<p>다른 키로 데이터 암호화/복호화</p>
<ul>
<li><p>공개키는 공개, 비밀키는 비밀</p>
</li>
<li><p>비대칭 암호화 방식, RSA</p>
</li>
</ul>
<h2 id="heading-8-2">8) 접근통제 기술</h2>
<h3 id="heading-xc0g7j6e7j2yioygkeq3vo2gteygna">- 임의 접근통제</h3>
<ul>
<li><p>사용자 신원에 따른 접근 권한</p>
</li>
<li><p>소유자가 권한 지정, 제어</p>
</li>
<li><p>GRANT, REVOKE</p>
</li>
</ul>
<h3 id="heading-xc0g6rcv7kccioygkeq3vo2gteygna">- 강제 접근통제</h3>
<ul>
<li><p>주체, 객체 등급 비교로 접근 권한</p>
</li>
<li><p>시스템이 권한 지정</p>
</li>
<li><p>DB 객체 별 보안 등급 부여, 사용자별 인가 등급 부여 가능</p>
</li>
<li><p>주체는 보안 등급 높은 객체 CRUD 불가, 같은 객체는 CRUD 가능, 낮은 객체는 읽기 가능</p>
</li>
</ul>
<h3 id="heading-xc0g7jet7zwg6riw67cyioygkeq3vo2gteygna">- 역할기반 접근통제</h3>
<ul>
<li><p>사용자 역할에 따라 접근 권한 부여</p>
</li>
<li><p>중앙 관리자가 접근 통제 권한 지정</p>
</li>
<li><p>위 두 개의 단점 보완, 다중 프로그래밍에 최적화된 방식</p>
</li>
<li><p>중앙 관리자가 권한을 부여하면, 사용자들은 역할에 해당하는 권한 사용 가능</p>
</li>
</ul>
<h3 id="heading-xc0g6rcv7kccioygkeq3vo2gteygnoydmcdrs7tslygg66qo6424">- 강제 접근통제의 보안 모델</h3>
<h4 id="heading-gt-63">&gt; 벨 라파듈라 모델</h4>
<ul>
<li><p>상하관계가 구분된 정보 보호</p>
</li>
<li><p>보안 취급자 등급 기준으로 읽/쓰 권한 제한</p>
</li>
<li><p>본인의 보안 레벨 이상의 문서 작성 가능, 이하 문서 읽기 가능</p>
</li>
</ul>
<h4 id="heading-gt-64">&gt; 비바 무결성 모델</h4>
<ul>
<li><p>벨 라파듈라 모델 보완, 무결성을 보완하는 최초의 모델</p>
</li>
<li><p>비인가자의 데이터 변형 방지</p>
</li>
</ul>
<h4 id="heading-gt-65">&gt; 클락-윌슨 무결성 모델</h4>
<ul>
<li><p>무결성 중심의 상업용 모델</p>
</li>
<li><p>사용자의 직접적인 객체 접근 불가, 프로그램에 의해 접근 가능</p>
</li>
</ul>
<h4 id="heading-gt-66">&gt; 만리장성 모델</h4>
<ul>
<li>이해 충돌 관계의 객체간 정보 접근을 통제</li>
</ul>
<h2 id="heading-9-2">9) 서버-저장장치 연결 방식</h2>
<h3 id="heading-dasdirect-attached-storage">- DAS(Direct Attached Storage)</h3>
<p>서버와 저장장치를 케이블로 직접 연결<br />(컴퓨터에 외장하드 연결하기)</p>
<ul>
<li><p>서버에서 저장장치 관리</p>
</li>
<li><p>속도 빠르고 설치, 운영 쉬움</p>
</li>
<li><p>초기 구축, 유지보수 저렴</p>
</li>
<li><p>직접 연결이므로 다른 서버 접근, 공유 불가</p>
</li>
<li><p>확장성, 유연성 ↓</p>
</li>
<li><p>저장 데이터가 적고 공유 필요 없는 환경</p>
</li>
</ul>
<h3 id="heading-nasnetwork-attached-storage">- NAS(Network Attached Storage)</h3>
<p>네트워크로 연결</p>
<ul>
<li><p>NAS Storage가 내장된 저장장치 관리</p>
</li>
<li><p>Ethernet 스위치로 다른 서버에서 접근 가능</p>
</li>
<li><p>DAS에 비해 확장성, 유연성 ↑</p>
</li>
<li><p>접속 증가 시 성능 저하</p>
</li>
</ul>
<h3 id="heading-sanstorage-area-network">- SAN(Storage Area Network)</h3>
<p>DAS(빠름) + NAS(파일 공유)<br />서버-저장장치 연결 네트워크 별도 구성</p>
<ul>
<li><p>광 채널(FC) 스위치로 네트워크 구성 → 속도 빠름</p>
</li>
<li><p>저장장치 공유 → 여러 장비 단일화 가능</p>
</li>
<li><p>확장성, 유연성, 가용성 ↑</p>
</li>
<li><p>높은 트랜잭션 처리에 효과적</p>
</li>
<li><p>기존 시스템 장비 업그레이드 필요, 초기 설치 시 네트워크 구축 비용</p>
</li>
</ul>
<h1 id="heading-3-sql">3. SQL 응용</h1>
<h2 id="heading-1-ddl">1) DDL(데이터 정의어)</h2>
<p>SCHEMA, DOMAIN, TABLE, VIEW, INDEX 정의, 변경, 삭제</p>
<ul>
<li><p>논리적/물리적 DB의 구조와 사상 정의</p>
</li>
<li><p>DB 관리자, 설계자가 사용</p>
</li>
<li><p>CREATE, ALTER, DROP</p>
</li>
</ul>
<h3 id="heading-create-table">- CREATE TABLE</h3>
<pre><code class="lang-sql"><span class="hljs-keyword">CREATE</span> <span class="hljs-keyword">TABLE</span> 테이블명
    (속성명 데이터타입 [<span class="hljs-keyword">DEFAULT</span> 기본값] [<span class="hljs-keyword">NOT</span> <span class="hljs-literal">NULL</span>], ...)
</code></pre>
<ul>
<li><p>PRIMARY KEY</p>
</li>
<li><p>UNIQUE</p>
</li>
<li><p>FOREIGN KEY ~ REFERENCES ~</p>
<ul>
<li>ON DELETE, ON UPDATE</li>
</ul>
</li>
<li><p>CONSTRAINT</p>
</li>
<li><p>CHECK</p>
</li>
</ul>
<h3 id="heading-alter-table">- ALTER TABLE</h3>
<pre><code class="lang-sql"><span class="hljs-keyword">ALTER</span> <span class="hljs-keyword">TABLE</span> 테이블명
    <span class="hljs-keyword">ADD</span> 속성명 타입
    <span class="hljs-keyword">ALTER</span> 속성명
    <span class="hljs-keyword">DROP</span> <span class="hljs-keyword">COLUMN</span> 속성명
</code></pre>
<h3 id="heading-drop">- DROP</h3>
<pre><code class="lang-sql"><span class="hljs-keyword">DROP</span> <span class="hljs-keyword">SCHEMA</span>, <span class="hljs-keyword">DOMAIN</span>, <span class="hljs-keyword">TABLE</span>, <span class="hljs-keyword">VIEW</span>, <span class="hljs-keyword">INDEX</span>, <span class="hljs-keyword">CONSTRAINT</span> [<span class="hljs-keyword">CASCADE</span> | RESTRICT]
</code></pre>
<ul>
<li><p>CASCADE: 참조 개체 함께 제거</p>
</li>
<li><p>RESTRICT: 참조 중이면 제거 취소</p>
</li>
</ul>
<p>DROP TABLE 학생 CASCADE;</p>
<h2 id="heading-2-dml">2) DML(데이터 조작어)</h2>
<p>데이터 실질적 처리<br />SELECT, INSERT, DELETE, UPDATE</p>
<h3 id="heading-insert-into-values">- INSERT INTO 테이블명 ~ VALUES</h3>
<pre><code class="lang-sql"><span class="hljs-keyword">INSERT</span> <span class="hljs-keyword">INTO</span> 편집부원(이름, 생일, 주소, 기본급)
<span class="hljs-keyword">SELECT</span> 이름, 생일, 주소 기본급
<span class="hljs-keyword">FROM</span> 사원
<span class="hljs-keyword">WHERE</span> 부서 = <span class="hljs-string">"편집"</span>;
</code></pre>
<h3 id="heading-delete-from">- DELETE FROM ~</h3>
<p>cf) DROP</p>
<h3 id="heading-update-set">- UPDATE 테이블 ~ SET</h3>
<h3 id="heading-select">- SELECT</h3>
<ul>
<li>PREDICATE: ALL, DISTINCT(중복 시 첫번째 한 개만), DISTICNTROW(중복 제거, 튜플 전체 대상)</li>
</ul>
<h2 id="heading-3-dcl">3) DCL(데이터 제어어)</h2>
<p>보안, 무결성, 회복, 병행 수행 제어 등<br />COMMIT, ROLLBACK, GRANT, REVOKE, SAVEPOINT</p>
<h3 id="heading-grant-revoke">- GRANT, REVOKE</h3>
<h4 id="heading-gt-67">&gt; 사용자 등급</h4>
<pre><code class="lang-sql"><span class="hljs-keyword">GRANT</span> 사용자등급 <span class="hljs-keyword">TO</span> 사용자_ID_리스트 [<span class="hljs-keyword">IDENTIFIED</span> <span class="hljs-keyword">BY</span> 암호];

<span class="hljs-comment">-- DB, 테이블 생성 권한</span>
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">RESOURCE</span> <span class="hljs-keyword">TO</span> NABI;

<span class="hljs-comment">-- 검색 권한</span>
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">CONNECT</span> <span class="hljs-keyword">TO</span> STAR;

<span class="hljs-keyword">REVOKE</span> 사용자등급 <span class="hljs-keyword">FROM</span> 사용자_ID_리스트;
</code></pre>
<h4 id="heading-gt-68">&gt; 테이블 권한 부여 및 취소</h4>
<pre><code class="lang-sql"><span class="hljs-keyword">GRANT</span> 권한_리스트 <span class="hljs-keyword">ON</span> 개체 <span class="hljs-keyword">TO</span> 사용자 [<span class="hljs-keyword">WITH</span> <span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">OPTION</span>];
<span class="hljs-keyword">REVOKE</span> [<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">OPTION</span> <span class="hljs-keyword">FOR</span>] 권한 리스트 <span class="hljs-keyword">ON</span> 개체 <span class="hljs-keyword">FROM</span> 사용자 [<span class="hljs-keyword">CASCADE</span>];
</code></pre>
<ul>
<li><p>권한 종류: ALL, SELECT, INSERT, DELETE, UPDATE, ALTER 등</p>
</li>
<li><p>WITH GRANT OPTION: 권한 부여 권한 주기</p>
</li>
<li><p>GRANT OPTION FOR: 권한 부여 권한 취소</p>
</li>
<li><p>CASCADE: 연쇄적 권한 취소</p>
</li>
</ul>
<pre><code class="lang-sql"><span class="hljs-comment">-- 권한 부여 권한</span>
<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> <span class="hljs-keyword">ON</span> 고객 <span class="hljs-keyword">TO</span> NABI <span class="hljs-keyword">WITH</span> <span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">OPTION</span>;

<span class="hljs-comment">-- update 권한 부여 권한만 취소</span>
<span class="hljs-keyword">REVOKE</span> <span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">OPTION</span> <span class="hljs-keyword">FOR</span> <span class="hljs-keyword">UPDATE</span> <span class="hljs-keyword">ON</span> 고객 <span class="hljs-keyword">FROM</span> STAR;
</code></pre>
<h3 id="heading-commit">- COMMIT</h3>
<p>일관성을 위해 변경 내역 반영<br />auto commit</p>
<h3 id="heading-rollback">- ROLLBACK</h3>
<h2 id="heading-4-15">4) 조건 연산자 / 우선순위</h2>
<ul>
<li><p>조건 연산자</p>
<ul>
<li><p>비교 연산자: =, &lt;&gt;, &gt;, &lt; ...</p>
</li>
<li><p>논리 연산자: NOT, AND, OR</p>
</li>
<li><p>LIKE 연산자: %(모든 문자), _(문자 하나), #(숫자 하나)</p>
</li>
</ul>
</li>
<li><p>우선 순위: 산술 → 관계 → 논리</p>
</li>
</ul>
<h2 id="heading-5-10">5) 하위 질의</h2>
<p>조건절에 주어진 질의를 먼저 수행 → 그 검색 결과를 조건절 피연산자로 활용</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> 이름, 주소
<span class="hljs-keyword">FROM</span> 사원
<span class="hljs-keyword">WHERE</span> 이름 = (<span class="hljs-keyword">SELECT</span> <span class="hljs-keyword">FROM</span> 여가활동 <span class="hljs-keyword">WHERE</span> 취미 = <span class="hljs-string">'나이트 댄스'</span>);

<span class="hljs-keyword">SELECT</span> 부서
<span class="hljs-keyword">FROM</span> 사원
<span class="hljs-keyword">WHERE</span> <span class="hljs-keyword">EXISTS</span> (<span class="hljs-keyword">SELECT</span> 이름 <span class="hljs-keyword">FROM</span> 여가활동 <span class="hljs-keyword">WHERE</span> 여가활동.이름 = 사원.이름);
</code></pre>
<h2 id="heading-6-select-2-window-group-by-having">6) SELECT 2: WINDOW, GROUP BY, HAVING</h2>
<p>WINDOW 함수</p>
<ul>
<li><p>GROUP BY 절을 이용하지 않고 속성 값 집계</p>
<ul>
<li><p>PARTITION BY: 적용 범위</p>
</li>
<li><p>ORDER BY: 정렬 기준</p>
</li>
</ul>
</li>
</ul>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> 부서, <span class="hljs-keyword">COUNT</span>(*) <span class="hljs-keyword">AS</span> 사원 수
<span class="hljs-keyword">FROM</span> 상여금
<span class="hljs-keyword">WHERE</span> 상여금 &gt;= <span class="hljs-number">100</span>
<span class="hljs-keyword">GROUP</span> <span class="hljs-keyword">BY</span> 부서
<span class="hljs-keyword">HAVING</span> <span class="hljs-keyword">COUNT</span>(*) &gt;= <span class="hljs-number">2</span>;
</code></pre>
<h3 id="heading-xc0g6re466o5io2vqoyima">- 그룹 함수</h3>
<p>STDDEV(표준편차), VARIANC(분산)</p>
<h2 id="heading-7-6">7) 집합 연산자를 이용한 통합 질의</h2>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> ~ <span class="hljs-keyword">FROM</span> ~

<span class="hljs-keyword">UNION</span> | <span class="hljs-keyword">UNION</span> <span class="hljs-keyword">ALL</span> | <span class="hljs-keyword">INTERSECT</span>(교) | <span class="hljs-keyword">EXCEPT</span>(차)

<span class="hljs-keyword">SELECT</span> ~ <span class="hljs-keyword">FROM</span> ~
</code></pre>
<ul>
<li>SELECT 속성 개수, 타입 똑같아야 함</li>
</ul>
<h2 id="heading-8-inner-join">8) INNER JOIN</h2>
<p>조건 없는 INNER JOIN 수행 시 CROSS JOIN과 동일 결과</p>
<ul>
<li><p>EQUI JOIN: 공통속성 기준 조인</p>
<ul>
<li><p>WHERE, NATURAL JOIN, JOIN ~ USING</p>
</li>
<li><p>FROM 학생 NATURAL JOIN 학과</p>
</li>
<li><p>FROM 학생 JOIN 학과 USING(학과코드)</p>
</li>
</ul>
</li>
</ul>
<h1 id="heading-4-sql">4. SQL 활용</h1>
<h2 id="heading-1-13">1) 트리거</h2>
<p>CUD 이벤트마다 자동 수행하는 절차형 SQL</p>
<ul>
<li><p>DB에 저장, 데이터 변경/무결성 유지, 로그 목적</p>
</li>
<li><p>DCL 사용 불가, DCL 포함된 프로지서/함수도 사용 불가</p>
</li>
</ul>
<h2 id="heading-2-dbms">2) DBMS 접속 기술</h2>
<p>프레임워크</p>
<h3 id="heading-jdbc">- JDBC</h3>
<p>Java DataBase Connectivity<br />자바 표준, 썬 마이크로시스템, 드라이버 필요</p>
<h3 id="heading-odbc">- ODBC</h3>
<ul>
<li><p>Open DataBase Connectivity</p>
</li>
<li><p>표준 개방형 API, 언어 독립적, 마이크로소프트</p>
</li>
<li><p>드라이버는 필요 하지만 odbc 문장으로 sql 작성 시 드라이버 관리자가 DBMS 인터페이스에 맞게 연결해줌 → DBMS 종류 몰라도 됨</p>
</li>
</ul>
<h3 id="heading-mybatis">- MyBatis</h3>
<ul>
<li><p>JDBC 단순화, SQL Mapping 기반 오픈소스 접속 프레임워크</p>
</li>
<li><p>XML, Mapping, SQL 실행</p>
</li>
</ul>
<h3 id="heading-orm">- ORM</h3>
<p>객체-DB 데이터 연결</p>
<ul>
<li><p>가상의 객체지향 DB(코드, DB와 독립적) 만들어 코드와 데이터 연결</p>
</li>
<li><p>SQL 직접 입력 X</p>
</li>
</ul>
<h2 id="heading-3-10">3) 쿼리 성능 최적화</h2>
<ul>
<li><p>APM(쿼리 성능 측정 도구)</p>
</li>
<li><p>옵티마이저가 수립한 실행 계획 검토 → SQL 코드, 인덱스 재구성</p>
</li>
</ul>
<h3 id="heading-rbo-vs-cbo">- RBO vs. CBO</h3>
<p>규칙 기반 옵티마이저(Rule Based), 비용 기반 옵티마이저(Cost)</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>기준</td><td>RBO</td><td>CBO</td></tr>
</thead>
<tbody>
<tr>
<td>최적화 기준</td><td>규칙</td><td>액세스 비용</td></tr>
<tr>
<td>성능 기준</td><td>개발자의 SQL 숙련도</td><td>옵티마이저의 예측 성능</td></tr>
<tr>
<td>특징</td><td>실행 계획 예측 쉬움</td><td>복잡</td></tr>
<tr>
<td>고려사항</td><td>개발자의 규칙 이해도, 효율성</td><td>비용 산출 공식의 정확성</td></tr>
</tbody>
</table>
</div><h1 id="heading-5-11">5. 데이터 전환</h1>
<h2 id="heading-1-14">1) 데이터 전환</h2>
<p>기존 저장 데이터 추출 → 새 정보 시스템에서 운영하기 위해 변환, 적재</p>
<ul>
<li><p>ETL(Extraction, Transformation, Load)</p>
</li>
<li><p>데이터 이행(Data Migration), 데이터 이관</p>
</li>
</ul>
<h3 id="heading-xc0g642w7j207yswioqygoymnq">- 데이터 검증</h3>
<p>데이터 전환 과정 검증</p>
<h3 id="heading-xc0g7jik66wyiounsoydto2escdsojxsojw">- 오류 데이터 정제</h3>
<p>오류 관리 목록 분석 → 원천 데이터 정제, 전환 프로그램 수정</p>
<h4 id="heading-gt-69">&gt; 오류 데이터 분석 상태</h4>
<ul>
<li><p>Open: 오류 보고 but 분석 X</p>
</li>
<li><p>Assigned: 개발자에게 전달)</p>
</li>
<li><p>Fixed: 오류 수정</p>
</li>
<li><p>Closed: 수정 후 테스트 통과</p>
</li>
<li><p>Deferred: 오류 수정 연기</p>
</li>
<li><p>Classified: 관련자 확인했을 때 오류가 아니라고 확인됨</p>
</li>
</ul>
<h1 id="heading-1-15">1. 서버 프로그램 구현</h1>
<h2 id="heading-1-batch-program">1) 배치 프로그램(Batch Program)</h2>
<p>상호작용 없이 여러 작업을 일련/일괄적으로 처리</p>
<h3 id="heading-xc0g7zwe7iiyioyaloygja">- 필수 요소</h3>
<ul>
<li><p>대용량 데이터 처리 가능</p>
</li>
<li><p>자동화: 사용자 개입X</p>
</li>
<li><p>견고성: 데이터 이상으로 중단 X</p>
</li>
<li><p>안정성/신뢰성: 오류 추적 가능</p>
</li>
<li><p>성능: 다른 프로그램 방해X, 지정된 시간 내 처리</p>
</li>
</ul>
<h1 id="heading-2-11">2. 프로그래밍 언어 활용</h1>
<h2 id="heading-1-cc">1) C/C++</h2>
<h3 id="heading-xc0g642w7j207yswio2dgoyehsdtgazqulasioq4soywtsdrsptsniq">- 데이터 타입 크기, 기억 범위</h3>
<ul>
<li><p>문자</p>
<ul>
<li><p>char(1)</p>
</li>
<li><p>unsiged char(1)</p>
</li>
</ul>
</li>
<li><p>정수</p>
<ul>
<li><p>short(2)</p>
</li>
<li><p>int(4)</p>
</li>
<li><p>long(4)</p>
</li>
<li><p>long long(8)</p>
</li>
</ul>
</li>
<li><p>실수</p>
<ul>
<li><p>float(4)</p>
</li>
<li><p>double(8)</p>
</li>
<li><p>long double(8)</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g6rws7kgw7lk0">- 구조체</h3>
<p>데이터 집합체, 자료형을 만드는 것<br />struct으로 정의</p>
<pre><code class="lang-c"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">sawon</span> {</span>
    <span class="hljs-keyword">char</span> name[<span class="hljs-number">10</span>];
    <span class="hljs-keyword">char</span> position[<span class="hljs-number">10</span>];
    <span class="hljs-keyword">int</span> pay;
}
</code></pre>
<h2 id="heading-2-java">2) Java</h2>
<h3 id="heading-xc0g642w7j207yswio2dgoyehsdtgazqulasioq4soywtsdrsptsniq-1">- 데이터 타입 크기, 기억 범위</h3>
<ul>
<li><p>논리: boolean(1)</p>
</li>
<li><p>문자: char(2)</p>
</li>
<li><p>정수</p>
<ul>
<li><p>byte 1</p>
</li>
<li><p>short 2</p>
</li>
<li><p>int 4</p>
</li>
<li><p>long 8</p>
</li>
</ul>
</li>
<li><p>실수</p>
<ul>
<li><p>float 4</p>
</li>
<li><p>double 8</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g6rca67me7keaioy9nougie2esa">- 가비지 콜렉터</h3>
<p>선언만 하고 사용하지 않은 메모리 공간 회수</p>
<h2 id="heading-3-python">3) Python</h2>
<h3 id="heading-xc0g7iuc7yca7iqkioyekoujjo2ylq">- 시퀀스 자료형</h3>
<p>값이 연속적으로 이어진 자료형</p>
<ul>
<li><p>List: 다양한 자료형의 값을 연속 저장, 개수 업다운 가능</p>
</li>
<li><p>튜플: 요소의 CUD 불가</p>
</li>
<li><p>range: 연속된 숫자 생성 → 리스트, 반복문에서 사용 가능</p>
</li>
</ul>
<h2 id="heading-4-16">4) 변수</h2>
<h3 id="heading-xc0g6rcc7jqu-2">- 개요</h3>
<p>처리 도중 발생하는 값을 저장하는 공간, 변할 수 있는 값을 의미<br />→ 정수형, 실수형, 문자형, 포인터형</p>
<h3 id="heading-xc0g67oa7iiy66qfioyekeyessdqt5zsuzk">- 변수명 작성 규칙</h3>
<ul>
<li><p>영문자, 숫자, 언더바 가능</p>
</li>
<li><p>첫글자 영문자, 언더바 가능 / 숫자 시작 불가</p>
</li>
<li><p>글자수 제한 없음</p>
</li>
<li><p>공백, 특수문자, 예약어 불가</p>
</li>
<li><p>선언 시 세미콜론</p>
</li>
<li><p>헝가리안 표기법: 변수명에 데이터 타입 명시</p>
</li>
</ul>
<h2 id="heading-5-12">5) 연산자</h2>
<h3 id="heading-xc0g7ikw7iigioyxsoycsoyeka">- 산술 연산자</h3>
<p>++, --</p>
<ul>
<li><p>전치: 변수 값 증감시킨 후 연산에 사용 (++a)</p>
</li>
<li><p>후치: 변수 사용 후 증감 (a++)</p>
</li>
</ul>
<h3 id="heading-xc0g6rsa6roeioyxsoycsoyeka">- 관계 연산자</h3>
<p>거짓 == 0<br />참 == 0 빼고 다</p>
<h3 id="heading-xc0g67me7yq4ioyxsoycsoyeka">- 비트 연산자</h3>
<p>비트별 연산으로 결과 얻기</p>
<ul>
<li><p>&amp; (and): 모든 비트가 1일 때만 1</p>
</li>
<li><p>^ (xor): 모든 비트가 같으면 0, 다르면 1</p>
</li>
<li><p>| (or): 하나라도 1이면 1</p>
</li>
<li><p>~ (not): 각 비트의 부정, 0이면 1 / 1이면 0</p>
</li>
<li><p>&lt;&lt; : 왼쪽으로 이동</p>
</li>
<li><blockquote>
<blockquote>
<p>: 오른쪽으로 이동</p>
</blockquote>
</blockquote>
</li>
</ul>
<h3 id="heading-xc0g64w866asioyxsoycsoyeka">- 논리 연산자</h3>
<h3 id="heading-xc0g64ya7j6fioyxsoycsoyeka">- 대입 연산자</h3>
<h3 id="heading-xc0g7kgw6rg0ioyxsoycsoyeka">- 조건 연산자</h3>
<p>a ? b : c</p>
<h3 id="heading-xc0g7jew7ikw7j6qioyasoyeooyinoychcao64as7j2aioyinck">- 연산자 우선순위 (높은 순)</h3>
<ul>
<li><p>단항 연산자: !, ~(비트 not), ++, --, sizeof</p>
</li>
<li><p>이항 연산자</p>
<ul>
<li><p>산술 연산자: * / %</p>
</li>
<li><p>시프트: + -</p>
</li>
<li><p>관계: &lt;&lt; &gt;&gt;</p>
</li>
<li><p>비트: &lt; &lt;= &gt;= &gt; == !=</p>
</li>
<li><p>논리: &amp; ^ | &amp;&amp; ||</p>
</li>
</ul>
</li>
<li><p>삼항 연산자: 조건 연산자(? :)</p>
</li>
<li><p>대입 연산자</p>
</li>
<li><p>순서 연산자</p>
</li>
</ul>
<h2 id="heading-6-10">6) 입출력</h2>
<h3 id="heading-c">C 언어</h3>
<h4 id="heading-scanf">- scanf(서식 문자열, 변수 주소): 입력</h4>
<blockquote>
<p>scanf("%3d", &amp;a)</p>
</blockquote>
<ul>
<li><p>%: 서식 문자임을 지정</p>
</li>
<li><p>3: 입력자리수 == 3자리</p>
</li>
<li><p>d: 10진수</p>
</li>
<li><p>&amp;: 주소 연산자</p>
</li>
<li><p>&amp;a: 입력 받은 데이터를 a 변수 주소에 저장</p>
</li>
</ul>
<h5 id="heading-gt-70">\&gt; 특징</h5>
<ul>
<li><p>한 번에 여러개 데이터 입력 받을 수 있다.</p>
</li>
<li><p>서식 문자열과 변수의 자료형 일치해야 함</p>
</li>
<li><p>scanf("%d %f", &amp;i, &amp;j);</p>
</li>
</ul>
<h5 id="heading-gt-71">\&gt; 서식 문자열</h5>
<ul>
<li><p>%d: 정수형 10진수</p>
</li>
<li><p>%u: 부호 없는 정수형 10진수</p>
</li>
<li><p>%o: 8진수</p>
</li>
<li><p>%x: 16진수</p>
</li>
<li><p>%c: 문자</p>
</li>
<li><p>%s: 문자열</p>
</li>
<li><p>%f: 소수점을 포함하는 실수</p>
</li>
<li><p>%e: 지수형 실수</p>
</li>
<li><p>%ld: long형 10진수</p>
</li>
<li><p>%lx: long형 16진수</p>
</li>
<li><p>%p: 주소 16진수</p>
</li>
</ul>
<h4 id="heading-printf">- printf(서식 문자열, 변수): 출력</h4>
<blockquote>
<p>printf("%-8.2f", 200.2);<br />200.20VV (V는 빈칸을 의미)</p>
</blockquote>
<ul>
<li><p>-: 왼쪽부터 정렬</p>
</li>
<li><p>8: 출력 자릿수 8자리</p>
</li>
<li><p>2: 소수점 이하 2자리</p>
</li>
<li><p>f: 실수로 출력</p>
</li>
</ul>
<h5 id="heading-gt-72">\&gt; 주요 제어 문자</h5>
<ul>
<li><p>\n: new line</p>
</li>
<li><p>\b: backspace</p>
</li>
<li><p>\t: tab</p>
</li>
<li><p>\r: 현재줄 처음으로 커서 이동</p>
</li>
<li><p>\0: null</p>
</li>
<li><p>\'</p>
</li>
<li><p>\"</p>
</li>
<li><p>\a: 스피커로 벨소리 ㅋㅋㅋ</p>
</li>
<li><p>\</p>
</li>
<li><p>\f: 한 페이지 넘김</p>
</li>
</ul>
<h3 id="heading-java">Java</h3>
<p>print(), println(), printf()</p>
<h2 id="heading-7-7">7) 조건문</h2>
<h3 id="heading-if">- 단순 if문</h3>
<h3 id="heading-if-1">- 다중 if문</h3>
<h3 id="heading-switch">- switch문</h3>
<h2 id="heading-8-3">8) 반복문</h2>
<h3 id="heading-for">- for문</h3>
<p>초기값, 최종값, 증가값</p>
<h3 id="heading-while">- while문</h3>
<h3 id="heading-do-while">- do ~ while문</h3>
<p>무조건 한 번 실행 후 조건 판단</p>
<h3 id="heading-break-continue">- break, continue</h3>
<h2 id="heading-9-3">9) 배열</h2>
<h3 id="heading-xc0g6rcc64wq-1">- 개념</h3>
<p>동일한 데이터 유형 여러개</p>
<ul>
<li><p>하나의 이름으로 여러 기억장소 가리킴 → 개별 요소 위치는 첨자로 지정</p>
</li>
<li><p>행 우선으로 데이터가 기억장소에 할당</p>
</li>
<li><p>C 언어에서 배열의 위치를 나타내는 첨자 없이 배열 이름을 사용하면, 배열 첫번째 요소의 주소를 지정하는 것과 같음</p>
</li>
</ul>
<h3 id="heading-1-16">- 1차원 배열</h3>
<h3 id="heading-2-12">- 2차원 배열</h3>
<p>[행][열]</p>
<h3 id="heading-xc0g7lsi6riw7zmu">- 초기화</h3>
<ul>
<li><p>선언 시 초기값 지정 가능</p>
</li>
<li><p>선언 시 배열 크기 생략 → 초기값 지정해야 그 개수만큼의 배열 선언됨</p>
</li>
</ul>
<h3 id="heading-xc0g67cw7je0io2yle2dnoydmcdrrljsnpdsl7qg67oa7iiy">- 배열 형태의 문자열 변수</h3>
<p>C언어에서 ""로 묶인 글자는 수 관계 없이 문자열로 처리됨</p>
<ul>
<li><p>문자열 자료형이 없으므로 배열, 포인터로 처리</p>
</li>
<li><p>char 배열이름[크기] = "문자열"</p>
</li>
<li><p>문자열의 끝을 알리기위한 널문자 ₩0이 자동 삽입됨 → 얘도 고려해서 배열크기 지정</p>
<ul>
<li>char a[5] = "love" → l o v e \0</li>
</ul>
</li>
<li><p>배열 선언 시 초기값으로 지정해야 하고, 이미 선언된 배열에는 문자열 저장 불가</p>
</li>
</ul>
<pre><code class="lang-c"><span class="hljs-keyword">char</span> a = <span class="hljs-string">'A'</span>;
<span class="hljs-keyword">char</span> b[<span class="hljs-number">9</span>] = <span class="hljs-string">"SINAGONG"</span>;
<span class="hljs-keyword">char</span> *c = <span class="hljs-string">"SINAGONG"</span>; <span class="hljs-comment">// "SINAGONG"이 저장된 곳의 주소 저장</span>

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%c\n"</span>, a); <span class="hljs-comment">// A</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%s\n"</span>, b); <span class="hljs-comment">// SINAGONG</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%s\n"</span>, c); <span class="hljs-comment">// SINAGONG (c 주소가 가리키는 곳의 값)</span>
</code></pre>
<h2 id="heading-10-2">10) 포인터</h2>
<h3 id="heading-xc0g7ys7j247ysw7jmaio2proyduo2escdrs4dsijg">- 포인터와 포인터 변수</h3>
<p>포인터: 변수의 주소 → C언어에서 주소 제어 기능 제공</p>
<ul>
<li><p>포인터 변수: 주소 저장 변수 (int *a) 간접연산자</p>
</li>
<li><p>변수 주소 알아내기 → a = &amp;b (번지 연산자 &amp;)</p>
</li>
<li><p>포인터 변수에 <em>를 붙이면 가리키는 곳의 값을 말함 (c =</em> a)</p>
</li>
<li><p>힙 영역에 접근하는 동적 변수</p>
</li>
</ul>
<pre><code class="lang-c"><span class="hljs-keyword">int</span> a = <span class="hljs-number">50</span>;
<span class="hljs-keyword">int</span> *b; <span class="hljs-comment">// 포인터 변수</span>
b = &amp;a; <span class="hljs-comment">// a의 주소 저장</span>
*b = *b + <span class="hljs-number">20</span>; <span class="hljs-comment">// b가 가리키는 곳(a)의 값에 20 더하기, 즉 a의 값도 같이 바뀜</span>

<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%d %d"</span>, a, *b); <span class="hljs-comment">// 70 70</span>
</code></pre>
<h3 id="heading-xc0g7ys7j247ysw7jmaiouwsoyxta">- 포인터와 배열</h3>
<p>배열을 포인터 변수에 저장한 후, 포인터를 이용해 배열 요소에 접근할 수 있다</p>
<ul>
<li><p>배열 위치를 나타내는 첨자를 생략하고 대표명만 지정하면, 배열의 첫번째 요소의 주소를 지정하는 것과 같다</p>
</li>
<li><p>&amp; 연산자를 사용하여 주소 지정</p>
</li>
<li><p>포인터형 배열 선언 가능</p>
</li>
</ul>
<pre><code class="lang-c"><span class="hljs-keyword">int</span> a[<span class="hljs-number">5</span>];

<span class="hljs-keyword">int</span> i;
<span class="hljs-keyword">int</span> *p;

<span class="hljs-keyword">for</span>(i=<span class="hljs-number">0</span>; i&lt;<span class="hljs-number">5</span>; i++) {
    a[i] = i + <span class="hljs-number">10</span>;
}

p = a; <span class="hljs-comment">// 배열 a의 시작 위치가 기억됨</span>
<span class="hljs-comment">// 배열의 이름은 주소이므로 p = &amp;a가 아님</span>

<span class="hljs-keyword">for</span>(i=<span class="hljs-number">0</span>; i&lt;<span class="hljs-number">5</span>; i++) {
    <span class="hljs-built_in">printf</span>(<span class="hljs-string">"%d"</span>, *(p+i)); <span class="hljs-comment">// 10 11 12 13 14</span>
}
</code></pre>
<h2 id="heading-11-python">11) Python</h2>
<h3 id="heading-xc0g6riw67o4iousuouylq">- 기본 문법</h3>
<ul>
<li><p>자료형 선언, 세미콜론 X</p>
</li>
<li><p>변수에 연속 값 저장 가능 (x, y, z = 10, 20, 30)</p>
</li>
<li><p>코드블록은 콜론과 여백으로 구분</p>
</li>
<li><p>탭도 문법</p>
</li>
</ul>
<h3 id="heading-xc0g642w7j207yswioyehey2nougpq">- 데이터 입출력</h3>
<h4 id="heading-gt-input">\&gt; input(출력문자): 입력</h4>
<ul>
<li><p>출력문자 생략 가능</p>
</li>
<li><p>a = input("입력하세요")</p>
<ul>
<li>화면에 입력하세요가 출력되고, 키보드로 값을 입력하면 a에 저장</li>
</ul>
</li>
</ul>
<h4 id="heading-gt-print1-2-sep-end">\&gt; print(출력값1, 2, ..., sep = 분리문자, end = 종료문자): 출력</h4>
<p>print(82, 24, sep = '-', end = ',')<br />82-24,</p>
<h3 id="heading-xc0g7j6f66cl6rcsio2yleuzgo2zma">- 입력값 형변환</h3>
<p>input은 입력값 무조건 문자열로 저장</p>
<ul>
<li><p>변환할 데이터가 1개일 때</p>
<ul>
<li><p>변수 = int(input())</p>
</li>
<li><p>변수 = float(input())</p>
</li>
</ul>
</li>
<li><p>2개 이상</p>
<ul>
<li>a, b = map(int, input().split())</li>
</ul>
</li>
</ul>
<h3 id="heading-list">- List</h3>
<p>크기 동적, 배열과 달리 여러 자료형 섞어서 저장 가능</p>
<p>a = [값1, 값2, 값3, ...]<br />b = list([값1, 값2, 값3, ...])</p>
<p>a[0] = 1</p>
<h3 id="heading-dictionary">- Dictionary</h3>
<p>연관된 값을 묶어서 저장하는 용도<br />key, value 구조</p>
<p>딕셔너리명 = {키1:값1, 키2:값2, ...}<br />딕셔너리명 = dict({키1:값1, 키2:값2, ...})</p>
<p>a['이름'] = "이순신"</p>
<h3 id="heading-slice">- slice</h3>
<p>문자열, 리스트 같은 순차형 객체에서 일부를 잘라 반환</p>
<ul>
<li><p>객체명[초기위치: 최종위치]</p>
<ul>
<li>초기위치~ 최종위치-1까지 가져옴</li>
</ul>
</li>
<li><p>객체명[초기위치: 최종위치: 증가값]</p>
<ul>
<li><p>초기위치~ 최종위치-1까지 증가값만큼 증가하며 가져옴</p>
</li>
<li><p>증가값이 음수인 경우 초기위치에서 최종위치+1까지 증가값만큼 감소하며 가져옴</p>
</li>
</ul>
</li>
<li><p>일부 인수 생략 가능</p>
<ul>
<li><p>객체명[:], 객체명 [::]</p>
<ul>
<li>모든 요소 반환</li>
</ul>
</li>
<li><p>객체명[초기위치:]</p>
<ul>
<li>초기위치에서 마지막 위치까지</li>
</ul>
</li>
<li><p>객체명[:최종위치]</p>
<ul>
<li>0부터 최종위치-1까지</li>
</ul>
</li>
<li><p>객체명[::증가값]</p>
</li>
</ul>
</li>
</ul>
<pre><code class="lang-python">a = [<span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>]

a[<span class="hljs-number">1</span>:<span class="hljs-number">3</span>] // b c
a[<span class="hljs-number">0</span>:<span class="hljs-number">5</span>:<span class="hljs-number">2</span>] // a c e
a[<span class="hljs-number">3</span>:] // d e
a[:<span class="hljs-number">3</span>] // a b c
a[::<span class="hljs-number">3</span>] // a d
</code></pre>
<h3 id="heading-if-2">- if문</h3>
<h3 id="heading-for-1">- for문</h3>
<h4 id="heading-gt-range">\&gt; range</h4>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> 변수 <span class="hljs-keyword">in</span> range(최종값):
    실행할 문장

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">10</span>): // <span class="hljs-number">0</span>부터 <span class="hljs-number">9</span>까지
    sum += i; // i를 sum에 누적 == <span class="hljs-number">45</span>

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">11</span>, <span class="hljs-number">20</span>): // <span class="hljs-number">11</span>~<span class="hljs-number">19</span>
    sum += i; // <span class="hljs-number">135</span>

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">-10</span>, <span class="hljs-number">20</span>, <span class="hljs-number">2</span>) // <span class="hljs-number">-10</span>부터 <span class="hljs-number">19</span>까지 <span class="hljs-number">2</span>씩 증가하면서
</code></pre>
<h4 id="heading-gt-list">\&gt; list</h4>
<pre><code class="lang-python"><span class="hljs-keyword">for</span> 변수 <span class="hljs-keyword">in</span> 리스트

a = [<span class="hljs-number">35</span>, <span class="hljs-number">55</span>, <span class="hljs-number">65</span>, <span class="hljs-number">84</span>, <span class="hljs-number">45</span>]
hap = <span class="hljs-number">0</span>;

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> a:
    hap += i

avg = hap / len(a)
print(hap, avg)
</code></pre>
<h3 id="heading-while-1">- while문</h3>
<pre><code class="lang-python">i, hap = <span class="hljs-number">0</span>, <span class="hljs-number">0</span>

<span class="hljs-keyword">while</span> i &lt; <span class="hljs-number">5</span>:
    i += <span class="hljs-number">1</span>
    hap += i

print(hap)
</code></pre>
<h3 id="heading-xc0g7yg0656y7iqk-1">- 클래스</h3>
<pre><code class="lang-python"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Cls</span>:</span>
    x, y = <span class="hljs-number">10</span>, <span class="hljs-number">20</span>

        <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">chg</span>(<span class="hljs-params">self</span>):</span>
            temp = self.x
            self.x = self.y
            self.y = temp

a = Cls()
print(a.x, a.y) // <span class="hljs-number">10</span> <span class="hljs-number">20</span>
a.chg()
print(a.x, a.y) // <span class="hljs-number">20</span> <span class="hljs-number">10</span>
</code></pre>
<h3 id="heading-xc0g7yg0656y7iqkioyxhuuklcdrqztshozrk5zsnzgg7iks7jqp">- 클래스 없는 메소드의 사용</h3>
<p>C언어의 사용자 정의 함수와 같이 클래스 없이 메소드만 단독 사용 가능</p>
<pre><code class="lang-python"><span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">calc</span>(<span class="hljs-params">x, y</span>):</span>
    x *= <span class="hljs-number">3</span>
    y /= <span class="hljs-number">3</span>
    print(x, y)
    <span class="hljs-keyword">return</span> x

a, b = <span class="hljs-number">3</span>, <span class="hljs-number">12</span>
a = calc(a, b) // <span class="hljs-keyword">print</span>: <span class="hljs-number">9</span> <span class="hljs-number">4.0</span> (a == <span class="hljs-number">9</span>)

print(a, b) // <span class="hljs-number">9</span> <span class="hljs-number">12</span>
</code></pre>
<h2 id="heading-12-1">12) 언어 종류</h2>
<h3 id="heading-xc0g7kci7lco7kcbio2uhouhnoq3uouemouwjsdslrjslrq">- 절차적 프로그래밍 언어</h3>
<ul>
<li><p>C</p>
<ul>
<li><p>데니스 리치</p>
</li>
<li><p>시스템 프로그래밍 언어</p>
</li>
<li><p>포인터 제공(자료 주소 조작)</p>
</li>
<li><p>고급/저급 프로그래밍 언어 특징 모두 갖춤</p>
</li>
<li><p>UNIX의 일부가 C로 구현됨</p>
</li>
<li><p>컴파일러 방식의 언어</p>
</li>
<li><p>이식성 좋음</p>
</li>
</ul>
</li>
<li><p>ALGOL</p>
<ul>
<li><p>수치 계산, 논리 연산을 위한 과학 기술 계산용 언어</p>
</li>
<li><p>PASCAL과 C의 모체</p>
</li>
</ul>
</li>
<li><p>COBOL</p>
<ul>
<li><p>사무 처리용</p>
</li>
<li><p>영어 문장 형식 → 배우기 쉬움</p>
</li>
<li><p>4개의 DIVISION</p>
</li>
</ul>
</li>
<li><p>FORTRAN</p>
<ul>
<li><p>과학 기술 계산용 언어</p>
</li>
<li><p>공식, 수식 형태로 프로그래밍 가능</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g6rcd7lk07kea7zalio2uhouhnoq3uouemouwjsdslrjslrq">- 객체지향 프로그래밍 언어</h3>
<ul>
<li><p>JAVA</p>
<ul>
<li><p>분산 네트워크, 멀티 스레드</p>
</li>
<li><p>운영체제, 하드웨어 독립적, 이식성 강함</p>
</li>
<li><p>캡슐화 재사용성</p>
</li>
</ul>
</li>
<li><p>C++</p>
<ul>
<li><p>C + 객체지향</p>
</li>
<li><p>모든 문제를 객체로 모델링하여 표현</p>
</li>
</ul>
</li>
<li><p>Smalltalk</p>
<ul>
<li><p>1세대 객체지향 프로그래밍 언어</p>
</li>
<li><p>최초로 GUI 제공한 언어</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g7iqk7ygs66a97yq4ioywuoywta">- 스크립트 언어</h3>
<ul>
<li><p>JavaScript</p>
<ul>
<li><p>웹 페이지 동작 제어용 클라이언트 스크립트 언어</p>
</li>
<li><p>클래스 x, 변수 선언 X</p>
</li>
</ul>
</li>
<li><p>VB 스크립트</p>
<ul>
<li>마이크로소프트, Active X</li>
</ul>
</li>
<li><p>ASP(Active Server Page)</p>
<ul>
<li><p>서버측에서 동적으로 수행되는 페이지를 만들기 위한 언어</p>
</li>
<li><p>마이크로소프트</p>
</li>
<li><p>window 계열에서만 수행 가능</p>
</li>
</ul>
</li>
<li><p>JSP(Java Server Page)</p>
<ul>
<li>자바 기반 서버용 스크립트, 다양한 운영체제</li>
</ul>
</li>
<li><p>PHP</p>
<ul>
<li><p>서버용 스크립트 언어, Linux, unix, windows</p>
</li>
<li><p>C, Java와 문법 유사</p>
</li>
</ul>
</li>
<li><p>Python</p>
<ul>
<li><p>객체지향 지원하는 대화형 인터프리터 언어</p>
</li>
<li><p>플랫폼 독립적, 간단한 문법</p>
</li>
</ul>
</li>
<li><p>쉘 스크립트</p>
<ul>
<li><p>Unix/Linux 계열의 Shell에서 사용되는 명령어 조합으로 구성된 스크립트 언어</p>
</li>
<li><p>컴파일X → 실행속도 빠름</p>
</li>
<li><p>확장자 .sh</p>
</li>
<li><p>Bash Shell, Bourne Shell, C Shell, Korn Shell</p>
</li>
<li><p>제어문: if, case / for, while, until</p>
</li>
</ul>
</li>
<li><p>Basic: 절차지향 대화형 인터프리터 언어, 초보자도 사용가능한 문법 구조</p>
</li>
</ul>
<h3 id="heading-xc0g7isg7ja47zivio2uhouhnoq3uouemouwjsdslrjslrq">- 선언형 프로그래밍 언어</h3>
<ul>
<li><p>HTML</p>
</li>
<li><p>LISP: 인공지능, 기본자료구조 == 연결리스트, 재귀 호출 많이 사용</p>
</li>
<li><p>PROLOG: 논리학 기반 고급 언어, 인공지능, 리스트 처리</p>
</li>
<li><p>XML: HTML 보완, 웹 문서 상호 교환, 새로운 태그 정의, 내용과 표현 독립적</p>
</li>
<li><p>Haskell: 함수형 프로그래밍 언어, 사이드이펙트X, 간결한 코드, 에러 가능성↓</p>
</li>
</ul>
<h2 id="heading-14-1">14) 라이브러리</h2>
<p>자주 사용하는 함수 데이터 모음</p>
<ul>
<li><p>반복적인 코드 작성 피하기 위해, 필요할 때 호출</p>
</li>
<li><p>표준 라이브러리: 언어에 포함</p>
</li>
<li><p>외부 라이브러리: 설치해서 사용</p>
</li>
</ul>
<h3 id="heading-c-1">- C언어의 대표적인 표준 라이브러리</h3>
<p>라이브러리를 헤더파일로 제공<br /><code>#include &lt;studio.h&gt;</code>처럼 선언 후 사용</p>
<ul>
<li><p>studio.h</p>
<ul>
<li><p>데이터 입출력</p>
</li>
<li><p>printf, scanf, fprintf, fscantf, fclose, fopen</p>
</li>
</ul>
</li>
<li><p>math.h</p>
<ul>
<li>수학 함수, sqrt, pow, abs</li>
</ul>
</li>
<li><p>string.h</p>
<ul>
<li>문자열, strlen, strcpy, strcmp</li>
</ul>
</li>
<li><p>stdlib.h</p>
<ul>
<li><p>자료형 변환, 난수 발생, 메모리 할당</p>
</li>
<li><p>atoi, atof, srand, rand, malloc, free</p>
</li>
</ul>
</li>
<li><p>time.h</p>
<ul>
<li>시간 처리, time, clock</li>
</ul>
</li>
</ul>
<h2 id="heading-15-1">15) 예외처리</h2>
<ul>
<li><p>프로그램 종료 or 로그 남기기</p>
</li>
<li><p>C++, Ada, JAVA, JavaScript → 예외처리 기능 내장</p>
</li>
<li><p>그 외 언어는 조건문으로 예외처리 루틴 작성</p>
</li>
<li><p>원인: 하드웨어 문제, 운영체제 설정 실수, 라이브러리 손상, 입력 실수, 받아들일 수 없는 연산, 할당하지 못하는 기억장치 접근</p>
</li>
</ul>
<h1 id="heading-3-sw">3. 응용 SW 기초 기술 활용</h1>
<h2 id="heading-1-17">1) 운영체제</h2>
<h3 id="heading-xc0g7kcv7j2ylcdrqqnsoie">- 정의, 목적</h3>
<p>컴퓨터 시스템 자원 관리, 사용자가 컴퓨터를 편리하게 사용할 환경 제공 프로그램의 모임</p>
<ul>
<li><p>사용자와 하드웨어 간 인터페이스로 동작하는 시스템 소프트웨어의 일종</p>
</li>
<li><p>다른 응용프로그램의 환경 제공</p>
</li>
<li><p>목적: 처리능력, 사용 가능도, 신뢰도 향상 / 반환 시간 단축</p>
</li>
<li><p>운영체제 성능 평가 기준</p>
<ul>
<li><p>처리 능력: 일정 시간 내에 시스템이 처리하는 일의 양</p>
</li>
<li><p>반환 시간: 작업 의뢰~처리 완료까지 기간</p>
</li>
<li><p>사용 가능도: 즉시 사용 가능한 정도</p>
</li>
<li><p>신뢰도: 정확히 해결</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g6rws7isx">- 구성</h3>
<h4 id="heading-gt-73">\&gt; 제어 프로그램</h4>
<p>컴퓨터 전체의 작동 상태 감시, 작업 순서 지정, 작업 데이터 관리</p>
<ul>
<li><p>감시 프로그램: 핵심, 자원 할당/시스템 전체의 작동상태 감시</p>
</li>
<li><p>작업 관리 프로그램: 작업 순서, 방법 관리</p>
</li>
<li><p>데이터 관리 프로그램: 데이터, 파일의 처리, 전송</p>
</li>
</ul>
<h4 id="heading-gt-74">\&gt; 처리 프로그램</h4>
<p>제어 프로그램의 지시를 받아 문제 해결</p>
<ul>
<li><p>언어 번역 프로그램</p>
<ul>
<li><p>사용자의 원시 프로그램(고급 언어) → 목적 프로그램(기계어)</p>
</li>
<li><p>컴파일러, 어셈블러, 인터프리터</p>
</li>
</ul>
</li>
<li><p>서비스 프로그램</p>
<ul>
<li><p>사용자의 효율적인 컴퓨터 사용</p>
</li>
<li><p>분류/병합, 유틸리티 프로그램</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-xc0g6riw64ql-1">- 기능</h3>
<ul>
<li><p>프로세서(처리기), 기억장치(주/보조 기억장치), 입출력장치, 파일, 정보 등의 자원 관리</p>
</li>
<li><p>자원의 스케줄링 기능</p>
</li>
<li><p>사용자와 시스템 간 인터페이스 제공</p>
</li>
<li><p>하드웨어, 네트워크 관리 제어</p>
</li>
<li><p>데이터 관리, 데이터/자원의 공유기능 제공</p>
</li>
<li><p>시스템 오류 검사, 복구</p>
</li>
<li><p>자원 보호 기능 제공</p>
</li>
<li><p>입출력 보조 기능</p>
</li>
<li><p>가상 계산기 기능</p>
</li>
</ul>
<h3 id="heading-xc0g7kkf66wy-4">- 종류</h3>
<h4 id="heading-gt-windows">\&gt; Windows</h4>
<p>90s. 마이크로소프트</p>
<ul>
<li><p>GUI</p>
</li>
<li><p>선점형 멀티태스킹: 멀티태스킹 중 문제 발생 시 해당 프로그램 강제 종료, 자원 반환</p>
</li>
<li><p>PnP(Plug and Play, 자동 감지 기능): 새 하드웨어 환경 자동 구성</p>
</li>
<li><p>OLE(Object Linking and Embedding): 응용 프로그래밍 간 개체 연결, 삽입</p>
</li>
<li><p>255자의 긴 파일명</p>
</li>
<li><p>Single-User 시스템</p>
</li>
</ul>
<h4 id="heading-gt-unix">\&gt; UNIX</h4>
<p>AT&amp;T 벨 연구소, MIT, General Electric 공동 개발 운영 체제</p>
<ul>
<li><p>시분할 시스템(time)을 위해 설계된 대화식 운영체제, 오픈 소스</p>
</li>
<li><p>C언어로 작성, 이식성 높음, 호환성도 높음</p>
</li>
<li><p>크기가 작고 이해하기 쉬움</p>
</li>
<li><p>다중 사용자, 다중 작업 지원</p>
<ul>
<li>여러 사용자 동시에 시스템 사용 가능, 여러 개의 작업/프로그램 동시 수행 가능</li>
</ul>
</li>
<li><p>네트워크 관리용 운영체제로 적합</p>
</li>
<li><p>트리구조 파일 시스템</p>
</li>
<li><p>전문적인 프로그램 개발에 용이</p>
</li>
<li><p>다양한 유틸 프로그램</p>
</li>
</ul>
<h4 id="heading-gt-unix-1">\&gt; UNIX 시스템 구성</h4>
<ul>
<li><p>커널(Kernel)</p>
<ul>
<li><p>핵심. 부팅 시 주기억장치에 적재, 상주하며 실행</p>
</li>
<li><p>하드웨어 보호, 프로그램-하드웨어 간 인터페이스 역할</p>
</li>
<li><p>프로세스(CPU 스케줄링) 관리, 기억장치 관리, 파일/입출력 관리, 프로세스 간 통신, 데이터 전송 및 변환 기능 수행</p>
</li>
</ul>
</li>
<li><p>쉘(Shell)</p>
<ul>
<li><p>사용자의 명령어를 인식, 프로그램 호출, 명령 수행 → 명령어 해석기</p>
</li>
<li><p>시스템과 사용자간 인터페이스 담당</p>
</li>
<li><p>DOS의 <a target="_blank" href="http://COMMAND.COM">COMMAND.COM</a></p>
</li>
<li><p>주기억장치 상주 X, 파일 형태로 존재, 보조 기억장치에서 교체 가능</p>
</li>
<li><p>파이프라인 지원, 입출력 재지정 가능</p>
</li>
<li><p>공용 Shell(Bourne Shell, C Shell, Korn Shell)이나 커스텀 쉘 사용 가능</p>
</li>
</ul>
</li>
<li><p>Utility Program</p>
<ul>
<li><p>일반 사용자가 작성한 응용 프로그램 처리</p>
</li>
<li><p>DOS의 외부 명령어</p>
</li>
<li><p>에디터, 컴파일러, 인터프리터, 디버거</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-2-13">2) 파일 디스크립터</h2>
<p>시스템(운영체제)이 필요로하는 파일에 대한 정보를 가진 제어 블록<br />파일 제어 블록(FCB)</p>
<ul>
<li><p>파일마다 독립적으로 존재, 시스템에 따라 다른 구조</p>
</li>
<li><p>보조기억장치에 저장되어 있다가 해당 파일이 open될 때 주 기억장치로 옮겨짐</p>
</li>
<li><p>사용자의 직접 참조X, 파일 시스템이 관리</p>
</li>
</ul>
<h2 id="heading-3-11">3) 기억장치 관리</h2>
<h3 id="heading-xc0g67cw7lmyioyghouetq">- 배치 전략</h3>
<p>새로 반입되는 프로그램, 데이터를 주 기억장치 어디에 위치시킬 것인지 결정하는 전략</p>
<ul>
<li><p>최초적합(First Fit): 들어갈 수 있는 빈 영역 중 첫 번째 분할 영역</p>
</li>
<li><p>최적적합(Best Fit): 단편화를 가장 작게 남기는 분할 영역</p>
</li>
<li><p>최악적합(worst fit): 가장 많이 남기는</p>
</li>
</ul>
<h3 id="heading-xc0g7y6y7j207kevioq4souylq">- 페이징 기법</h3>
<ul>
<li><p>가상기억 장치의 프로그램과 주 기억장치의 영역을 <strong>동일한</strong> 크기로 나눈 후, 나눠진 프로그램(페이지)을 나눠진 주기억장치 영역(페이지 프레임)에 적재</p>
</li>
<li><p>외부 단편화 발생X, 내부 단편화 O</p>
</li>
<li><p>페이지 맵 테이블: 주소 변환을 위해 페이지의 위치 정보 저장</p>
</li>
</ul>
<h3 id="heading-xc0g7is46re466i87ywm7j207iwyioq4souylq">- 세그먼테이션 기법</h3>
<ul>
<li><p>가상기억장치의 프로그램을 <strong>논리적</strong> 단위로 나눈 후(세그먼트) 주 기억장치에 적재</p>
</li>
<li><p>세그먼트는 고유한 이름, 크기를 가짐</p>
</li>
<li><p>세그먼트 맵 테이블: 세그먼트 위치 정보</p>
</li>
<li><p>내부 단편화 X, 외부 단편화 O</p>
</li>
</ul>
<h2 id="heading-4-17">4) 페이지 교체 알고리즘</h2>
<p>페이지 부재(Page Fault) 시 가상기억장치의 필요한 페이지를 주 기억장치에 적재해야 하는데,<br />이때 주기억장치의 모든 페이지 프레임이 사용중이면 어떤 페이지 프레임을 교체할지 결정하는 기법</p>
<ul>
<li><p>OPT(최적 교체): 앞으로 가장 오래 사용하지 않을 페이지 교체, 벨레이디, 페이지 부재횟수가 가장 적게 발생 (가장 효율적인 알고리즘)</p>
</li>
<li><p>FIFO</p>
</li>
<li><p>LRU(Least Recently Used): 최근에 가장 오랫동안 사용하지 않은 페이지 교체, 각 페이지마다 계수기(counter)/스택(stack)</p>
</li>
<li><p>LFU(Frequently): 사용 빈도가 가장 적은 페이지</p>
</li>
<li><p>SCR(2차 기회 교체): the oldest 주기억장치의 페이지 중 자주 사용되는 페이지의 교체 방지, FIFO 보완</p>
</li>
<li><p>NUR(Not Used Recently): LRU와 비슷, LRU의 시간적인 오버헤드 줄이기, 참조비트/변형비트로 사용여부 확인</p>
</li>
</ul>
<h3 id="heading-xc0g7y6y7j207keaio2broq4sa">- 페이지 크기</h3>
<h4 id="heading-gt-75">\&gt; 작을 경우</h4>
<ul>
<li><p>페이지 단편화 감소, 한 페이지를 주기억장치로 이동하는 시간 ↓</p>
</li>
<li><p>불필요한 내용이 주기억장치에 적재될 확률이 적으므로 효율적인 워킹셋</p>
</li>
<li><p>Locality에 더 일치 → 기억장치 효율 좋아짐</p>
</li>
<li><p>페이지 맵 테이블의 크기가 커지고, 매핑속도 ↓</p>
</li>
<li><p>디스크 접근 횟수가 많아져서 전체적 입출력 시간 늘어남</p>
</li>
</ul>
<h4 id="heading-gt-76">\&gt; 클 경우</h4>
<ul>
<li><p>맵 테이블 크기 감소, 매핑 속도 증가</p>
</li>
<li><p>디스크 접근 횟수 감소 → 입출력 효율 증가</p>
</li>
<li><p>페이지 단편화 증가, 한 페이지를 주기억장치로 이동하는 시간 증가</p>
</li>
<li><p>프로세스 수행에 불필요한 내용까지도 주기억장치에 적재됨</p>
</li>
</ul>
<h3 id="heading-locality">- Locality</h3>
<p>프로세스가 실행되는 동안 주기억장치를 참조할 때 일부 페이지만 집중적으로 참조하는 성질이 있다</p>
<ul>
<li><p>스래싱 방지용 워킹 셋 이론의 기반</p>
</li>
<li><p>시간 구역성, 공간 구역성으로 분류</p>
</li>
</ul>
<h4 id="heading-gt-temporal-locality">\&gt; 시간 구역성(Temporal Locality)</h4>
<ul>
<li><p>일정시간 집중적 액세스 현상</p>
</li>
<li><p>한 번 참조한 페이지는 금방 또 참조할 가능성이 높음</p>
</li>
<li><p>기억장소: Loop, Stack, 부 프로그램, Counting, 집계에 사용되는 변수</p>
</li>
</ul>
<h4 id="heading-gt-spatial-locality">\&gt; 공간 구역성(Spatial Locality)</h4>
<ul>
<li><p>일정 위치의 페이지에 집중적 엑세스</p>
</li>
<li><p>어느 한 페이지를 참조하면 그 근처 페이지 계속 참조 가능성 높음</p>
</li>
<li><p>기억장소: 배열 순회, 순차적 코드 실행, 근처에 선언/할당된 변수들, 같은 영역에 있는 변수</p>
</li>
</ul>
<h3 id="heading-working-set">- Working Set</h3>
<p>프로세스가 일정 시간동안 자주 참조하는 페이지들의 집합</p>
<ul>
<li><p>Denning이 제안한 프로그램 움직임에 대한 모델, 프로그램의 Locality 특징 이용</p>
</li>
<li><p>자주 참조되는 워킹셋을 주기억장치에 상주 → 페이지 부재, 교체 현상 감소 → 기억장치 사용 안정</p>
</li>
<li><p>시간에 따라 변경됨</p>
</li>
</ul>
<h3 id="heading-xc0g7iqk66ci7iux">- 스레싱</h3>
<p>프로세스 처리 시간 &lt; 페이지 교체 소요 시간</p>
<ul>
<li><p>페이지 부재가 자주 발생해서 나타나는 현상 → 전체 시스템 성능 저하</p>
</li>
<li><p>다중 프로그래밍의 정도가 높아짐에 따라 CPU 이용율은 특정 시점까지 높아짐 → 스래싱 발생 → CPU 이용률 급격히 감소</p>
</li>
</ul>
<p>방지 방법</p>
<ul>
<li><p>다중 프로그래밍 정도를 적정 수준으로 유지</p>
</li>
<li><p>페이지 부재 빈도 조절하여 사용</p>
</li>
<li><p>워킹셋 유지</p>
</li>
<li><p>부족한 자원 증설, 일부 프로세스 중단</p>
</li>
<li><p>CPU 임계치 예상하여 운영</p>
</li>
</ul>
<h2 id="heading-5-13">5) 프로세스</h2>
<p>실행중인 프로그램<br />프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 시스템 프로그램<br />작업, 태스크라고도 함</p>
<ul>
<li><p>PCB를 가진 프로그램</p>
</li>
<li><p>실 기억장치에 저장된 프로그램</p>
</li>
<li><p>프로세서가 할당되는 실체로서, 디스패치가 가능한 단위</p>
</li>
<li><p>프로시저가 활동중인 것</p>
</li>
<li><p>비동기적 행위를 일으키는 주체</p>
</li>
<li><p>지정된 결과를 얻기 위한 일련의 계통적 동작</p>
</li>
<li><p>목적, 결과에 따라 발생되는 사건의 과정</p>
</li>
<li><p>운영체제가 관리하는 실행단위</p>
</li>
</ul>
<h3 id="heading-pcb">- PCB</h3>
<p>프로세스 제어 블록</p>
<p>운영체제가 프로세스에 대한 중요 정보를 저장해놓는 곳<br />Task Control Block, Job Control Block</p>
<ul>
<li>각 프로세스 생성 시 고유의 PCB가 생성되고, 완료시 제거됨</li>
</ul>
<h4 id="heading-gt-pcb">\&gt; PCB에 저장된 정보</h4>
<ul>
<li><p>프로세스의 현재 상태</p>
</li>
<li><p>포인터</p>
<ul>
<li><p>부모/자식 프로세스의 포인터</p>
</li>
<li><p>프로세스 위치한 메모리 포인터</p>
</li>
<li><p>할당된 자원 포인터</p>
</li>
</ul>
</li>
<li><p>식별자</p>
</li>
<li><p>스케줄링/프로세스의 우선순위</p>
</li>
<li><p>CPU 레지스터 정보</p>
</li>
<li><p>주기억장치 관리 정보</p>
</li>
<li><p>입출력 상태</p>
</li>
<li><p>계정</p>
</li>
</ul>
<h3 id="heading-xc0g7zse66gc7is47iqkioydge2dncdsoitsnbq">- 프로세스 상태 전이</h3>
<p>프로세스 상태가 변하는 것<br />상태전이도로 표시</p>
<p>\=&gt; 제출, 접수, <strong>준비, 실행, 대기</strong></p>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/0ff13ca9-73fd-4879-9890-205651c7a802/image.png" alt="프로세스상태전이" /></p>
<ul>
<li><p>제출</p>
</li>
<li><p>접수: 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장</p>
</li>
<li><p>준비</p>
</li>
<li><p>실행: 준비상태 큐에 있는 프로세스가 프로세서를 할당받아 실행됨</p>
</li>
<li><p>대기: 보류, 블록 / 입출력이 필요하면 중단되고, 입출력 처리가 완료될 때까지 기다림</p>
</li>
<li><p>종료: 프로세스 할당 해제</p>
</li>
</ul>
<h4 id="heading-gt-77">\&gt; 관련 용어</h4>
<ul>
<li><p>Dispatch: 준비 상태의 프로세스가 프로세서를 할당받아 실행상태로 전이되는 과정</p>
</li>
<li><p>Wake Up: 입출력 작업 완료 → 프로세스가 대기에서 준비상태로</p>
</li>
<li><p>Spooling: 입출력 한번에 하려고 디스크에 저장</p>
</li>
<li><p>교통량 제어기: 프로세스 상태에 대한 조사, 통보</p>
</li>
</ul>
<h3 id="heading-xc0g7iqk66ci65oc">- 스레드</h3>
<p>프로세스 내에서의 작업 단위<br />시스템의 자원을 할당받아 실행하는 프로그램의 단위</p>
<ul>
<li><p>단일 스레드, 다중 스레드</p>
</li>
<li><p>경량 프로세스라고도 함</p>
</li>
<li><p>스레드 기반 시스템 → 독립적인 스케줄링의 최소단위로서 프로세스의 역할 담당</p>
</li>
<li><p>동일 프로세스 환경에서 독립적인 다중 수행 가능</p>
</li>
</ul>
<h4 id="heading-gt-78">\&gt; 스레드의 분류</h4>
<p>사용자 수준의 스레드</p>
<ul>
<li><p>사용자가 만든 라이브러리로 스레드 운용</p>
</li>
<li><p>빠른 속도, 구현 어려움</p>
</li>
</ul>
<p>커널 수준 스레드</p>
<ul>
<li><p>운영체제 커널에 의해 스레드 운용</p>
</li>
<li><p>구현 쉽지만 속도 느림</p>
</li>
</ul>
<h4 id="heading-gt-79">\&gt; 장점</h4>
<ul>
<li><p>병행성 증진</p>
</li>
<li><p>HW, OS 성능 / 응용 프로그램 처리율 향상</p>
</li>
<li><p>응답 시간 단축</p>
</li>
<li><p>실행환경 공유 → 기억장소 낭비 저하</p>
</li>
<li><p>프로세스 간 통신 향상</p>
</li>
<li><p>스레드는 공통적으로 접근가능한 기억장치를 통해 효율적으로 통신</p>
</li>
</ul>
<h2 id="heading-6-11">6) 스케줄링</h2>
<h3 id="heading-xc0g7ko87jquioykpoy8goykhoungsdslyzqs6drpqzsppg">- 주요 스케줄링 알고리즘</h3>
<h4 id="heading-gt-fcfsfirst-come-first-service-fifo">\&gt; FCFS(First Come First Service) = FIFO</h4>
<ul>
<li><p>준비상태 큐에 도착한 순서에 따라 CPU 할당, 가장 간단한 알고리즘</p>
</li>
<li><p>공평하지만, 짧은 작업이 긴 작업을, 중요한 작업이 중요하지 않은 작업을 기다리게 된다</p>
</li>
</ul>
<h4 id="heading-gt-sjfshortest-job-first">\&gt; SJF(Shortest Job First): 단기 작업 우선</h4>
<ul>
<li><p>실행시간이 가장 짧은 프로세스에 CPU 할당</p>
</li>
<li><p>가장 적은 평균 대기 시간 제공</p>
</li>
</ul>
<h4 id="heading-gt-hrnhighest-response-ratio-next">\&gt; HRN(Highest Response-ratio Next)</h4>
<ul>
<li><p>실행시간이 긴 프로세스에 불리한 SJF 보완</p>
</li>
<li><p>대기시간과 서비스 시간 이용 → 우선순위 계산 공식</p>
<ul>
<li>(대기시간 + 서비스 시간) / 서비스 시간</li>
</ul>
</li>
</ul>
<h2 id="heading-7-unixlinux">7) UNIX/LINUX</h2>
<h3 id="heading-xc0g7zmy6rk967oa7iiy">- 환경변수</h3>
<p>명령어, 스크립트에서 사용하려면 변수명 앞에 $를 붙여야함<br />set, env, printenv, setenv 중 하나를 입력하면 모든 환경변수, 값을 표시</p>
<ul>
<li><p>$DISPLAY: 현재 X 윈도 디스플레이 위치</p>
</li>
<li><p>$PS1: 쉘 프롬프트 정보</p>
</li>
<li><p>$HOME: 사용자의 홈 디렉토리</p>
</li>
<li><p>$PWD: 현재 작업하는 디렉토리</p>
</li>
<li><p>$LANG: 프로그램 사용 시 기본적으로 지원되는 언어</p>
</li>
<li><p>$TERM: 로긴 터미널 타입</p>
</li>
<li><p>$MAIL: 메일 보관 경로</p>
</li>
<li><p>$USER: 사용자 이름</p>
</li>
<li><p>$PATH: 실행 파일 경로</p>
</li>
</ul>
<h3 id="heading-xc0g6riw67o4iouqheugueywta">- 기본 명령어</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>명령어</td><td>기능</td></tr>
</thead>
<tbody>
<tr>
<td>cat</td><td>파일 내용 표시</td></tr>
<tr>
<td>chdir</td><td>change directory</td></tr>
<tr>
<td>chmod</td><td>파일의 보호 모드 설정</td></tr>
<tr>
<td>chown</td><td>소유자 변경</td></tr>
<tr>
<td>cp</td><td>파일 복사</td></tr>
<tr>
<td>exec</td><td>새로운 프로세스 수행</td></tr>
<tr>
<td>find</td><td>파일 찾기</td></tr>
<tr>
<td>fork</td><td>새 프로세스 생성</td></tr>
<tr>
<td>fsck</td><td>파일 시스템 검사, 보수</td></tr>
<tr>
<td>getpid</td><td>프로세스 아이디 얻음</td></tr>
<tr>
<td>getppid</td><td>부모 프로세스 아이디 얻기</td></tr>
<tr>
<td>ls</td><td>파일 목로</td></tr>
<tr>
<td>mount/unmount</td><td>파일 시스템 마운팅/해제</td></tr>
<tr>
<td>rm</td><td>삭제</td></tr>
<tr>
<td>wait</td><td>fork 후 exec에 의해 실행되는 프로세스의 상위 프로세스가 하위 프로세스 종료 등의 이벤트를 기다림</td></tr>
</tbody>
</table>
</div><h2 id="heading-8-4">8) 인터넷</h2>
<h3 id="heading-ip">- IP 주소</h3>
<p>Internet Protocol Address</p>
<p>인터넷에 연결된 모든 컴퓨터 자원을 구분하기 위한 고유 주소</p>
<ul>
<li><p>숫자 8비트씩 4부분, 총 32비트로 구성</p>
</li>
<li><p>네트워크 부분의 길이에 따라 A~E 클래스로 구성</p>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/stringbuckwheat/post/46edf89d-fe37-4826-9b42-52ee232b2faf/image.png" alt="ip-class" /></p>
<h3 id="heading-xc0g7isc67im64sk7yyf">- 서브네팅</h3>
<p>할당된 네트워크를 다시 여러개의 작은 네트워크로 나누어 사용</p>
<ul>
<li><p>서브넷 마스크: 4바이트의 IP 주소 중 네트워크, 호스트 주소를 구분하기 위한 비트</p>
</li>
<li><p>이를 변경하여 네트워크 주소를 여러개로 분할</p>
</li>
<li><p>각 클래스마다 다르게 사용됨</p>
</li>
</ul>
<h3 id="heading-ipv6">- IPv6</h3>
<p>IPv4 주소 부족 문제 해결을 위해 개발</p>
<ul>
<li><p>128비트의 주소, 속도 빠름</p>
</li>
<li><p>인증성, 기밀성, 데이터 무결성 지원 → 보안문제 해결</p>
</li>
<li><p>IPv4와 호환성 뛰어남</p>
</li>
<li><p>주소의 확장성, 융통성, 연동성 ↑ / 실시간 흐름 제어로 향상된 멀티미디어 기능</p>
</li>
<li><p>패킷 크기 확장 가능 → 즉 크기 제한 없음</p>
</li>
</ul>
<h4 id="heading-gt-80">\&gt; 구성</h4>
<p>16비트씩 8부분 → 총 128 비트<br />각 부분 16진수 표현, 콜론으로 구분<br />세 가지 주소 체계로 나누어짐</p>
<ul>
<li><p>유니캐스트: 단일 송신자 - 단일 수신자 (1:1통신)</p>
</li>
<li><p>멀티캐스트: 단일 송신자 - 다중 수신자</p>
</li>
<li><p>애니캐스트: 단일 송신자와 가장 가까이 있는 단일 수신자 통신</p>
</li>
</ul>
<h2 id="heading-9-osi">9) OSI 참조 모델</h2>
<p>ISO(국제 표준화 기구)에서 제안한 통신 규약</p>
<h4 id="heading-gt-osi-7">\&gt; OSI 7계층</h4>
<p>하위계층: 물리, 데이터 링크, 네트워크<br />상위계층: 전송, 세션, 표현, 응용</p>
<ul>
<li><p>물리 계층: 장치간 규칙</p>
</li>
<li><p>데이터 링크 계층</p>
<ul>
<li><p>시스템간 연결 설정과 유지 및 종료</p>
</li>
<li><p>송수신 속도 차이를 위한 흐름 제어</p>
</li>
<li><p>프레임의 시작, 끝 구분을 위한 프레임 동기화 기능</p>
</li>
<li><p>오류제어</p>
</li>
</ul>
</li>
<li><p>네트워크 계층, 망 계층</p>
<ul>
<li><p>네트워크 연결 관리, 데이터 교환/중계</p>
</li>
<li><p>네트워크 연결 설정, 유지, 해제</p>
</li>
<li><p>경로설정(routing), 데이터 교환 및 종계, 트래픽 제어, 패킷 정보 전송</p>
</li>
</ul>
</li>
<li><p>전송 계층</p>
<ul>
<li><p>종단 시스템(end-to-end)간 투명한 데이터 전송</p>
</li>
<li><p>주소 설정, 다중화(분할, 재조립), 오류 제어, 흐름 제어</p>
</li>
</ul>
</li>
<li><p>세션 계층</p>
<ul>
<li><p>송수신 측 간의 관련성 유지, 대화 제어</p>
</li>
<li><p>대화 구성 및 동기 제어, 데이터 교환 관리</p>
</li>
</ul>
</li>
<li><p>표현 계층</p>
<ul>
<li><p>세션-응용 계층간 데이터 가공</p>
</li>
<li><p>코드 변환, 데이터 암호화, 데이터 압축, 구문 검색, 정보 형식 변환, 문맥 관리</p>
</li>
</ul>
</li>
<li><p>응용 계층</p>
<ul>
<li>사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스 제공</li>
</ul>
</li>
</ul>
<h2 id="heading-10-3">10) 네트워크 관련 장비</h2>
<ul>
<li><p>네트워크 인터페이스 카드</p>
<ul>
<li>컴퓨터-컴퓨터, 컴퓨터-네트워크 연결 장치 / 정보 전송 시 케이블을 통해 전달될 수 있도록 형태 변경</li>
</ul>
</li>
<li><p>허브: 가까운 거리 컴퓨터 연결, 신호 증폭(리피터) 역할도 포함 / 더미허브, 스위치 허브</p>
</li>
<li><p>리피터</p>
</li>
<li><p>브리지: LAN과 LAN을 연결, LAN 안에서 컴퓨터 그룹(세그먼트) 연결 / 네트워크 분산 구성 → 보안↑</p>
</li>
<li><p>스위치: LAN + LAN = 더 큰 LAN</p>
</li>
<li><p>라우터: 브리지 + 데이터 전송 최적 경로 선택 기능 / 서로다른 LAN이나 WAN과의 연결도 수행</p>
</li>
<li><p>게이트웨이: 전계층 프로토콜 구조가 다른 네트워크의 연결</p>
</li>
</ul>
<h2 id="heading-11-1">11) 프로토콜</h2>
<h3 id="heading-xc0g7j2r7jqpioqzhoy4teydmcdso7zsmpqg7zse66gc7yag7l2c">- 응용 계층의 주요 프로토콜</h3>
<ul>
<li><p>FTP: 원격 파일 전송 프로토콜</p>
</li>
<li><p>SMTP: 전자우편 교환</p>
</li>
<li><p>TELNET: 원격연결</p>
</li>
<li><p>SNMP: 네트워크 기기의 네트워크 정보를 네트워크 관리 시스템에 보낼 때의 표준 통신 규약</p>
</li>
<li><p>DNS</p>
</li>
<li><p>HTTP: www의 html 송수신 프로토콜</p>
</li>
</ul>
<h3 id="heading-xc0g7kce7iahioqzhoy4tq">- 전송 계층</h3>
<ul>
<li><p>TCP: 양방향 연결, 스트림 위주 전달(패킷 단위), 헤더(20~100Byte)</p>
</li>
<li><p>UDP: 비연결형 서비스, 헤더 단순, 오버헤드 적고 흐름/순서 제어 X, 실시간 전송에 유지, 신뢰 &lt; 속도</p>
</li>
<li><p>RTCP: RTP 전송 품질 제어 프로토콜, 세션에 참여한 각 참여자들에게 제어정보 전송</p>
</li>
</ul>
<h3 id="heading-xc0g7j247ysw64s3ioqzhoy4tq">- 인터넷 계층</h3>
<ul>
<li><p>IP: 전송할 데이터에 주소 지정 → 경로 설정, 비연결형 데이터그램 방식 사용 → 신뢰성 보장X</p>
</li>
<li><p>ICMP: IP와 조합, 오류 처리, 전송 경로 변경 등의 제어 메시지 관리, 헤더 8Byte</p>
</li>
<li><p>IGMP: 멀티캐스트 그룹 유지</p>
</li>
<li><p>ARP: 호스트 IP를 연결된 장치의 물리적 주소(MAC Address)로 바꿈</p>
</li>
<li><p>RARP: ARP의 반대. 물리적 주소를 IP 주소로</p>
</li>
</ul>
<h3 id="heading-xc0g64sk7yq47jum7ygsioyvoeyeuoykpcdqs4tsulu">- 네트워크 액세스 계층</h3>
<ul>
<li><p>Ethernet: CSMA/CD 방식의 LAN</p>
</li>
<li><p>IEEE 802: LAN을 위한 표준 프로토콜</p>
</li>
<li><p>HDLC: 비트 위주의 데이터 링크 제어 프로토콜</p>
</li>
<li><p>X.25: 패킷 교환망을 통한 DTE와 DCE간 인터페이스 제공 프로토콜</p>
</li>
<li><p>RS-232C: 공중전화 교환망을 통한 DTE와 DCE간 인터페이스 제공</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[[sqld] 요약]]></title><description><![CDATA[https://signon.oracle.com/signin
CBT 모의고사
sqld 스피드 퀴즈
https://velog.io/@rlaensk/SQL-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%ED%95%84%EC%88%98%EA%B0%9C%EB%85%90
데이터 모델링에서 중요한 세가지

성격

행위

관계


기본키를 참조하는 것 = 외래키유일성과 최소성 = 후보키
SQL 실행순서 = 파실인(PEF)
이행 함수 종속...]]></description><link>https://haroldrippin.hashnode.dev/sqld</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/sqld</guid><category><![CDATA[SQL]]></category><category><![CDATA[certificate]]></category><category><![CDATA[SQLite]]></category><category><![CDATA[SQL Server]]></category><category><![CDATA[#SQLtutorial ]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sun, 23 Feb 2025 10:33:48 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://signon.oracle.com/signin">https://signon.oracle.com/signin</a></p>
<p><a target="_blank" href="https://cbt.youngjin.com/exam/index.php?no=73">CBT 모의고사</a></p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=JWxwg0ikYm4">sqld 스피드 퀴즈</a></p>
<p><a target="_blank" href="https://velog.io/@rlaensk/SQL-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%ED%95%84%EC%88%98%EA%B0%9C%EB%85%90">https://velog.io/@rlaensk/SQL-%EB%AC%B8%EC%A0%9C%ED%92%80%EC%9D%B4-%ED%95%84%EC%88%98%EA%B0%9C%EB%85%90</a></p>
<p>데이터 모델링에서 중요한 세가지</p>
<ul>
<li><p><mark>성격</mark></p>
</li>
<li><p><mark>행위</mark></p>
</li>
<li><p><mark>관계</mark></p>
</li>
</ul>
<p>기본키를 참조하는 것 = <mark>외래키</mark><br />유일성과 최소성 = <mark>후보키</mark></p>
<p>SQL 실행순서 = <mark>파실인(PEF)</mark></p>
<p>이행 함수 종속성 제거 = <mark>제3정규화</mark></p>
<p>그룹함수 중에서 결합 가능한 모든 집계를 계산하는 것은? = <mark>CUBE</mark></p>
<p>문자열 결합 = <mark>|| 혹은 CONCAT</mark></p>
<p>내부 스키마 = <mark>물리적 저장 구조</mark></p>
<p>Entity를 도출하고 <mark>그린다</mark> → Entity를 <mark>배치한다</mark> → Entity 간 <mark>관계를 설정</mark>한다 → <mark>관계명을 서술</mark>한다 → 관계 <mark>참여도</mark>를 표현한다 → <mark>관계의 필수 여부</mark>를 표현한다</p>
<p>^ = 문자열 <mark>시작</mark><br />$ = 문자열 <mark>끝</mark></p>
<p>계층형 조회에서 가장 상위 레벨 값 = <mark>1</mark></p>
<p>카디널리티 계산식 = <mark>선택도 * 전체 레코드 수</mark></p>
<p><mark>논리적 모델링</mark>은 <mark>정규화</mark>를 무조건 해야 된다</p>
<p><mark>cress join 은 카데시안 곱 발생</mark></p>
<p>주식별자와 관계가 <mark>낮은 단계는? 제3정규화</mark></p>
<p>인조식별자 = 최대한 <mark>범용적인 값 사용</mark></p>
<p>%1 = 마지막이 1로 끝나는</p>
<p>DDL = create , alter , drop , rename , truncate<br />DML = insert , update , delete , select<br />DCL = grant , revoke<br />TCL = commit , rollback , savepoint</p>
<h2 id="heading-642w7j207yswiouqqounuoungeydmcdtirnsp5u">데이터 모델링의 특징</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>특징</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>추상화</td><td>현실 세계를 간략하게 표현한다</td></tr>
<tr>
<td>단순화</td><td>누구나 쉽게 이해할 수 있도록 표현한다</td></tr>
<tr>
<td>명확성</td><td>명확하게 의미가 해석되어야 하고 한 가지 의미를 가져야 한다</td></tr>
</tbody>
</table>
</div><h2 id="heading-642w7j207yswiouqqounuoungsdri6jqs4q">데이터 모델링 단계</h2>
<h3 id="heading-6rcc64wq7kcbiouqqounuoungq">개념적 모델링</h3>
<ul>
<li><p><mark>전사적 관점</mark>에서 기업의 데이터를 모델링한다</p>
</li>
<li><p><mark>추상화 수준이 가장 높은 수준의 모델링</mark>이다</p>
</li>
<li><p>계층형 데이터 모델, 네트워크 모델, 관계형 모델에 관계없이 <mark>업무 측면에서 모델링</mark>한다</p>
</li>
</ul>
<h3 id="heading-64w866as7kcbiouqqounuoungq">논리적 모델링</h3>
<ul>
<li><p>특정 데이터베이스 모델에 종속한다</p>
</li>
<li><p>식별자를 정의하고 관계, 속성 등을 모두 표현한다</p>
</li>
<li><p>정규화를 통해서 <mark>재사용성을 높인다</mark></p>
</li>
</ul>
<h3 id="heading-66y866as7kcbiouqqounuoungq">물리적 모델링</h3>
<ul>
<li><p>구축할 데이터베이스 관리 시스템에 테이블, 인덱스 등을 생성하는 단계이다</p>
</li>
<li><p><mark>성능, 보안, 가용성, 등을 고려하여 database를 구축</mark>한다</p>
</li>
</ul>
<h2 id="heading-642w7j207yswiouqqounuoungsdqtidsoja">데이터 모델링 관점</h2>
<h3 id="heading-642w7j207ysw">데이터</h3>
<ul>
<li><p>비즈니스 프로세스에서 사용되는 데이터를 의미한다</p>
</li>
<li><p>구조 분석 , 정적 분석</p>
</li>
</ul>
<h3 id="heading-7zse66gc7is47iqk">프로세스</h3>
<ul>
<li><p>비즈니스 프로세스에서 수행하는 작업을 의미함</p>
</li>
<li><p>시나리오 분석, 도메인 , 동적 분석</p>
</li>
</ul>
<h3 id="heading-642w7j207ysw7jmaio2uhouhnoyeuoykpa">데이터와 프로세스</h3>
<ul>
<li><p>프로세스와 데이터 간의 관계를 의미함</p>
</li>
<li><p>CRUD(Create , Read , Update , Delete) 분석</p>
</li>
</ul>
<h2 id="heading-3">3층 스키마의 독립성</h2>
<h3 id="heading-64w866as7kcbioupheumveyesq">논리적 독립성</h3>
<ul>
<li>개념 스키마가 변경되더라도 외부 스키마가 영향을 받지 않는 것이다</li>
</ul>
<h3 id="heading-66y866as7kcbioupheumveyesq">물리적 독립성</h3>
<ul>
<li>내부 스키마가 변경되더라도 개념 스키마가 영향을 받지 않는 것이다</li>
</ul>
<h2 id="heading-3-p52">3층 스키마 구조(p52)</h2>
<h3 id="heading-7jm467aaioykpo2cpounia">외부 스키마</h3>
<ul>
<li><p>사용자 관점, 업무상 관련이 있는 data 접근이다</p>
</li>
<li><p>관련 Database의 <mark>View</mark>를 표시한다</p>
</li>
<li><p><mark>응용 프로그램이 접근하는 Database를 정의</mark>한다</p>
</li>
</ul>
<h3 id="heading-6rcc64wqioykpo2cpounia">개념 스키마</h3>
<ul>
<li><p>설계자 관점, 사용자 전체집단의 Database 구조이다.</p>
</li>
<li><p>전체 Database 내의 규칙과 구조를 표현한다.</p>
</li>
<li><p><mark>통합 database 구조</mark>이다</p>
</li>
</ul>
<h3 id="heading-64k067aaioykpo2cpounia">내부 스키마</h3>
<ul>
<li><p>개발자 관점, Database의 <mark>물리적 저장 구조</mark>이다</p>
</li>
<li><p>data 저장 구조 , 레코드 구조 , 필드 정의 , 인덱스 등을 의미함</p>
</li>
</ul>
<h2 id="heading-entityp53">Entity(p53)</h2>
<p>Entity는 업무에서 관리해야 하는 <mark>데이터 집합</mark>을 의미하며 저장되고 관리되어야 하는 데이터이다<br />Entity는 <mark>개념 , 사건 , 장소 등을 의미하는 명사</mark>이다</p>
<h2 id="heading-entity-p54">Entity의 특징(p54)</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>엔터티 특징</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>식별자</td><td>Entity는 <mark>유일한 식별자</mark>가 있어야 한다 ex) 회원ID , 계좌번호</td></tr>
<tr>
<td>인스턴스 집합</td><td><mark>2개 이상의 인스턴스</mark>가 있어야 한다 즉, 고객정보는 2명 이상 있어야 한다</td></tr>
<tr>
<td>속성</td><td>Entity는 <mark>반드시 속성</mark>을 가지고 있다 ex) 고객 Entity에 회원ID , password , name , 주소 , 전화번호</td></tr>
<tr>
<td>관계</td><td>Entity는 <mark>다른 Entity와 최소한 한 개 이상 관계</mark>가 있어야 한다 ex) 고객은 계좌를 개설한다</td></tr>
<tr>
<td>업무</td><td>Entity는 <mark>업무에서 관리되어야 하는 집합</mark>이다 ex) 고객 , 계좌</td></tr>
</tbody>
</table>
</div><h3 id="heading-tip-relation-and-table-instance">TIP) relation and table , Instance</h3>
<ul>
<li><p>relation과 table은 같은 의미라고 해석하면 된다. relation에 기본키 및 제약조건을 설명하면 table이 된다.</p>
</li>
<li><p>단, 릴레이션쉽은 릴레이션 간의 관계를 의미한다</p>
</li>
<li><p>Instance는 릴레이션이 가질 수 있는 값을 의미한다. 간단하게 생각하면 행의 수를 의미한다</p>
</li>
</ul>
<h2 id="heading-entity-p55">Entity 종류(p55)</h2>
<ul>
<li><p>Entity의 종류는 유형과 무형에 따른 종류, Entity가 발생하는 시점에 따른 종류로 나누어진다.</p>
</li>
<li><p>Entity를 유형과 무형으로 분류하는 기준은 물리적 형태의 존재 여부이다.</p>
</li>
</ul>
<h3 id="heading-entity">유형 Entity</h3>
<ul>
<li>업무에서 도출되며 <mark>지속적으로 사용되는 Entity</mark>이다<br />  ex) 고객 , 강사 , 사원 등</li>
</ul>
<h3 id="heading-entity-1">개념 Entity</h3>
<ul>
<li><p>유형 Entity는 물리적 형태가 있지만, <mark>개념 Entity는 물리적 형태가 없다.</mark></p>
</li>
<li><p>개념적으로 사용되는 Entity이다<br />  ex) 거래소 종목 , 코스닥 종목 , 생명보험 상품</p>
</li>
</ul>
<h3 id="heading-entity-2">사건 Entity</h3>
<ul>
<li><mark>비즈니스 프로세스를 실행하면서 생성</mark>되는 Entity이다.<br />  ex) 주문 , 체결 , 취소주문 , 수수료 청구 등</li>
</ul>
<h2 id="heading-entity-3">발생 시점에 따른 Entity 종류</h2>
<h3 id="heading-entity-4">기본 Entity</h3>
<ul>
<li><p><mark>키 Entity</mark>라고도 한다</p>
</li>
<li><p>다른 Entity로부터 영향을 받지 않고 <mark>독립적으로 생성</mark>되는 Entity이다<br />  ex) 고객 , 상품 ,부서 등</p>
</li>
</ul>
<h3 id="heading-entity-entity">중심 Entity(메인 Entity)</h3>
<ul>
<li><p>기본 Entity와 행위 Entity 간의 중간에 있는 것이다</p>
</li>
<li><p>즉, 기본 Entity로부터 발생되고 행위 Entity를 생성하는 것이다<br />  ex) 계좌 , 주문 ,취소 , 체결 등</p>
</li>
</ul>
<h3 id="heading-entity-5">행위 Entity</h3>
<ul>
<li>2개 이상의 Entity로부터 발생된다<br />  ex) 주문 이력 , 체결 이력 등</li>
</ul>
<h2 id="heading-7ian7isx">속성</h2>
<ul>
<li><p>속성이라는 것은 업무에서 필요한 정보인 엔터티가 가지는 항목이다</p>
</li>
<li><p>속성은 더 이상 분리되지 않는 단위로, 업무에 필요한 data 를 저장할 수 있다</p>
</li>
<li><p>인스턴스의 구성요소이고 의미적으로 <mark>더 이상 분해되지 않는다</mark></p>
</li>
</ul>
<h2 id="heading-7ian7isx7j2yio2kueynleqzvcdsooxrpzg">속성의 특징과 종류</h2>
<ul>
<li><p>속성은 업무에서 관리되는 정보이다</p>
</li>
<li><p>속성은 일반적으로 하나의 값만 가진다</p>
</li>
<li><p>주식별자에게 함수적으로 종속된다. 즉, 기본키가</p>
</li>
</ul>
<h2 id="heading-p57">분해 여부에 따른 속성의 종류(p57)</h2>
<h3 id="heading-64uo7j28ioygjeyesq">단일 속성</h3>
<ul>
<li><mark>하나의 의미</mark>로 구성된 것으로 회원ID , 이름 등이다</li>
</ul>
<h3 id="heading-67o17zwpioygjeyesq">복합 속성</h3>
<ul>
<li><p>여러 개의 의미가 있는 것으로 대표적으로 <mark>주소</mark>가 있다</p>
</li>
<li><p>주소는 시, 군, 동 등으로 분해될 수 있다</p>
</li>
</ul>
<h3 id="heading-64uk7ksr6rcsioygjeyesq">다중값 속성</h3>
<ul>
<li><p>속성에 <mark>여러 개의 값</mark>을 가질 수 있는 것으로 예를 들어 상품 리스트가 있다</p>
</li>
<li><p>상품</p>
</li>
<li><p>다중값 속성은 엔터티로 분해된다</p>
</li>
</ul>
<h2 id="heading-p58">특성에 따른 속성의 종류 (p58)</h2>
<h3 id="heading-6riw67o4ioygjeyesq">기본 속성</h3>
<p>비즈니스 프로세스에서 도출되는 <mark>본래의 속성</mark>이다<br />ex) 회원ID , 이름 , 계좌번호 , 주문 일자 등</p>
<p><mark>업무로 부터 축출</mark>한 속성으로 <mark>제일 많이 발생</mark></p>
<h3 id="heading-7isk6roeioygjeyesq">설계 속성</h3>
<ul>
<li><p><mark>데이터 모델링 과정에서 발생</mark>되는 속성이다</p>
</li>
<li><p><mark>유일한 값을 부여</mark>한다</p>
</li>
</ul>
<p>ex) <mark>상품코드</mark> , <mark>일련번호</mark> , 지점 코드 등</p>
<p>설계시 규칙화 등이 필요해 만든 속성 <mark>코드성이나 일련번호</mark> 등</p>
<h3 id="heading-7yym7iodioygjeyesq">파생 속성</h3>
<p><mark>다른 속성에 의해서 만들어지는 속성</mark>이다<br />ex) 합계 , 평균 등</p>
<h3 id="heading-tip-domain">TIP) Domain이란?</h3>
<p>Domain은 <mark>속성</mark>이 가질 수 있는 <mark>값의 범위</mark>이다<br />ex) 성별이라는 속성의 Domain은 남자와 여자이다</p>
<h2 id="heading-pk">주식별자(기본키, PK)</h2>
<p><mark>=&gt;최대유불존</mark></p>
<p>최소성<br />대표성<br />유일성<br />불변성<br />존재성</p>
<h2 id="heading-p63">키의 종류(p63)</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>데이터베이스 키</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>기본키</td><td>후보키 중에서 엔터티를 대표할 수 있는 키이다</td></tr>
<tr>
<td>후보키</td><td>호보키는 <mark>유일성과 최소성</mark>을 만족하는 키이다</td></tr>
<tr>
<td>슈퍼키</td><td></td></tr>
<tr>
<td>대체키</td><td></td></tr>
<tr>
<td>외래키</td><td>하나 혹은 다수의 다른 테이블의 기본 키 필드를 가리키는 것으로 참조 <mark>무결성</mark>을 확인하기 위해서 사용되는 키이다 즉, 허용된 데이터 값만 데이터베이스에 저장하기 위해서 사용된다 ex) 부서코드 , 상품코드</td></tr>
</tbody>
</table>
</div><h2 id="heading-64ya7zgc7isxioyxrou2goyxkcdrlldrpbgg7iud67oe7j6q7j2yioyiheulma">대표성 여부에 따른 식별자의 종류</h2>
<h3 id="heading-7ko87iud67oe7j6q">주식별자</h3>
<ul>
<li><p>유일성</p>
</li>
<li><p>다른 엔터티</p>
</li>
</ul>
<h3 id="heading-67o07kgwioylneuzhoyeka">보조 식별자</h3>
<ul>
<li>유일성</li>
</ul>
<h2 id="heading-7iod7isxioyxrou2goyxkcdrlldrpbgg7iud67oe7j6q7j2yioyiheulma">생성 여부에 따른 식별자의 종류</h2>
<h3 id="heading-64k067aaioylneuzhoyeka">내부 식별자</h3>
<h3 id="heading-7jm467aaioylneuzhoyeka">외부 식별자</h3>
<h2 id="heading-multi-row-subqueryp135">Multi row Subquery(p135)</h2>
<p>Multi row Subquery는 서브쿼리 결과가 여러 개의 행을 반환하는 것으로 다중 행 연산자를 사용해야 한다</p>
<h3 id="heading-64uk7ksrio2wisdruytqtzag7jew7ikw7j6q">다중 행 비교 연산자</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>다중 행 연산</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>IN</td><td>Main query의 비교조건이 <mark>Subquery의 결과 중 하나만 동일하면 참</mark>이 된다(OR 조건)</td></tr>
<tr>
<td>ALL</td><td>Main query와 Subquery의 <mark>결과가 모두 동일하면 참</mark>이 된다 &lt;ALL : 최솟값을 반환한다 &gt;ALL : 최댓값을 반환한다</td></tr>
<tr>
<td>ANY</td><td>Main query</td></tr>
<tr>
<td>EXISTS</td><td>Main query와 <mark>Subquery의 결과가 하나라도 존재하면 참</mark>이 된다</td></tr>
</tbody>
</table>
</div><h2 id="heading-minusp148">차집합을 만드는 MINUS(p148)</h2>
<p>MINUS 연산은 두 개의 테이블에서 차집합을 조회함<br />먼저 쓴 SELECT문에는 있고 뒤에 쓰는 SELECT문에는 없는 집합을 조회하는 것이다<br />MS-SQL에서는 <mark>MINUS</mark>와 동일한 연산이 <mark>EXCEPT</mark>이다<mark>(MINUS = EXCEPT)</mark></p>
<h2 id="heading-equi-amp-join">EQUI(등가) &amp; JOIN(교집합)</h2>
<p>조인은 여러 개의 릴레이션을 사용해서 새로운 릴레이션을 만드는 과정이다</p>
<h2 id="heading-p159">윈도우 함수 구조(p159)</h2>
<h3 id="heading-arguments">ARGUMENTS(인수)</h3>
<ul>
<li>윈도우 함수에 따라서 0 ~ N개의 인수를 설정한다</li>
</ul>
<h3 id="heading-partition-by">PARTITION BY</h3>
<ul>
<li><mark>전체 집합을 기준에 의해 소그룹</mark>으로 나눈다</li>
</ul>
<h3 id="heading-order-by">ORDER BY</h3>
<ul>
<li>어떤 항목에 대해서 정렬한다</li>
</ul>
<h3 id="heading-windowing">WINDOWING</h3>
<ul>
<li><p>행 기준의 범위를 정한다</p>
</li>
<li><p><mark>ROWS: 물리적 결과의 행 수</mark></p>
</li>
<li><p><mark>RANGE: 논리적인 값에 의한 범위</mark></p>
</li>
</ul>
<h2 id="heading-group-by-p159">GROUP BY와 윈도우 함수 차이점(p159)</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>구분</td><td>GROUP BY</td><td>윈도우 함수</td></tr>
</thead>
<tbody>
<tr>
<td>기능</td><td>자르기와 집약</td><td>자르기</td></tr>
<tr>
<td>특징</td><td></td><td></td></tr>
<tr>
<td>차이점</td><td>행 수가 감소</td><td>행 수는 유지</td></tr>
</tbody>
</table>
</div><h2 id="heading-windowingp160">WINDOWING(p160)</h2>
<h3 id="heading-rows">ROWS</h3>
<ul>
<li>부분집합인 윈도우 크기를 물리적</li>
</ul>
<h3 id="heading-range">RANGE</h3>
<ul>
<li>논리적인 주소에 의해 행 집합을 지정한다</li>
</ul>
<h3 id="heading-betwwen-and">BETWWEN ~ AND</h3>
<ul>
<li>윈도우</li>
</ul>
<h3 id="heading-unbounded-preceding">UNBOUNDED PRECEDING</h3>
<h3 id="heading-unbounded-following">UNBOUNDED FOLLOWING</h3>
<h3 id="heading-current-row">CURRENT ROW</h3>
<h2 id="heading-p164">순위 관련 윈도우 함수(p164)</h2>
<p>RANK = <mark>동일한 순위는 동일한 값이 부여</mark><br /><mark>ex) 1 2 2 4</mark></p>
<p>DENSE_RANK = <mark>동일한 순위를 하나의 건수로 계산</mark><br /><mark>ex) 1 2 2 3</mark></p>
<p>ROW_NUMBER = <mark>고유의 순위를 부여</mark><br /><mark>ex) 1 2 3 4</mark></p>
<h2 id="heading-p166">집계 관련 윈도우 함수(p166)</h2>
<p>SUM : 파티션 별로 <mark>합계</mark>를 계산한다<br />AVG : 파티션 별로 <mark>평균</mark>을 계산한다<br />COUNT : 파티션 별로 <mark>행 수</mark>를 계산한다<br />MAX &amp; MIN : 파티션 별로 <mark>최댓값</mark>과 <mark>최솟값</mark>을 계산한다</p>
<h2 id="heading-p167">행 순서 관련 윈도우 함수(p167)</h2>
<p>FIRST_VALUE : 파티션에서 <mark>가장 처음에 나오는 값</mark>을 구한다<br /><mark>MIN 함수</mark>를 사용해서 같은 결과를 구할 수 있다</p>
<p>LAST_VALUE : 파티션에서 <mark>가장 나중에 나오는 값</mark>을 구한다<br /><mark>MAX 함수</mark>를 사용해서 같은 결과를 구할 수 있다</p>
<p>LAG : <mark>이전 행</mark>을 가지고 온다</p>
<p>LEAD : 윈도우에서 <mark>특정 위치의 행</mark>을 가지고 온다<br /><mark>기본값이 1</mark>이다</p>
<h2 id="heading-inline-viewp172">Inline view(p172)</h2>
<p>Inline view는 SELECT문에서 FROM절에 사용되는 서브쿼리를 의미한다</p>
<h2 id="heading-partition-p184">partition 기능(p184)</h2>
<ul>
<li><p>파티션은 대용량의 테이블을 여러 개의 데이터 파일에 분리해서 저장한다</p>
</li>
<li><p>테이블</p>
</li>
<li><p>파티션은</p>
</li>
<li><p>partition은</p>
</li>
<li><p>데이터를 조회할 때 데이터의 범위를 줄여서 성능을 향상시킨다</p>
</li>
</ul>
<h3 id="heading-range-partition">Range partition</h3>
<ul>
<li><mark>값의 범위를 기준</mark>으로 여러 개의 파티션으로 데이터를 나누어 저장하는 것이다</li>
</ul>
<h3 id="heading-list-partition">List partition</h3>
<ul>
<li><mark>특정 값을 기준</mark>으로 분할하는 방법이다</li>
</ul>
<h3 id="heading-hash-partition">Hash partition</h3>
<ul>
<li><p>database 관리 시스템이 내부적으로 Hash 함수를 사용해서 data를 분할한다</p>
</li>
<li><p>database 관리 시스템이 <mark>알아서 분할하고 관리</mark>하는 것이다</p>
</li>
</ul>
<h3 id="heading-composite-partition">Composite partition</h3>
<ul>
<li>여러 개의 파티션 기법을 조합해서 사용하는 것이다</li>
</ul>
<h2 id="heading-oracle">Oracle 정규표현식</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>구분</td><td>의미</td></tr>
</thead>
<tbody>
<tr>
<td>REGEXP_LIKE</td><td>LIKE문과 유사하고 정규표현식을 검색한다</td></tr>
<tr>
<td>REGEXP_REPLACE</td><td>정규표현식을 검색한 후에 <mark>문자열을 변경</mark>한다</td></tr>
<tr>
<td>REGEXP</td><td>정규표현식을 검색하고 <mark>위치를 반환</mark>한다</td></tr>
<tr>
<td>REGEXP</td><td>정규표현식을 검색하고</td></tr>
<tr>
<td>REGEXP</td><td>정규표현식을 검색하고</td></tr>
</tbody>
</table>
</div><h2 id="heading-p197">테이블의 모든 데이터 삭제(p197)</h2>
<h3 id="heading-delete-from">DELETE FROM 테이블명;</h3>
<ul>
<li><p>테이블의 모든 데이터를 삭제한다</p>
</li>
<li><p>데이터가 삭제되어도 테이블의 용량은 감소하지 않는다</p>
</li>
</ul>
<h3 id="heading-truncate-table">TRUNCATE TABLE 테이블명;</h3>
<ul>
<li><p>테이블의 모든 데이터를 삭제한다</p>
</li>
<li><p>데이터가 삭제되면 <mark>테이블의 용량은 초기화</mark>된다</p>
</li>
</ul>
<h2 id="heading-tclp200">TCL(p200)</h2>
<h3 id="heading-commit">COMMIT</h3>
<ul>
<li>COMMIT은 INSERT</li>
</ul>
<h3 id="heading-rollback">ROLLBACK</h3>
<ul>
<li>ROLLBACK을 실행하면 데이터에 대한 변경 사용을 모두 취소하고 트랜잭션을 종료한다</li>
</ul>
<h3 id="heading-savepoint">SAVEPOINT(저장점)</h3>
<ul>
<li>SAVEPOINT는 트랜잭션을 작게 분할하여</li>
</ul>
<h2 id="heading-view-p211">view 장단점(p211)</h2>
<p>view란? (view = 가상 테이블)</p>
<p>장점: 보안 기능 , 데이터 관리 간단 , SELECT문이 간단<br />단점: 연산이 제약 , 구조를 변경할 수는 없다</p>
<h2 id="heading-grantp212">GRANT(p212)</h2>
<ul>
<li><p>GRANT문은 DB 사용자에게 <mark>권한을 부여한다</mark></p>
</li>
<li><p>DB 사용을 위해서는 권한이 필요하며 연결 , 입력 , 수정 , 삭제 , 조회를 할 수 있다.</p>
</li>
</ul>
<h2 id="heading-with-grant-option-admin-optionp213">WITH GRANT OPTION과 ADMIN OPTION(p213)</h2>
<h3 id="heading-with-grant-option">WITH GRANT OPTION</h3>
<ul>
<li><p><mark>특정 사용자</mark>에게</p>
</li>
<li><p>권한을 A 사용자가 B에 부여하고 다시 B가 다시 C를 부여한 후에 권한을 취소(Revoke)하면 모든 권한이 회수된다</p>
</li>
</ul>
<h3 id="heading-with-admin-option">WITH ADMIN OPTION</h3>
<ul>
<li><p>Table에 대한 <mark>모든 권한을 부여한다</mark></p>
</li>
<li><p>권한을 A</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Vpn을 이용한 하이브리드 클라우드 구축하기]]></title><description><![CDATA[※ 터널링
VPN은 두 지점 간의 트래픽들을 암호화해서 누군가가 그 트래픽을 해석할 수 없도록 터널링 한다.
터널링을 통해서 캡슐화되어 있어서 실제로 WireShark 같은 걸로 통해서 트래픽을 도청하려고 보면
IP 등이 알던 것과는 전혀 다르게 되어있어서 해커들이 원하는 정보를 얻을 수 없게 된다.
키를 가지고 데이터를 암호화시키는 거고 터널 내부에 IP CIDR가 있는데 내가 로컬에서 이용하고 있는
데이터베이스의 10.0.0.0/24와 내가...]]></description><link>https://haroldrippin.hashnode.dev/vpn</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/vpn</guid><category><![CDATA[AWS]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Wed, 25 Dec 2024 15:43:29 GMT</pubDate><content:encoded><![CDATA[<p><strong>※ 터널링</strong></p>
<p>VPN은 두 지점 간의 트래픽들을 암호화해서 누군가가 그 트래픽을 해석할 수 없도록 터널링 한다.</p>
<p>터널링을 통해서 캡슐화되어 있어서 실제로 WireShark 같은 걸로 통해서 트래픽을 도청하려고 보면</p>
<p>IP 등이 알던 것과는 전혀 다르게 되어있어서 해커들이 원하는 정보를 얻을 수 없게 된다.</p>
<p>키를 가지고 데이터를 암호화시키는 거고 터널 내부에 IP CIDR가 있는데 내가 로컬에서 이용하고 있는</p>
<p>데이터베이스의 10.0.0.0/24와 내가 만든 MY-VPC의 172.32.0.0/16이 있는데</p>
<p>터널링 기능을 사용하게 되면 해커가 트래픽을 도청해서 볼 때 172.32.0.0/16이란 CIDR가 없고 </p>
<p>10.0.0.0/24라는 CIDR도 없다. </p>
<p>터널 안에서만 왔다 갔다 하는 IP가 따로 정해져 있기 때문에 해커가 도청을 해도 의미가 없게 된다.</p>
<p>(해커한테 트래픽 도청의 의미는 우선적으로 출발지와 목적지의 IP를 먼저 알아야 하는데</p>
<p>터널링 때문에 의미가 없어진다.)</p>
<p><a target="_blank" href="https://my-studyroom.tistory.com/entry/AWS-%EC%8B%A4%EC%8A%B5-VPN%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-%ED%95%98%EC%9D%B4%EB%B8%8C%EB%A6%AC%EB%93%9C-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0">vPN을 이용한 하이브리드 클라우드 구축하기 part 1</a></p>
<p><a target="_blank" href="https://popcorn-overflow.tistory.com/41?category=711509">https://popcorn-overflow.tistory.com/41?category=711509</a></p>
]]></content:encoded></item><item><title><![CDATA[blockchin test]]></title><description><![CDATA[블록체인
https://borntodevelop.tistory.com/개발이 체질인 나그네
https://geru.tistory.com/40사이버보안(포트 스캐닝)]]></description><link>https://haroldrippin.hashnode.dev/blockchin-test</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/blockchin-test</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Fri, 22 Nov 2024 13:20:12 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://velog.io/@vamprodo47/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%ED%8A%B8%EB%A6%B4%EB%A0%88%EB%A7%88">블록체인</a></p>
<p><a target="_blank" href="https://borntodevelop.tistory.com/">https://borntodevelop.tistory.com/</a><br />개발이 체질인 나그네</p>
<p><a target="_blank" href="https://geru.tistory.com/40">https://geru.tistory.com/40</a><br />사이버보안(포트 스캐닝)</p>
]]></content:encoded></item><item><title><![CDATA[[컴퓨터 활용 1급] 필기 정리]]></title><description><![CDATA[기출문제
제1강 컴퓨터 분류
처리 능력 분류

슈퍼(초대형) : 빠른 계산 분야에 사용

메인프레임(대형) : 서버용으로 주로 사용(EBCDIC 코드사용)

미니(중소형) : 개인용 컴퓨터와 대형 컴퓨터의 중간

마이크로(개인용)

데스크톱 : 일반적인 컴퓨터

노트북 : 노트 만큼의 크기

팸톱 : 스마트폰 및 PDA

웨어러블 : 입을 수 있는 컴퓨터




사용 목적 분류

전용 : 한가지의 목적을 가진 컴퓨터

범용 : 다양한 용도의 목...]]></description><link>https://haroldrippin.hashnode.dev/1</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/1</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Fri, 15 Nov 2024 07:51:56 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/9l_326FISzk/upload/0b1d98a697e85b08372719b26bf54716.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://cbt.youngjin.com/exam/index.php?no=1">기출문제</a></p>
<h1 id="heading-1">제1강 컴퓨터 분류</h1>
<h2 id="heading-7lky66asioukpeugpsdrtotrpzg">처리 능력 분류</h2>
<ul>
<li><p>슈퍼(초대형) : 빠른 계산 분야에 사용</p>
</li>
<li><p>메인프레임(대형) : 서버용으로 주로 사용(EBCDIC 코드사용)</p>
</li>
<li><p>미니(중소형) : 개인용 컴퓨터와 대형 컴퓨터의 중간</p>
</li>
<li><p>마이크로(개인용)</p>
<ul>
<li><p>데스크톱 : 일반적인 컴퓨터</p>
</li>
<li><p>노트북 : 노트 만큼의 크기</p>
</li>
<li><p><mark>팸톱</mark> : 스마트폰 및 PDA</p>
</li>
<li><p><mark>웨어러블</mark> : 입을 수 있는 컴퓨터</p>
</li>
</ul>
</li>
</ul>
<h2 id="heading-7iks7jqpiouqqeyggsdrtotrpzg">사용 목적 분류</h2>
<ul>
<li><p>전용 : 한가지의 목적을 가진 컴퓨터</p>
</li>
<li><p>범용 : 다양한 용도의 목적을 가진 컴퓨터</p>
</li>
</ul>
<h2 id="heading-642w7j207yswioyiheulmcdrtotrpzg">데이터 종류 분류</h2>
<ul>
<li><p>디지털 : 숫자나 문자와 같은 자료 취급</p>
</li>
<li><p>아날로그 : 연속적인 자료 취급(지진 측정 컴퓨터)</p>
</li>
<li><p>하이브리드 : 디지털 + 아날로그의 장점</p>
</li>
</ul>
<h2 id="heading-642w7j207yswiou2houlma">데이터 분류</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td>디지털 컴퓨터(전자시계)</td><td>아날로그 컴퓨터(바늘시계)</td></tr>
</thead>
<tbody>
<tr>
<td>계산(연산)</td><td>O</td><td>X</td></tr>
<tr>
<td>프로그래밍</td><td>O</td><td>X</td></tr>
<tr>
<td>속도</td><td>느림</td><td>빠름</td></tr>
<tr>
<td>정확도</td><td>높음</td><td>낮음</td></tr>
<tr>
<td>회로</td><td>논리회로</td><td>증폭회로</td></tr>
<tr>
<td>취급 데이터</td><td>숫자 , 문자 , 이산데이터</td><td>온도 , 전류 , 연속데이터</td></tr>
</tbody>
</table>
</div><h2 id="heading-2-hard-warecpu">제2강 Hard Ware_CPU</h2>
<h3 id="heading-cpu">CPU-중앙처리장치</h3>
<p>기억장치(레지스터)</p>
<ul>
<li><mark>CPU 내부의 임시 기억장치(속도가 가장 빠름)</mark></li>
</ul>
<p>연산장치(산술논리장치 ALU)</p>
<ul>
<li><p><mark>가산기 - 덧셈</mark></p>
</li>
<li><p><mark>보수기 - 보수하여 뺄셈</mark></p>
</li>
<li><p><mark>누산기 - 연산 결과 일시 기억</mark></p>
</li>
<li><p><mark>상태 레지스터 - 상태정보기록</mark></p>
</li>
</ul>
<p>제어장치(CU)</p>
<ul>
<li><p><mark>프로그램카운터(PC) - 다음에 수행할 명령어 번지</mark>(주소)를 기억</p>
</li>
<li><p>명령레지스터 - 명령어의 내용 기억</p>
</li>
<li><p>해독기 - 명령어 해독</p>
</li>
<li><p>부호기 - 제어신호 생성</p>
</li>
<li><p>그 외 MAR , MBR 등등이 있음</p>
</li>
</ul>
<p>ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>종류</strong></td><td><strong>속도</strong></td><td><strong>집적도</strong></td><td><strong>재충전</strong></td></tr>
</thead>
<tbody>
<tr>
<td>SRAM</td><td>빠름</td><td>낮음</td><td>X</td></tr>
<tr>
<td>DRAM</td><td>느림</td><td>높음</td><td>O</td></tr>
</tbody>
</table>
</div><h2 id="heading-7kca7j6l6ro8ifxb7zmixf0g66as67o466mu64m0">저장과 [홈] 리본메뉴</h2>
<h3 id="heading-7kca7j6l">저장</h3>
<p>지원하는 파일 형식(확장자)</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>통합 문서 XLSX</td><td>구버전 : XLS</td></tr>
</thead>
<tbody>
<tr>
<td>서식 문서 XLTX</td><td>구버전 : XLT</td></tr>
<tr>
<td>매크로 통합 문서 XLSM</td><td></td></tr>
<tr>
<td>매크로 서식 문서 XLTM</td><td></td></tr>
<tr>
<td>바이너리 통합 문서 XLSB</td></tr>
</tbody>
</table>
</div><h2 id="heading-4">제4강 보조기억장치의 목적과 종류</h2>
<p>데이터를 저장하는 창고 역할(비휘발성)</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>SSD</strong></td><td></td></tr>
</thead>
<tbody>
<tr>
<td>HDD(하드디스크)</td><td></td></tr>
<tr>
<td>CD-RW</td><td></td></tr>
<tr>
<td>DVD</td><td>4.7 ~ 17GB 저장가능</td></tr>
<tr>
<td>BlU-ray</td><td>25 ~ 50GB 저장가능</td></tr>
</tbody>
</table>
</div><h2 id="heading-67o07kgw6riw7ja17j6l7lmy7j2yioy2loqwgoq4soukpq">보조기억장치의 추가기능</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>파티션</strong></td><td>하나의 기억</td></tr>
</thead>
<tbody>
<tr>
<td>포맷</td><td>모두를 지우고</td></tr>
<tr>
<td>RAID</td><td>스트라이핑</td></tr>
<tr>
<td></td><td>미러링</td></tr>
</tbody>
</table>
</div><h2 id="heading-7zwy65oc65su7iqk7ygsioyxsoqyscdrsknsi50">하드디스크 연결 방식</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>병렬 방식</strong></td><td>P-ATA , IDE , EIDE</td></tr>
</thead>
<tbody>
<tr>
<td>직렬 방식</td><td>S-ATA ,</td></tr>
</tbody>
</table>
</div><h2 id="heading-5-hard-ware">제5강 Hard Ware_기타메모리</h2>
<h3 id="heading-6riw7yoa66mu66qo66as">기타메모리</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><mark>캐시 메모리</mark></td><td><mark>SRAM</mark>을 이용하여 <mark>CPU</mark>와 <mark>주기억장치</mark> 사이의 <mark>속도차이</mark>를 극복함</td></tr>
</thead>
<tbody>
<tr>
<td><mark>가상 메모리</mark></td><td><mark>보조기억장치</mark>를 <mark>주기억장치처럼 사용</mark>하는 메모리</td></tr>
<tr>
<td><mark>플래시 메모리</mark></td><td><mark>MP3</mark>나 <mark>디지털카메라</mark> 등에서 사용되는 일종의 <mark>EEPROM</mark></td></tr>
<tr>
<td>버퍼 메모리</td><td>data를 일시적으로 저장해 속도차이를 해결</td></tr>
<tr>
<td>연상 메모리(연관 메모리)</td><td>내용참조(매핑방식) 주소가 아닌 내용을 참조</td></tr>
</tbody>
</table>
</div><h2 id="heading-7ian64ekou5ooulucdsijzshjwp">속도(빠른 순서)</h2>
<p>레지스터(CPU) → 캐시메모리 → 주기억 → 보조기억</p>
<h2 id="heading-6-hard-ware">제6강 Hard Ware_ 메인보드와 기타</h2>
<h3 id="heading-66mu7j24kouniounlcnrs7trk5w">메인(마더)보드</h3>
<p>컴퓨터를 구성하는 모든 장치들이 연결되는 기판</p>
<p>칩셋 : 메인보드에 장착된 장치를 제어함<br /><mark>버스</mark> : 제어신호 , 데이터 , 주소 전송에 사용되는 일종의 통신 <mark>통로</mark></p>
<ul>
<li><p>내부버스 : 레지스터 ←→ 레지스터</p>
</li>
<li><p>외부버스 : CPU ←→ 주변장치</p>
<ul>
<li><p>구조에 따라 : 시스템 버스 , I/O 버스</p>
</li>
<li><p>신호 형태에 따라 : 주소 버스 , 제어 버스 , 데이터 버스</p>
</li>
</ul>
</li>
<li><p>확장버스 : 메인보드 ←→ 추가 장치(PCI)</p>
</li>
</ul>
<h3 id="heading-7ys7yq4">포트</h3>
<ul>
<li>외부 장치를 연결하기 위한 접속 부분(컴퓨터 뒷면)</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>PS2</td><td>마우스와 키보드를 연결하는 포트</td></tr>
</thead>
<tbody>
<tr>
<td>VGA , DVI , HDMI , DP</td><td>영상 기기를 연결하는 포트</td></tr>
<tr>
<td>Ehternet(LAN)</td><td>이더넷(LAN) 케이블을 연결하는 포트</td></tr>
<tr>
<td>USB</td><td><mark>127개</mark>의 주변기기 연결가능</td></tr>
<tr>
<td></td><td>직렬 포트보다 더 빠른 <mark>직렬</mark> 연결방식</td></tr>
<tr>
<td></td><td><mark>PnP</mark>(Plug And Play)의 지원으로 별도의 설치 없이 사용 가능</td></tr>
<tr>
<td></td><td><mark>USB 3.0</mark> = <mark>파란색</mark></td></tr>
</tbody>
</table>
</div><h3 id="heading-7lge64sq6ro8ioyduo2esoufve2kua">채널과 인터럽트</h3>
<ul>
<li><p>채널 : CPU로부터 제어권한을 위임받아 <mark>CPU</mark>와 <mark>입출력장치</mark> 사이의 <mark>속도차이</mark>의 문제를 해결</p>
</li>
<li><p>인터럽트 : 작업 중 예기치 않은 상황이 발생되면 일시적으로 중단하고 발생된 상황을 처리한 뒤 실행중인 작업으로 복귀하여 계속 처리하는 것</p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td><mark>외부 인터럽트</mark></td><td>전원, 입출력장치, 타이머등 외부적인 요인에 의해 발생</td></tr>
</thead>
<tbody>
<tr>
<td><mark>내부 인터럽트</mark></td><td>잘못된 명령 및 데이터 사용시 발생되는 일종의 트랩</td></tr>
<tr>
<td><mark>소프트웨어 인터럽트</mark></td><td>명령의 요청에 의해 발생</td></tr>
</tbody>
</table>
</div><h2 id="heading-7">제7강 컴퓨터 단위와 문자 코드</h2>
<h3 id="heading-6riw7ja1ioyaqeufisdri6jsniq">기억 용량 단위</h3>
<p>BIT(0 , 1) → BYTE(8bit) → KB(1024Byte) → MB(1024KB) → GB(1024MB) → TB(1024GB) → PB(1024TB)</p>
<ul>
<li>1024 = 2^10</li>
</ul>
<h3 id="heading-7lky66asioygjeuphcdri6jsniq">처리 속도 단위</h3>
<p>ms(10^-3) μs→ (10^-6) → ns(10^-9) → ps(10^-12) → fs(10^-15) → as(10^-18)</p>
<p>밀리 → 마이크로 → 나노 → 피코 → 펨토 → 아토</p>
<h3 id="heading-7j6q66omioq1royessdri6jsniq">자료 구성 단위</h3>
<p>Bit → Nibble(4Bit) → Byte(8Bit) → Word(명령어 단위) → Field → Recode → File → DB</p>
<ul>
<li><p>1Byte = 숫자, 영어, 공백, 특수문자(반각문자)</p>
</li>
<li><p>2Byte = 한글, 한자(전각문자)</p>
</li>
</ul>
<h3 id="heading-66y47j6qioy9loutna">문자 코드</h3>
<p><mark>BCD</mark></p>
<ul>
<li><p><mark>크기</mark> : 6Bit(2^6 = 64)</p>
</li>
<li><p>구성 : Zone bit 2개 + Digit 4개</p>
</li>
</ul>
<p><mark>ASCII</mark></p>
<ul>
<li><p><mark>크기 </mark> : 7Bit(2^7 = 128)</p>
</li>
<li><p>구성 : Zone bit 3개 + Digit 4개</p>
</li>
<li><p><mark>용도</mark> : 정보통신용</p>
</li>
<li><p><mark>기타</mark> : 에러 검출용 패리티비트(1Bit)를 추가함 , <mark>단 확장ASCII는 8Bit 사용</mark>함</p>
</li>
</ul>
<p><mark>EBCDIC</mark></p>
<ul>
<li><p><mark>크기</mark> : 1Byte(8Bit = 2^8 = 256)</p>
</li>
<li><p>구성 : Zone bit 4개 + Digit 4개</p>
</li>
<li><p>용도 : 대형(메인프레임)컴퓨터 사용</p>
</li>
</ul>
<p><mark>UNICODE</mark></p>
<ul>
<li><p><mark>크기</mark> : 2Byte(16Bit = 2^16 = 65536)</p>
</li>
<li><p><mark>용도</mark> : 국제 문자 코드</p>
</li>
</ul>
<p>&lt;참고&gt;</p>
<ul>
<li><p>에러검출 : Parity bit</p>
</li>
<li><p>에러검출교정 : Hamming Code</p>
</li>
</ul>
<h2 id="heading-8-os-soft-ware">제8강 OS 와 Soft Ware</h2>
<h3 id="heading-osoperating-system">OS(Operating System)</h3>
<ul>
<li><p>H/W , S/W를 관리하고 사용자에게 편의를 제공 함</p>
</li>
<li><p>종류 : Windows , MacOS , UNIX , LINUX , DOS 등</p>
</li>
<li><p><mark>OS 목적</mark></p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td><mark>응답시간 단축</mark></td><td>결과를 얻어질 때 까지의 시간</td></tr>
</thead>
<tbody>
<tr>
<td><mark>처리능력 향상</mark></td><td>시간 내 처리할 수 있는 일의 양</td></tr>
<tr>
<td><mark>신뢰도 향상</mark></td><td>작업을 정확하게 처리하는 정도</td></tr>
<tr>
<td><mark>사용가능도 향상</mark></td><td>시스템을 사용할 필요가 있을 때 즉시 사용가능한 정도</td></tr>
</tbody>
</table>
</div><h3 id="heading-system-soft-ware">System Soft Ware</h3>
<ul>
<li><p>시스템 운영에 필요한 기본환경을 제공하는 <mark>SW운영체제</mark>, DBMS등이 있고 제어프로그램과 처리 프로그램으로 나뉨</p>
</li>
<li><p><mark>제어프로그램 : 감시 , 작업관리 , 데이터관리</mark></p>
</li>
<li><p><mark>처리 프로그램 : 서비스, 문제처리, 언어번역</mark></p>
</li>
</ul>
<h3 id="heading-soft-ware">Soft Ware 종류</h3>
<p><mark>공개</mark></p>
<ul>
<li><p><mark>프리웨어 : 대가 없이 무료</mark>로 사용하는 SW</p>
</li>
<li><p><mark>오픈소스 : 소스코드까지 무료</mark>로 사용하는 SW</p>
</li>
<li><p>애드웨어 : 광고를 보는 대가로 무료 사용하는 SW</p>
</li>
</ul>
<p><mark>체험판</mark></p>
<ul>
<li><p>셰어웨어 : <mark>일정 기간 동안 무료 사용</mark>하는 SW</p>
</li>
<li><p>데모버전 : 일부 기능 제한하여 사용하는 SW</p>
</li>
</ul>
<p><mark>평가판</mark></p>
<ul>
<li><p>알파버전 : 개발자 테스트용 SW</p>
</li>
<li><p>베타버전 : <mark>일반인 테스트</mark>용 SW</p>
</li>
</ul>
<p>주문형</p>
<ul>
<li><p>Custom : 특정 조직, 개인에 의해 사용될 목적</p>
</li>
<li><p>on Demand : 설치없이 인터넷 접속해 사용하는 SW</p>
</li>
</ul>
<p><mark>상용</mark> : <mark>돈을 받고 판매</mark>하는 SW</p>
<p>패치(업데이트) : 오류 수정, 성능 향상하는 SW</p>
<p>번들 : 끼워주는 SW(부록)</p>
<p>유틸리티 : <mark>컴퓨터 동작에 필수가 아니며</mark>, 편의를 제공하는 SW(메모장, 그림판 등)</p>
<h2 id="heading-9-os">제9강 OS 운영방식과 세대별 특징</h2>
<h3 id="heading-7jq07jib7lk07kccioyatoyygeuwqeylnsjsiqtsvidspitrp4ep">운영체제 운영방식(스케줄링)</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>일괄 처리</strong></td><td><strong>한꺼번에 처리</strong></td></tr>
</thead>
<tbody>
<tr>
<td>실시간 처리</td><td>바로바로 처리</td></tr>
<tr>
<td>다중 프로그래밍</td><td>여러개의 프로그램을 동시에 처리</td></tr>
<tr>
<td>시분할 처리</td><td>시간을 분할해</td></tr>
</tbody>
</table>
</div><h3 id="heading-kirsu7ttk6jthlag7is464ya67oeio2kueynlsoq"><strong>컴퓨터 세대별 특징</strong></h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td><mark>1세대</mark></td><td><mark>진공관</mark></td><td>일괄처리 , 하드웨어 중심</td></tr>
</thead>
<tbody>
<tr>
<td><mark>2세대</mark></td><td><mark>트랜지스터(TR)</mark></td><td>실시간처리 , 고급언어 개발</td></tr>
<tr>
<td><mark>3세대</mark></td><td><mark>집적회로(IC)</mark></td><td>다중프로그래밍 , 시분할처리 , OS 도입</td></tr>
<tr>
<td><mark>4세대</mark></td><td><mark>고밀도 집적 회로(LSI)</mark></td><td>다중처리 , 분산처리 , 개인용 컴퓨터 , 마이크로프로세서 개발</td></tr>
<tr>
<td><mark>5세대</mark></td><td><mark>초고밀도 집적 회로(VLSI)</mark></td><td>AI , 퍼지이론 , 패턴인식 , 전문가 시스템</td></tr>
</tbody>
</table>
</div><h3 id="heading-7lu07zoo7yswioyekoujjcdsspjrpqzrsknsi50g67cc64usioqzvoyglq">컴퓨터 자료 처리방식 발달 과정</h3>
<p><mark>일괄 → 실시간 → 다중프로그래밍 → 시분할 → 다중처리 → 분산처리</mark></p>
<h2 id="heading-10-windows">제10강 Windows특징과 단축키</h2>
<h3 id="heading-windows">Windows 특징</h3>
<ul>
<li><p>GUI 특징</p>
</li>
<li><p>선점형</p>
</li>
<li><p>멀티테스킹</p>
</li>
<li><p>OLE 지원<br />  - 개체</p>
</li>
<li><p>NTFS 파일 관리 시스템 사용<br />  - FAT 방식에 비해 성능이 우수함<br />  - 파일 크기는 16TB</p>
</li>
</ul>
<h3 id="heading-7kgw7zwp7ykk7jmaiounioyasoykpcdtmzzsmqk">조합키와 마우스 활용</h3>
<ul>
<li>동일 드라이브</li>
</ul>
<h2 id="heading-cwindowsfonts">제어판 - 글꼴(C:/Windows/Fonts)</h2>
<p>TrueType(TTF , TTC), OpenType(OTF) 등 지원<br />제어판 - 글꼴 or C:/Windows/Fonts 등 위치</p>
<h2 id="heading-7kcc7ja07yyqic0g67cx7jefiouwjydrs7xsm5a">제어판 - 백업 및 복원</h2>
<p>백업파일(*.BKF)을 생성한 뒤 시스템에 문제가 생기면 복원을 통해 정상 상태로 복원하는 기능</p>
<p>복원 지점을 자동 설정 or 수동 설정 가능</p>
<p>Update 및 시스템 파일 복원되지만 개인 파일은 복원하지 않음</p>
<h2 id="heading-7kcc7ja07yyqic0g7iks7jqp7j6qioqzhoyglq">제어판 - 사용자 계정</h2>
<p>관리자 계정 :</p>
<h1 id="heading-2-1"><strong>2과목 :: 1강_화면 구성</strong></h1>
<ol>
<li><p>기본 메뉴</p>
</li>
<li><p>빠른실행 도구모음</p>
</li>
<li><p>이름상자</p>
</li>
<li><p>수식입력줄</p>
</li>
<li><p>상태표시줄</p>
</li>
</ol>
<h2 id="heading-19">제19강 데이터베이스 함수</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>DSUM(전체범위, 열 번호 필드, 조건범위)</td><td>조건에 맞는 합</td></tr>
</thead>
<tbody>
<tr>
<td>DAVERAGE</td><td></td></tr>
<tr>
<td>DMAX</td><td></td></tr>
<tr>
<td>DMIN</td><td></td></tr>
<tr>
<td>DSTDEV</td><td></td></tr>
<tr>
<td>DVAR</td><td></td></tr>
<tr>
<td>DPRODUCT</td><td></td></tr>
<tr>
<td>DCOUNT</td><td></td></tr>
<tr>
<td>DCOUNTA</td><td></td></tr>
<tr>
<td>DGET</td></tr>
</tbody>
</table>
</div><h2 id="heading-20">제20강 날짜와 시간 함수</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>TODAY()</td><td>현재 <mark>날짜</mark>를 구함</td></tr>
</thead>
<tbody>
<tr>
<td>NOW()</td><td>현재 <mark>날짜와 시간</mark>을 구함</td></tr>
<tr>
<td>DATE(년, 월, 일)</td><td>입력한 수를 <mark>날짜형식으로 변환</mark></td></tr>
<tr>
<td>TIME(시, 분, 초)</td><td>입력한 수를 <mark>시간형식으로 변환</mark></td></tr>
<tr>
<td>YEAR(날짜)</td><td>날짜에서 <mark>연도</mark>만 구함</td></tr>
<tr>
<td>MONTH(날짜)</td><td>날짜에서 <mark>월</mark>만 구함</td></tr>
<tr>
<td>DAY(날짜)</td><td>날짜에서 <mark>일</mark>만 구함</td></tr>
<tr>
<td>HOUR(시간)</td><td>시간에서 <mark>시</mark>만 구함</td></tr>
<tr>
<td>MINUTE(시간)</td><td>시간에서 <mark>분</mark>만 구함</td></tr>
<tr>
<td>SECOND(시간)</td><td>시간에서 <mark>초</mark>만 구함</td></tr>
<tr>
<td>DAYS(끝날짜, 시작날짜)</td><td><mark>시작날짜</mark>와 <mark>끝날짜의 차이</mark>를 구함</td></tr>
<tr>
<td>EDATE(날짜, 개월수)</td><td><mark>날짜에 개월을 더한</mark> 날짜</td></tr>
<tr>
<td>EOMONTH(날짜, 개월수)</td><td><mark>날짜에 개월을 더한 월말 </mark> 날짜</td></tr>
<tr>
<td>WEEKDAY(날짜, [옵션])</td><td>입력받은 날짜의 요일 번호를 구함</td></tr>
<tr>
<td></td><td>옵션: 생략, 1 = 일요일(1), 2 = 월요일(1), 3 = 월요일(0)</td></tr>
<tr>
<td>WORKDAY(시작날짜, 일수, [휴일])</td><td>시작날짜에서 일수를 더 함(주말과 휴일 제외, 평일 계산)</td></tr>
<tr>
<td>NETWORKDAYS(시작날짜, 끝날짜, [휴일])</td><td>순 작업 일수(주말과 휴일 제외, 평일 계산)</td></tr>
</tbody>
</table>
</div><h1 id="heading-3">제3과목 데이터베이스 개요</h1>
<h2 id="heading-642w7j207ysw67kg7j207iqkioygleydma">데이터베이스 정의</h2>
<ul>
<li><p>시스템이 공용으로 사용하고 관리하는 데이터 집합</p>
</li>
<li><p>DB의 도입배경</p>
</li>
</ul>
<p>DB의 장단점</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>장점</td><td>단점</td></tr>
</thead>
<tbody>
<tr>
<td></td></tr>
</tbody>
</table>
</div><h2 id="heading-dbms">데이터베이스 관리 시스템(DBMS)</h2>
<ul>
<li><p>사용자와 DB 사이에서</p>
</li>
<li><p>사용자 ←→ DBMS ←→ DB</p>
</li>
</ul>
<h1 id="heading-6riw7lac66y47kcc">기출문제</h1>
<h2 id="heading-66ma7yuw66465su7ja0io2mjoydvcdtmjxsi50o66ma7yuwid0g64uk7ksrlcdrr7jrljtslrqgpsdrp6tssrqp">멀티미디어 파일 형식(멀티 = 다중, 미디어 = 매체)</h2>
<ul>
<li><p>그래픽 파일 형식 : BMP , JPG(JPEG) , GIF , PNG</p>
</li>
<li><p>오디오 파일 형식 : WAVE , MIDI , MP3 , AIFF</p>
</li>
<li><p>동영상 파일 형식 : MPEG , AVI , ASF , DivX</p>
</li>
</ul>
<p><mark>FLAC(무손실 압축 방식) ←→ MP3(손실 압축 방식)</mark></p>
<h1 id="heading-110">1.10멀티미디어</h1>
<h3 id="heading-66ma7yuw66465su7ja0io2kueynlq">멀티미디어 특징</h3>
<ul>
<li><p>디지털화 : 다양한 아날로그 데이터를 디지털 데이터로 변환해 통합처리 한다.</p>
</li>
<li><p>정보의 통합성 : 여러 미디어(텍스트, 사운드, 그래픽, 동영상 등…)를 통합하여 처리한다.</p>
</li>
<li><p>쌍방향성 : 정보 제공자와 사용자 간의 상호작용에 의해 데이터가 전달된다</p>
</li>
<li><p>비선형성 : 데이터가 일정한 방향으로 순차적으로 처리되는 것이 아니라, 사용자의 선택에 의해서 다양한 방향으로 처리된다</p>
</li>
</ul>
<h3 id="heading-6re4656y7zs9iounsoydto2escdtkzztmiqg67cp7iud">그래픽 데이터 표현 방식</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>비트맵</td><td>벡터</td></tr>
</thead>
<tbody>
<tr>
<td>점으로 이미지 표현</td><td>직선이나 곡선으로 이미지 표현</td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td></td></tr>
</tbody>
</table>
</div><h3 id="heading-6re4656y7zs9ioq4souylq">그래픽 기법</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>디더링</td><td>제한된 색상을 조합하여 다양한 색을 표현하는 기법</td></tr>
</thead>
<tbody>
<tr>
<td>모델링</td><td></td></tr>
<tr>
<td>렌더링</td><td></td></tr>
<tr>
<td>안티앨리어싱</td><td></td></tr>
<tr>
<td>모핑</td></tr>
</tbody>
</table>
</div><h1 id="heading-31"><strong>3.1데이터베이스</strong></h1>
<h2 id="heading-db">DB 특징</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>실시간 접근성</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>계속적인 변화</td><td></td></tr>
<tr>
<td>동시공유</td><td></td></tr>
<tr>
<td>내용에 의한 참조</td></tr>
</tbody>
</table>
</div><h2 id="heading-db-1">DB 장단점</h2>
<h1 id="heading-321"><strong>3.2테이블(1)</strong></h1>
<div class="hn-table">
<table>
<thead>
<tr>
<td>테이블</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>쿼리</td><td></td></tr>
<tr>
<td>폼</td><td></td></tr>
<tr>
<td>보고서</td><td></td></tr>
<tr>
<td>매크로</td></tr>
</tbody>
</table>
</div><h2 id="heading-7ywm7j2067iuiounjoutpoq4sa">테이블 만들기</h2>
<ul>
<li><p>각 필드와 입력</p>
</li>
<li><p>디자인 보기, 데이터시트 보기, 테이블 가져오기, 테이블 연결 등을 이용하여 작성할 수 있다.</p>
</li>
</ul>
<ol>
<li><strong>데이터시트 보기</strong></li>
</ol>
<ul>
<li><p>새로운</p>
</li>
<li><p>레코드</p>
</li>
</ul>
<ol start="2">
<li><strong>디자인 보기</strong></li>
</ol>
<ul>
<li><p>테이블을</p>
</li>
<li><p>각 필드의</p>
</li>
</ul>
<h2 id="heading-7ywm7j2067iuio2yleylnq">테이블 형식</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>짧은 텍스트</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>긴 텍스트</td><td></td></tr>
<tr>
<td>숫자</td><td></td></tr>
<tr>
<td>통화</td><td></td></tr>
<tr>
<td>날짜/시간</td><td></td></tr>
<tr>
<td>일련 번호</td><td></td></tr>
<tr>
<td>Yes/No</td><td></td></tr>
<tr>
<td>OLE 개체</td></tr>
</tbody>
</table>
</div><h2 id="heading-7zwe65ocioygjeyesq">필드 속성</h2>
<ol>
<li>입력 마스크</li>
</ol>
<ul>
<li><p>사용자가</p>
</li>
<li><p>입력 마스크의</p>
</li>
</ul>
<ol start="2">
<li>유효성 검사 규칙</li>
</ol>
<ul>
<li>필드에 입력할 데이터 값을 제한하여 잘못된 데이터의 입력을 방지하기 위한 속성이다</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>0이 아닌 값을 입력</td><td>&lt;&gt;0</td></tr>
</thead>
<tbody>
<tr>
<td></td><td></td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td>여로 시작하는 3개의 문자 데이터만 입력</td><td>Like “여??”</td></tr>
</tbody>
</table>
</div><h1 id="heading-36-1">3.6 폼(1)</h1>
<h2 id="heading-7y87j2yioqwnoufka">폼의 개념</h2>
<ul>
<li><p>폼은 table이나 쿼리, SQL을 원본으로 해서 data의 조회, 입력 , 편집 , 삭제 등의 작업을 편리하게 할 수 있는 DB 개체</p>
</li>
<li><p>폼에는 원하는 데이터만 표시할 수 있으므로 DB의 보완성을 높임</p>
</li>
<li><p>폼에서 data를 추가, 제거 , 변경하면 원본 테이블, 쿼리 등에 반영된다.</p>
</li>
<li><p>폼에 이벤트를 지정하여, 여러가지 작업을 자동화 할 수 있다.</p>
</li>
</ul>
<h2 id="heading-7y87j2yioq1royeseyaloygja">폼의 구성요소</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>폼 머리글</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>페이지 머리글</td><td></td></tr>
<tr>
<td>본문</td><td></td></tr>
<tr>
<td>페이지 바닥글</td><td></td></tr>
<tr>
<td>폼 바닥글</td></tr>
</tbody>
</table>
</div><h2 id="heading-7y8iounjoutpoq4sa">폼 만들기</h2>
<h1 id="heading-381"><strong>3.8보고서(1)</strong></h1>
<h2 id="heading-67o06rog7isc">보고서</h2>
<ul>
<li><p>보고서는</p>
</li>
<li><p>보고서에</p>
</li>
<li><p>보고서에도 조건부 서식을 작성할 수 있고, 폼처럼 이벤트 프로시저를 작성할 수 있다</p>
</li>
</ul>
<h2 id="heading-67o06rog7isc7j2yioq1royesq">보고서의 구성</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>보고서 머리글</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>페이지 머리글</td><td></td></tr>
<tr>
<td>그룹 머리글</td><td></td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td></td><td></td></tr>
<tr>
<td>보고서 바닥글</td></tr>
</tbody>
</table>
</div><h2 id="heading-67o06rog7isc7j2yiouztoq4scdtmjxtg5w">보고서의 보기 형태</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td>인쇄 미리 보기</td><td>종이에 출력되는 인쇄 모양을 미리 확인</td></tr>
</thead>
<tbody>
<tr>
<td>보고서 보기</td><td></td></tr>
<tr>
<td>레이아웃 보기</td><td></td></tr>
<tr>
<td>디자인 보기</td><td>보고서에 삽입된 컨트롤을 설정해서 보고서를 만들거나 수정할 수 있는 형태</td></tr>
</tbody>
</table>
</div><h2 id="heading-67o06rog7isc7j2yioygleugrcdrsi8g6re466o57zmu">보고서의 정렬 및 그룹화</h2>
<ul>
<li><p>그룹화란</p>
</li>
<li><p>그룹화의</p>
</li>
<li><p>필드나</p>
</li>
<li><p>그룹을</p>
</li>
<li><p>같은 필드나 식도 여러 번 그룹화 할 수 있다</p>
</li>
</ul>
<h2 id="heading-67o06rog7isc7j2yioyiheulma">보고서의 종류</h2>
<ol>
<li>레이블 보고서</li>
</ol>
<ul>
<li><p><mark>우편 발송용 레이블</mark>을 만드는 보고서이다</p>
</li>
<li><p>우편물 레이블 마법사를 이용해서 작성할 수 있다(레이블 크기,글꼴,글꼴 색 등 지정 가능)</p>
</li>
</ul>
<h2 id="heading-66i466as6rialuwloulpeq4goydmcdtmzzsmqk">머리글/바닥글의 활용</h2>
<ol>
<li>날짜/시간과 페이지 번호 삽입</li>
</ol>
<ul>
<li><p>보고서 작성시 NOW( ), DATE( ), TIME( )등과 같은 함수를 이용하여 날짜와 시간을 표시할 수 있다</p>
</li>
<li><p>[page] : 현재 페이지 번호</p>
</li>
<li><p>[pages] : 전체 페이지 번호</p>
</li>
</ul>
<p>ex)</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>2쪽</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>2/5</td><td></td></tr>
<tr>
<td>5중2</td><td></td></tr>
<tr>
<td>02</td></tr>
</tbody>
</table>
</div><ol start="2">
<li>집계 정보 표시</li>
</ol>
<ul>
<li><p>보고서 전체 레코드에 대한 집계정보를 표시하려면 보고서 머리글/바닥글에 입력하고, 각 그룹별로 집계정보를 표시하려면 그룹 머리글/바닥글에 입력한다</p>
</li>
<li><p>SQL함수 이용 : AVG(인수) , SUM(인수) , COUNT(인수) , MAX(인수) , MIN(인수)</p>
</li>
</ul>
<h1 id="heading-310-vba"><strong>3.10매크로 및 프로그래밍(VBA)</strong></h1>
<ol>
<li>매크로의 개념</li>
</ol>
<ul>
<li><p>액세스의 매크로 함수를 이용하여, 엑세스의 작업을 자동화하는 기능 (주로 컨트롤에 매크로 기능을 추가하여 사용)</p>
</li>
<li><p>하나의 매크로는 여러 개의 <mark>매크로 함수</mark>를 포함할 수 있다.</p>
</li>
<li><p>하나의 매크로에 여러 개의 <mark>하위 매크로</mark>를 포함할 수 있다.</p>
</li>
</ul>
<ol start="2">
<li>매크로 함수</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>ApplyFiter</td><td></td></tr>
</thead>
<tbody>
<tr>
<td>FindRecord</td><td></td></tr>
<tr>
<td>FindNextRecord</td><td></td></tr>
<tr>
<td>GoToControl</td><td></td></tr>
<tr>
<td>GoToPage</td><td></td></tr>
<tr>
<td>RunMenuCommand</td><td>액세스 내부에서 제공하는 명령을 실행시킨다. (메뉴에 있는 명령을 실행)</td></tr>
<tr>
<td>OpenForm</td><td></td></tr>
<tr>
<td>OpenReport</td><td></td></tr>
<tr>
<td>RunMacro</td><td>매크로를 실행</td></tr>
<tr>
<td>RunApplication</td><td>응용 프로그램을 실행</td></tr>
<tr>
<td>RunSQL</td><td>SQL문을 실행</td></tr>
<tr>
<td>CancelEvent</td><td>이벤트를 취소한다</td></tr>
<tr>
<td>Requery</td><td>데이터 수정, 삭제, 추가할 경우 원본 데이터로 재설정</td></tr>
<tr>
<td>ExportWithFormatting</td><td>데이터베이스 개체를 엑셀, 텍스트 등으로 내보내기 한다</td></tr>
<tr>
<td>Messagebox</td><td>메시지 상자를 표시</td></tr>
</tbody>
</table>
</div><ol start="3">
<li>이벤트 프로시저</li>
</ol>
<div class="hn-table">
<table>
<thead>
<tr>
<td>AfterUpdate</td><td>컨트롤이나 레코드의 데이터가 <mark>업데이트 된 후에 이벤트가 발생</mark></td></tr>
</thead>
<tbody>
<tr>
<td>BeforUpdate</td><td>컨트롤이나 레코드의 데이터가 <mark>업데이트 되기 전에 이벤트가 발생</mark></td></tr>
<tr>
<td>Click</td><td>마우스 왼쪽을 <mark>클릭할 때 이벤트가 발생</mark></td></tr>
<tr>
<td>DbIClick</td><td>마우스 왼쪽을 <mark>두 번 클릭할 때 이벤트가 발생</mark></td></tr>
<tr>
<td>GotFocus</td><td>폼이나 컨트롤에 포커스가 받을 때 이벤트가 발생</td></tr>
</tbody>
</table>
</div>]]></content:encoded></item><item><title><![CDATA[[UTM] startup.nsh error fix]]></title><description><![CDATA[https://howudong.tistory.com/435]]></description><link>https://haroldrippin.hashnode.dev/utm-startupnsh-error-fix</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/utm-startupnsh-error-fix</guid><category><![CDATA[utm]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Fri, 08 Nov 2024 00:57:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/n6B49lTx7NM/upload/2f35e724b44e0321fd200d9699288cce.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://howudong.tistory.com/435">https://howudong.tistory.com/435</a></p>
]]></content:encoded></item><item><title><![CDATA[[네트워크 관리사2급] 실기 요약]]></title><description><![CDATA[랜설 툴 구매 링크입니다 <랜설 툴 구매하기>
- 네트워크 관리사 2급 실기 시험 개요




케이블(6.5점 x 1문제) / 제한 시간 10분



Windows 네트워크 설정 문제(5.5점 x 8문제) 44점

Linux( 5.5점 x 2문제 ) 11점

TCP/IP, 네트워크 장비( 5.5점 x 3문제) 16.5점

신경향 및 보안( 5.5점 x 1문제 ) 5.5점

라우터(5.5점 x 3문제) / 제한 시간 20분 16.5점


* 라우...]]></description><link>https://haroldrippin.hashnode.dev/2-1</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/2-1</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Tue, 05 Nov 2024 12:05:33 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/_MauPmUJJ08/upload/c9f89ec6dcfd1ab540b4975542c44524.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>랜설 툴 구매 링크입니다 &lt;<a target="_blank" href="https://www.coupang.com/vp/products/29537489?itemId=112912911&amp;src=1139000&amp;spec=10799999&amp;addtag=400&amp;ctag=29537489&amp;lptag=AF8219490&amp;itime=20241107094231&amp;pageType=PRODUCT&amp;pageValue=29537489&amp;wPcid=11248083711499422016405&amp;wRef=blog.naver.com&amp;wTime=20241107094231&amp;redirect=landing&amp;traceid=V0-101-15a593e0b320d0b3&amp;mcid=36e8985d5c6a477b94776b5ce5a0f5f5&amp;placementid=&amp;clickBeacon=&amp;campaignid=&amp;puidType=&amp;contentcategory=&amp;imgsize=&amp;tsource=&amp;pageid=&amp;deviceid=&amp;token=&amp;contenttype=&amp;subid=&amp;impressionid=&amp;campaigntype=&amp;puid=&amp;requestid=&amp;contentkeyword=&amp;subparam=&amp;vendorItemId=3222777182">랜설 툴 구매</a>하기&gt;</p>
<p>- 네트워크 관리사 2급 실기 시험 개요</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>케이블</td><td>(6.5점 x <strong>1</strong>문제) / 제한 시간 10분</td></tr>
</thead>
<tbody>
<tr>
<td>Windows 네트워크 설정 문제</td><td>(5.5점 x <strong>8문제</strong>) 44점</td></tr>
<tr>
<td>Linux</td><td>( 5.5점 x 2문제 ) 11점</td></tr>
<tr>
<td>TCP/IP, 네트워크 장비</td><td>( 5.5점 x 3문제) 16.5점</td></tr>
<tr>
<td>신경향 및 보안</td><td>( 5.5점 <strong>x 1문제</strong> ) 5.5점</td></tr>
<tr>
<td>라우터</td><td>(5.5점 <strong>x 3문제</strong>) / <strong>제한 시간 20분</strong> 16.5점</td></tr>
</tbody>
</table>
</div><p>* 라우터, 윈도우, 케이블 무조건 10개 이상 가져가기</p>
<p>* 라우터 2개 이상 가져가기</p>
<p>* 부분 점수 없음</p>
<p>ip default-gateway = 게이트웨이를 설정해라</p>
<p><strong>en (enable)</strong> = 사용자모드 --&gt; 관리자 모드로 전환</p>
<p><strong>conf t (configure terminal)</strong> = 관리자 모드 --&gt; 전역설정 모드로 전환</p>
<p><strong>int s2/0 (interface serial0/0)</strong> = Serial 2/0에 대한 설정으로 전환</p>
<p><strong>ip address (ip주소) (서브넷마스크)</strong> = ip와 서브넷마스크를 설정하는 명령어</p>
<p>ip address (ip주소) (서브넷마스크) secondary</p>
<p>\= 두번째 ip와 서브넷마스크를 설정하는 명령어</p>
<p>no shutdown = Serial 2/0 활성화 명령어</p>
<p>exit = 모드를 한 단계 나간다고 생각하면 됨</p>
<p>copy r s (copy running-config startup-config)</p>
<p>bandwidth = 대역폭</p>
<p><strong>1. TCP/IP 4 계층의 각</strong> <strong>계층에 속하는 프로토콜</strong></p>
<p>◆ 응용계층</p>
<p>SMTP, SNMP, HTTP, FTP, DNS, DHCP, Telnet, POP3 / Message</p>
<p>◆ 네트워크 계층(인터넷 계층)</p>
<p>ARP, RARP, IGMP, ICMP, RIP / Packet</p>
<p>◆ 물리계층</p>
<p>Reapeter, Hub, FDDI, HDLC, ISDN, ATM, WIFI / Packet</p>
<p>◆ 데이터링크 계층</p>
<p>오류제어필요 / 물리적 MAC주소를 가짐 / Frame</p>
<p><strong>2. 인터넷망과</strong> <strong>같은 <mark>공중망을 사설망</mark>처럼 이용해 회선 비용을 크게</strong> <strong>절감할 수 있는 기업 통신 서비스는?</strong></p>
<p><mark>VPN(가상사설망)</mark></p>
<p><strong>3. IPv4와 IPv6 비교</strong></p>
<p>◆ IPv4</p>
<p>1. 8비트 X 4개 = <mark>32bit</mark>의 주소 체계</p>
<p>2. 10진수로 이루어짐</p>
<p>3. 유니/멀티/브로드캐스트</p>
<p>◆IPv6</p>
<p>1. 16비트 X 8개 = <mark>128bit</mark>의 주소 체계</p>
<p>2. 16진수로 이루어짐</p>
<p>3. 유니/멀티/애니캐스트</p>
<p>4. 이미 발견되어 있는 <mark>공격 패턴을 미리 입력하고, 해당하는 패턴을 탐지</mark>하는 기법은?</p>
<p><mark>오용 탐지 기법(IDS)</mark></p>
<p>5. 무슨 클래스에 관한 설명인지 맞추기</p>
<p>문제<br />Class IP address는 처음 1개의 bit가 항상 0이다.<br />할당 가능한 네트워크 수는 2^7, 127개이다.<br />할당 가능한 호스트의 수는 2^24개이다.<br /><mark>A class</mark></p>
<p>6. 네트워크에서 공격 서명을 찾아내 자동으로 조치를 취함으로써 비정상적 트래픽을 중단시키는 보안 솔루션은?</p>
<p><mark>IPS (insrusion prevention system)</mark></p>
<h4 id="heading-8-vlan">8. 네트워크 스위치의 어떤 포트에서 보이는 모든 네트워크 패킷이나 전체 VLAN의 패킷들을 다른 모니터링 포트로 복제하는 데에 사용되는 것은?</h4>
<p><mark>포트 미러링</mark></p>
<p>9. 각 계층별 장치 연결 문제</p>
<p>● 물리계층</p>
<p>Hub / Repeater / Cable</p>
<p>● 데이터링크 계층</p>
<p>Switch / Bridge</p>
<p>● 네트워크 계층(인터넷 계층)</p>
<p>Router, L3 Swich, IP 공유기</p>
<p>● 그 외 계층들</p>
<p>Gateway</p>
<h4 id="heading-10-ip-mac">10. IP 주소를 물리적 네트워크 주소인 MAC 주소로 대응시키기 위해 사용되는 프로토콜은?</h4>
<h4 id="heading-mac">(<mark>물리적 네트워크 → MAC 주소</mark>)</h4>
<h4 id="heading-mac-1">(추가 : <mark>MAC 주소 → 물리적 네트워크 대응 프로토콜은?</mark>)</h4>
<p><mark>ARP </mark> </p>
<p><mark>RARP</mark></p>
<h4 id="heading-11">11. 임의로 구성된 웹사이트에서 눈속임을 통해 이용자의 정보를 빼가는 해킹 수법은?</h4>
<p><strong><mark>스푸핑</mark></strong></p>
<h4 id="heading-12">12. 네트워크 상의 다른 컴퓨터에 <mark>로그인하거나 원격 시스템에서 명령</mark>을 실행하고 다른 시스템으로 파일 복사를 할 수 있게 해주는 응용 프로그램은?</h4>
<p><strong><mark>SSH (secure shell)</mark></strong></p>
<p>13. 동적 디스크 볼륨 중 볼륨 자체에서 하나의 디스크가 손상되었을 경우,<br />다른 하드디스크의 데이터로 손상된 부분을 복구할 수 있는 <mark>내결함성</mark>을 지원하는 볼륨은?</p>
<p><strong><mark>미러링</mark></strong></p>
<p>14. TCP/IP 기반 네트워크상에서 서버나 라우터가 <mark>에러</mark>나 예상치 못한 사건들을 보고할 목적으로 만들어진 프로토콜은?</p>
<p><strong><mark>ICMP</mark></strong></p>
<h4 id="heading-15">15. 매니지먼트와 에이전트 사이에 관리 정보를 주고받기 위한 프로토콜이며 정보교환 단위가 메시지인것은?</h4>
<p><mark>SNMP</mark></p>
<p>16. IP주소를 사용하는 것의 낭비를 막기 위해 모든 호스트에 공인 IP주소를 설정하는 대신,<br /><mark>내부적으로 사설 IP를 설정하여 사용하고, 인터넷에 접속할 때만 공인 IP로 변환</mark>하는 기술은?</p>
<p><mark>NAT (network address translation)</mark></p>
<h4 id="heading-17-2">17. 2개 이상의 다른 혹은 같은 종류의 통신망을 상호 접속하여 통신망 간 정보를 주고받을 수 있게 하는 기능의 단위나 장치는?</h4>
<p><strong><mark>Gateway</mark></strong></p>
<p>18. 사설망 IP에 사용되는 주소 문제 (클래스)</p>
<p><mark>A 클래스 : 10.0.0.0 ~ 10.255.255.255<br />B 클래스 : 172.16.0.0 ~ 172.31.255.255<br />C 클래스 : 192.168.0.0 ~ 192.168.255.255</mark></p>
<p><strong>19. 데이터링크 계층 중 <mark>MAC 계층</mark>에서 일하며 두 세그먼트 사이에서</strong><br /><strong><mark>데이터링크 계층 간의 패킷 전송을 담당하는 장치</mark>는?</strong></p>
<p><strong><mark>Bridge</mark></strong></p>
<p><strong>20. RFID와 관계 없는 것은?</strong><br /><strong>※ RFID : 무선 주파수로 물건이나 사람을 식별하는 인식기술</strong><br /><strong>(정답:4번)</strong></p>
<p><strong>1. RFID 리더기</strong></p>
<p><strong>2. 태그</strong></p>
<p><strong>3. 안테나</strong></p>
<p><mark>4. Access Point</mark></p>
<p><strong>21. 망 외부 공격자가 허용 가능한 범위의 IP 주소를 이용하거나 또는 허가 받은 외부 IP 주소를 이용하여 허가받은 사용자인것처럼 행동하며 사내망에 대한 특정 자원을 액세스 할 수 있도록 이 사용자에게 허용하려 할 때 이루어짐. 공격자가 마치 기업망 접속을 허가 받은 원격 사용자인 것처럼 위장할 수 있음.</strong></p>
<p><mark>ip spoofing</mark></p>
<h4 id="heading-22-ooo">22. OOO는 네트워크 링크의 트래픽 모드를 모니터링 하고 측정하기 위한 무료 소프트웨어</h4>
<p><mark>MRTG (멀티 라우터 트래픽 그래프)</mark></p>
<h4 id="heading-23-ipv4-ipv6">23. IPv4와 IPv6 두가지를 같이 사용하는 장비</h4>
<p><mark>듀얼 스택</mark></p>
<p><strong>24. Server Load Balancing 에서 가장 많이 사용하는 방식은?</strong></p>
<p><mark>Round Robin</mark></p>
<p><strong>25. 디스크 <mark>미러링</mark></strong><br /><strong>/ 각 드라이브를 동시에 읽을 수 있어 읽기 성능이 좋음</strong><br /><strong>/ 쓰기 성능은 단일 디스크 드라이브의 경우와 같음</strong></p>
<p><strong><mark>RAID 1</mark></strong></p>
<h4 id="heading-26-2">26. 가정에서 전화선을 이용하여 2대 이상의 컴퓨터들을 서로 공유할 수 있도록 하는 네트워킹 솔루션</h4>
<p><mark>홈 PNA</mark></p>
<h4 id="heading-27-ddos-pc">27. DDOS 공격에서 좀비 PC 들끼리 형성된 네트워크</h4>
<p><mark>봇넷</mark></p>
<p>28.수백개의 반송파를 사용하는 다반송파 변조 방식<br />/ 반송파는 직교관계에 있기 때문에 각 반송파의 주파수 정분이 서로 겹쳐 있어도 됨<br />/ 대역폭당 전송 속도의 향상과 멀티 패스 간섭의 방지를 위한 디지털 변조라고 함.</p>
<p><mark>OFDM</mark></p>
<p>29. OOO는 중요한 데이터를 가지고 있는 서버에 주로 사용되며,<br />여러 대의 하드 디스크가 있을 때 동일한 데이터를 다른 위치에 중복해서 저장하는 방법.<br />/데이터를 여러 대의 디스크에 저장함에 따라 입출력 작업이 균형을 이루며 겹치게 되어 전체적인 성능 개선</p>
<p><mark>레이드</mark></p>
<p>30.백플레인이 훨씬 빨라짐<br />연결된 장비 중 하나가 고장나도 다른 장비에 영향을 주지 않음 = 장점<br />혼자일때보다 여러대가 스택으로 연결되면 훨씬 좋은 성능임.</p>
<p><mark>스테커블 스위치</mark></p>
<p>31. OOOOO은 리눅스에서 사용자나 운영 프로그램이 내린 <mark>명령을 해석</mark>하고,이해 한 후 <mark>운영체제에 전달</mark>하는 역할의 프로그램</p>
<p><mark>Shell</mark></p>
<p><strong>32. ip 주소 사용의 낭비를 막기 위해서 내부 네트워크의 모든 호스트에 인터넷 전체에서 유일한 공인 IP 주소를 설정하지 않고 내부적으로는 사설 IP 주소를 설정하여 사용하다가 <mark>인터넷에 접속 할 때만 공인 IP</mark></strong><mark>주소로 변환하는 기술</mark></p>
<p><mark>NAT</mark></p>
<p><strong>33. OOO을 이용하여 C Class에 x.y.32.0 ~ x.y.35.255 의 범위를</strong> <mark>하나의 네트워크 대역으로 설계하여 보다 많은 주소를 사용</mark></p>
<p><mark>슈퍼넷</mark></p>
<h4 id="heading-34-on">34. 대형 라우터 기능에서 전원이 ON 되어있는 상태에서 모듈을 교체 가능하게 해주는 기능</h4>
<p><mark>HOT SWAP</mark></p>
<h4 id="heading-35-x">35. X은 <mark>서버나 네트워크 장비</mark> 등을 수용하기 위해 <mark>사용되는 철제 프레임</mark></h4>
<p><mark>Rack (랙)</mark></p>
<p>36. 휴대전화처럼 이동하면서 초고속 인터넷을 이용할 수 있는 서비스로<br />휴대전화와 무선랜 중간 영역에 위치한것</p>
<p><mark>와이브로</mark></p>
<ol start="37">
<li>방화벽에 의해 보호받고 있는 네트워크에서 어쩔 수 없이 외부에 노출 되어야 하는 서버들의 네트워크 지역</li>
</ol>
<p><mark>DMZ</mark></p>
<p>38. 무선 환경에서 사용되는 프로토콜이며,<br />채널의 반송파를 감지한 후 충돌이 일어나지 않도록 충돌을 회피하는 프로토콜은?</p>
<p><mark>CSMA/CA</mark></p>
<h4 id="heading-39">39. 댁 <mark>내 네트워크</mark>와 <mark>댁 외의 네트워크</mark>를 <mark>상호 접속 중재하는 장치</mark></h4>
<p><mark>Home Gateway</mark></p>
<p>40. 가정에 들어오는 50~ 60hz의 교류 전기에다가 1~30Mhz의 고주파 대역 통신 신호를 함께 실어 보내는 방식으로 전기가 공급되는 전역선 위에다 데이터를 얹어 보내는 디지털 통신 기술은?</p>
<p><mark>PLC</mark></p>
<p>41. 특정 포트로 패킷을 다른 임의의 포트로 copy 해 내보내는 기술로써 네트워크 기반 IDS를 구축하기 위해 스위칭 허브에서 사용하는 기술은?</p>
<p><mark>포트 미러링</mark></p>
<p>42. 차세대 능동형 보안 네트워크 솔루션으로써 인터넷 웜과 같은 악성 코드 및 해킹 등에 기인한 유해 트래픽을 차단해주는 것은?</p>
<p><mark>침입 방지 시스템</mark></p>
<p>43. 네트워크상의 다른 컴퓨터에 로그인 하거나 원격 시스템에서 명령을 실행,다른 시스템으로 파일을 복사 할 수 있도록 해주는 응용 프로그램 또는 프로토콜은?</p>
<p><mark>SSH</mark></p>
<p>44. 히스토리를 모두 지우는 명령어는?</p>
<p><mark>history - c</mark></p>
<p>45. 자신의 각각에 포트에 연결된 컴퓨터의 MAC 주소를 알지 못하기 때문에 A가 B에 신호를 보낼 때 B에만 신호가 전송되어 통신이 되는 것이 아닌 허브에 연결된 <mark>모두에게 </mark> 전송하는 것은?</p>
<p><mark>더미허브</mark></p>
<p>46. 자신의 내부 메모리에 각 port에 연결된 컴퓨터의 MAC 주소를 Table에 기록하기 때문에 A가 B에 신호를 보낼 때 A로부터 받은 신호를 B에게만 전송하는 것은?</p>
<p><mark>스위칭 허브</mark></p>
<p>47. 정적 라우팅 설정 순서는?</p>
<p><mark>ip route [ 도착지 ip 주소 ] [ 도착지의 subnet Mask ] [ 도착지의 인터페이스 or 게이트웨이 ip 주소 ]</mark></p>
<p>48. 목적지 경로가 2개 이상 발생 했을 때 브로드 캐스트 패킷이 양쪽 스위치를 맴도는 현상 발생<br />이러한 상황을 뭐라고 하는지?</p>
<p><mark>루핑 </mark> </p>
<h4 id="heading-49-ooo">49. <mark>루핑 현상</mark>이 일어나지 않게 하기 위해서 OOO 라는 <mark>알고리즘을</mark> 사용</h4>
<p><mark>STP</mark></p>
<p>50. VPN 프로토콜 중에서 2 계층에서 사용되는 프로토콜은?</p>
<p><mark>1. L2F<br />2. L2TP<br />3. PPTL</mark></p>
<p>51. 스위치1과 스위치2를 연결 해주기 위해서 OOO를 이용함.<mark>상호간의 네트워크를 연결해주는 기기</mark>는?</p>
<p><mark>라우터</mark></p>
<p>52. 사설 A, B, C Class의 기본 서브넷 마스크는?</p>
<p><mark>A Class ) 10.X.X.X / 8<br />B Class ) 172.16.X.X / 16<br />C Class ) 192.168.0.X / 24</mark></p>
<p>**53.**OSI 7계층과 Layer 에서 3계층인 네트워크 계층<br />/ LAN 과 LAN or LAN 과 WAN 을 연결하는 네트워킹<br />/ 네트워크 계층간을 연결하여 접속한 호스트의 최적 경로를 설정</p>
<p><mark>Router</mark></p>
<p>54. 스위칭 허브에서 해당 포트를 물리적 변경을 하지 않고 소프트웨어에 의해 LAN 망을 구분하는 것은?</p>
<p><mark>VLAN</mark></p>
<p>55. 내부 네트워크인 LAN을 위한 접속 port<br />/ 내부의 허브나 스위치 등과 연결을 위한 port<br />/ UTF 케이블과 연결하기 위해서는 MAU 라는 트랜시져를 사용</p>
<p><mark>Ethrnet port</mark></p>
<p>56. 외부 네트워크 접속을 위한 port<br />DSU / CSU와 연결을 위한 port<br />v.35 케이블을 사용하며 WAN port 라 불리는 것은?</p>
<p><mark>Serial port</mark></p>
<p>57. 서버 한 대 이상이 고장나도 서비스 운영이 계속 되도록 여러대의 서버를 서로 연결하여 거대한 하나의 시스템으로 보이게 만드는 기술, 두대 이상의 서버를 마치 하나의 서버처럼 작동하도록 서로 연결하는 것은?</p>
<p><mark>클러스터링</mark></p>
<p>58. 불특정 다수의 이메일 사용자에게 신용카드나 은행 계좌 정보에 문제가 발생해 수정이 필요하다는 거짓 이메일을 발송해 가짜 웹 사이트로 유인하여 관련 금융 기관의 신용카드 정보나 계좌 정보를 빼내는 해킹</p>
<p><mark>Fishing</mark></p>
<p>59. 합법적으로 사용되고 있는 사용자의 도메인을 탈취하거나 도메인 네임 시스템 이름을 속여 사용자들이 진짜 사이트로 오해 하도록 유인하여 개인정보를 훔치는 해킹, 아예 해당 사이트가 공식적으로 운영하고 있던 도메인 자체를 탈취하여 사용자들이 의심 없이 개인정보를 주는 것.</p>
<p><mark>파밍</mark></p>
<p>60. 브리지나 스위치, 라우터 등 네트워크 장비에서<br /><mark>스패닝 트리 알고리즘을 사용하는 이유</mark>는 OOOO이다.</p>
<p><mark>루프 방지</mark></p>
<p>61. OSI7 Layer 모델에서 모든 계층의 기능을(프로토콜 변환기) 수행하는 장치는?</p>
<p><mark>Gateway</mark></p>
<p>62. 유동 IP 주소를 고정 IP 주소처럼 사용할 수 있도록 해주는 서비스를 위한 시스템은?</p>
<p><mark>DDNS</mark></p>
<p>63. 이동 중에도 개인 정보나 차량용 단말기를 통해 CD, DVD 급의 고음질 고화질 방송을 즐길 수 있는 기술은?</p>
<p><mark>DMB</mark></p>
<p>64. 패킷이 암호화 전송이고 22번 port를 사용하는 것은?</p>
<p><mark>SSH</mark></p>
<p>65. 패킷이 비암호화 전송이고 23번 port를 사용하는 것은?</p>
<p><mark>Telnet</mark></p>
<p>66. 유선랜에서 기대할 수 있을 것과 같은 <mark>보안과 프라이버시 수준의 무선랜</mark>의 프로토콜은?</p>
<p><mark>WEB</mark></p>
<p>67. Network Layer의 프로토콜 5가지</p>
<p>1. ARP<br />2. RARP<br />3. ICMP<br />4. IGMP<br />5. RIP</p>
<p>68. 데이터를 <mark>안전하게 주고 받기 위한 통신 규약</mark></p>
<p><mark>SSL</mark></p>
<ol start="69">
<li>공중망을 사설망처럼 이용하고 회선 비용을 크게 절감하게 해주는 기업 통신 서비스<br />/ 오직 한 회사에 의해서만 사용 될 수 있는 자체망이나 전용 회선과 대비되는 개념<br />/ 공중 통신망 기반시설을 터널링 프로토콜과 보안 절차 등을 사용하여 개별 기업의 목적에 맞게 구성된 네트워크</li>
</ol>
<p><mark>VPN</mark></p>
<p>70. PKI에 기반하여 <mark>전자 우편 암호화 및 디지털 서명 기능</mark>을 제공하는 프로토콜은?</p>
<p><mark>S/MIME</mark></p>
<p>71. (A)는 시스템의 상태정보나 데이터를 그래프로 그려주는 일종의 그래픽 툴<br />/ 대부분의 ISP는 (A)를 이용하여 네트워크 장비의 트래픽 처리능력과 동작상태를 모니터링함.</p>
<p><mark>MRTG (Multiple Traffic Grapher)</mark></p>
<p>72. 포트 번호 맞추기</p>
<p>SSH(포트번호: 22)<br />Telnet(포트번호: 23)<br />SMTP(포트번호: 25)<br />DNS(포트번호: 53)<br />TFTP(포트번호: )<br />HTTP(포트번호: 80 )<br />SNMP(포트번호: )</p>
<p>73. 외부에 공개된 웹 서비스로 HTTP, HTTS 프로토콜에 대한 보안 능력이 미흡.IPS는 웹 보안에 대해서는 패킷 필터링 방식의 한계로 인해 검사 정확도 결여 및 SSL 통신에 대해 검사가 불가능하므로 웹 보안에 취약하다. 웹 어플리케이션의 취약점을 이용한 홈페이지 변조, 사용자 ID 도용, 관리자 권한 획득 및 중요정보 획득 가능성</p>
<p><mark>WAF</mark></p>
<p>74. VTP에서 V에 해당하는 용어를 입력하시오.</p>
<p><mark>VLAN</mark><br />VLAN Trunking Protocol<br />연결된 스위치들 간에 VLAN정보를 주고받아 자동으로 동기화하게 해주는 프로토콜</p>
<p>75. 대표적인 <mark>링크 상태 라우팅 프로토콜.</mark><br />인터넷에서 연결된 링크의 상태를 감시하여 최적의 경로를 선태갛고 주로 중, 대규모 네트워크를 구성할 때 많이 사용하며 구역(area) 개념을 사용해 빠른 업데이트와 라우팅 테이블을 효과적으로 관리 가능</p>
<p><mark>OSPF </mark> </p>
<p>76. Ping을 정상적으로 사용할 수 있도록 (A) 빈칸에 들어갈 내용 입력  </p>
<p>#echo (A) /proc/sys/net/ipv4/icmp_echo_ignore_all</p>
<p><mark>정답 : 0</mark><br />0 : ping 응답<br />1 : ping 거부<br />ignore = 무시하다 = 반대가 반대</p>
<p><a target="_blank" href="https://worlf.tistory.com/40">https://worlf.tistory.com/40</a></p>
<blockquote>
<h3 id="heading-2024-4">2024년 4회차 라우터유형 기출문제</h3>
<h3 id="heading-2024-3">2024년 3회차 라우터유형 기출문제</h3>
<h3 id="heading-2024-2">2024년 2회차 라우터유형 기출문제</h3>
<h3 id="heading-2024-1">2024년 1회차 라우터유형 기출문제</h3>
<h3 id="heading-2023-4">2023년 4회차 라우터유형 기출문제</h3>
<h3 id="heading-2023-3">2023년 3회차 라우터유형 기출문제</h3>
<h3 id="heading-2023-2">2023년 2회차 라우터유형 기출문제</h3>
<h3 id="heading-2023-1">2023년 1회차 라우터유형 기출문제</h3>
<p>① 아래의 그림과 같이 Router1의 현재 라우팅 테이블을 확인하고 저장하시오</p>
<h3 id="heading-2022-4">2022년 4회차 라우터유형 기출문제</h3>
<h3 id="heading-2022-3">2022년 3회차 라우터유형 기출문제</h3>
</blockquote>
<p>① Router1의 FastEthernet 0/0을 사용가능하게 IP주소를 192.168.0.101/24와 두번째 IP를 192.168.102/24로 설정하고 활성화 하시오</p>
<p>Router&gt; en<a target="_blank" href="https://blog.naver.com/suneue7/223405318823">  
</a>Router# conf t<br />Router(config)# int f 0/0<br />Router(config-if)# ip add 192.168.0.101 255.255.255.0<br />Router(config-if)# ip add 192.168.102.0 255.255.255.0 secondary<br />Router(config-if)# no shutdown<br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<p>② Router2의 <mark>DHCP pool을 icqa로 설정</mark>하고 <mark>네트워크는 192.168.100.0/24로 설정</mark>하하시오</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# <mark>ip dhcp pool icqa</mark><br />Router(dhcp-config)# <mark>network 192.168.100.0 255.255.255.0</mark><br />Router(dhcp-config)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ <mark>라우팅 테이블 정보</mark>를 확인하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show ip route</mark><br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2022-2">2022년 2회차 라우터유형 기출문제</h3>
</blockquote>
<p>① <mark>host의 정보</mark>를 확인하고 저장하시오</p>
<p>Router&gt; en</p>
<p>Router# <mark>show host</mark></p>
<p>Router# copy r s</p>
<p>② SNMP 통신 시 ICQA라는 Community를 통해 모니터링 할 수 있도록 Router1에 설정하시오. (단, 'ICQA'는 대소문자를 구분함. 완료된 설정은 'Router# copy running-config startup-config'를 사용하여 startup-config에 저장하고 이외 저장 명령어는 사용금지)</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# snmp community ICQA<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ 정적라우팅을 설정하시오. 목적지 네트워크 <strong>ip : 24.48.200.0/24 게이트웨이 ip : 100.150.100.2</strong></p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# ip route 24.48.200.0 255.255.255.0 100.150.100.2<br />Router(config)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2022-1">2022년 1회차 라우터유형 기출문제</h3>
</blockquote>
<p>① 라우터의 소프트웨어 <mark>버전</mark>과 IOS <mark>버전</mark> 등을 확인하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show version</mark><br />Router# copy r s</p>
<p>② Default-Gateway를 설정하고, 저장하시오. (IP : 192.168.100.0)</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# <mark>ip default-gateway 192.168.100.0</mark><br />Router(config)# exit<br />Router# copy r s</p>
<p>③ FastEthernet 0/0의 Description을 설정하시오. <mark>Description : ICQA</mark></p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# int 0/0<br />Router(config-if)# <mark>description ICQA</mark><br />Router(config-if)# exit<br />Router(config-if)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2021-4">2021년 4회차 라우터유형 기출문제</h3>
</blockquote>
<p>① <mark>인터페이스를 확인</mark>하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show interface</mark><br />Router# copy r s</p>
<p>② 라우터에서 telnet 접속할때 vty 0 4까지 ssh로 접속가능하도록 설정하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# <mark>li vty 0 4</mark><br />Router(config-if)# <mark>transport input ssh</mark><br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ Router1의 FastEthernet 0/0을 사용가능하게 IP주소를 192.168.0.101/24와 두번째 IP를 192.168.102/24로 설정하고 활성화 하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# int f 0/0<br />Router(config-if)# ip add 192.168.0.101 255.255.255.0<br />Router(config-if)# ip add 192.168.102.0 255.255.255.0 secondary<br />Router(config-if)# no sh<br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2021-3">2021년 3회차 라우터유형 기출문제</h3>
</blockquote>
<p>① 라우터의 소프트웨어 <mark>버전</mark>과 IOS <mark>버전 </mark> 등을 확인하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show version</mark><br />Router# copy r s</p>
<p>② ROUTER1의 Serial 2/0을 사용가능하게 IP 주소를 192.168.0.101/24와 두번째 IP 192.168.0.102/24로 설정하고 활성화 하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# int s 2/0<br />Router(config-if)# ip add 192.168.0.101 255.255.255.0<br />Router(config-if)# ip add 192.168.102.0 255.255.255.0 secondary<br />Router(config-if)# no shutdown<br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ Router2의 DHCP 네트워크를 192.168.100.0/24 서버이름은 'icqa'로 설정하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# <mark>ip dhcp pool icqa</mark><br />Router(dhcp-config)# network 192.168.100.0 255.255.255.0<br />Router(dhcp-config)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2021-2">2021년 2회차 라우터유형 기출문제</h3>
</blockquote>
<p>① <mark>라우팅 테이블 정보</mark>를 확인하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show ip route</mark><br />Router# copy r s</p>
<p>② <mark>기본 게이트웨이</mark>를 설정하시오. (IP : 192.168.0.10)</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# <mark>ip default-gateway 192.168.0.10</mark><br />Router(config)# exit<br />Router# copy r s</p>
<p>③ Router2의 serial 2/0에 <mark>frame relay 방식으로 캡슐화 </mark> 하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# interface serial 2/0<br />Router(config-if)# <mark>encapsulation frame-relay</mark><br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2021-1">2021년 1회차 라우터유형 기출문제</h3>
</blockquote>
<p>① <mark>접속한 사용자 정보</mark>를 확인하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show user</mark><br />Router# copy r s</p>
<p>② FastEthernet 0/0의 정적 라우팅 테이블 경로 지정하시오. 목적지ip : 24.48.200.0/24 게이트웨이IP: 100.150.100.2</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# ip route 24.48.200.0 255.255.255.0 100.150.100.2<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ FastEthernet 0/0의 Description을 설정하시오. Description : ICQA</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# interface fastethernet 0/0<br />Router(config-if)# description ICQA<br />Router(config-if)# exit<br />Router(config-if)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2020-4">2020년 4회차 라우터유형 기출문제</h3>
</blockquote>
<p>① 모든 <mark>인터페이스 확인</mark></p>
<p>Router&gt; en<br />Router# <mark>show interface</mark><br />Router# copy r s</p>
<p>② <mark>기본 네트워크</mark>를 설정하시오 (IP : 192.168.0.10)</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# <mark>ip default-network 192.168.10.0</mark><br />Router(config)# exit<br />Router# copy r s</p>
<p>③ FastEthernet 0/0에 IP추가 후 활성화 IP: 192.168.100.1/24</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# interface fastethernet 0/0<br />Router(config-if)# ip add 192.168.100.1 255.255.255.0<br />Router(config-if)# no shutdown<br />Router(config-if)# end<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2020-3">2020년 3회차 라우터유형 기출문제</h3>
</blockquote>
<p>① 라우터 <mark>버전</mark>확인</p>
<p>Router&gt; en<br />Router# <mark>show version</mark><br />Router# copy r s</p>
<p>② serial 2/0에 encapsulation frame-relay 설정</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# interface serial 2/0<br />Router(config-if)# <mark>encapsulation frame-relay</mark><br />Router(config-if)# end<br />Router# copy r s</p>
<p>**<br />③ ROUTER2의 Serial 0/0의 IP 및 서브넷을 설정하고 저장하시오. IP: 192.168.100.1/24**</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# int s 2/0<br />Router(config-if)# ip add 192.168.100.1 255.255.255.0<br />Router(config-if)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2020-2">2020년 2회차 라우터유형 기출문제</h3>
</blockquote>
<p>① <mark>라우팅 테이블 확인</mark></p>
<p>Router&gt; en<br />Router# <mark>show ip route</mark><br />Router# copy r s</p>
<p>② ROUTER2의 Serial 0/0의 IP 및 서브넷을 설정하고 저장하시오. IP: 192.168.100.1/24</p>
<p>Router&gt; en<br />Router&gt; conf t<br />Router&gt; int s 2/0<br />Router&gt; ip add 192.168.100.1 255.255.255.0<br />Router&gt; no sh<br />Router&gt; exit</p>
<p>③ <mark>Default-Network를 설정</mark>하고 저장하시오. (IP : 192.168.100.0)</p>
<p>Router&gt; en<br />Router&gt; conf t<br />Router(config)# <mark>ip default-network 192.168.10.0</mark><br />Router(config)# end<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2019-4">2019년 4회차 라우터유형 기출문제</h3>
</blockquote>
<p><strong>① 라우터의 소프트웨어 <mark>버전</mark>과 IOS <mark>버전</mark> 등을 확인하고 저장하시오.</strong></p>
<p>Router&gt; en<br />Router# <mark>show version</mark><br />Router# copy r s</p>
<p><strong>② Default-Gateway를 설정하고 저장하시오. (IP : 192.168.100.0)</strong></p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# ip default-gateway 192.168.100.0<br />Router(config)# exit<br />Router# copy r s</p>
<p><strong>③ Router2의 serial 2/0에 <mark>frame relay 방식으로 캡슐화</mark> 하시오.</strong></p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# interface serial 2/0<br />Router(config-if)# <mark>encapsulation frame-relay</mark><br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<blockquote>
<h3 id="heading-2019-3">2019년 3회차 라우터유형 기출문제</h3>
</blockquote>
<p>① 접속한 <mark>사용자 정보</mark>를 확인하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show user</mark><br />Router# copy r s</p>
<p>② Router1의 FastEthernet 0/0을 사용가능하게 IP주소를 192.168.0.101/24와 두번째 IP를 192.168.102/24로 설정하고 활성화 하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# interface fastethernet 0/0<br />Router(config-if)# ip add 192.168.0.101 255.255.255.0<br />Router(config-if)# ip add 192.168.102.0 255.255.255.0 secondary<br />Router(config-if)# no shutdown<br />Router(config-if)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ Router2의 호스트 이름을 'ICQA'로 설정하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# hostname ICQA<br />ICQA(config)# exit<br />ICQA# copy r s</p>
<blockquote>
<p>2019년 2회차 라우터유형 기출문제</p>
</blockquote>
<p>① <mark>라우팅 테이블을 확인</mark>하고 저장하시오.</p>
<p>Router&gt; en<br />Router# <mark>show ip route</mark><br />Router# copy r s</p>
<p>② Router2의 DHCP 네트워크를 192.168.100.0/24 서버이름은 'icqa'로 설정하시오.</p>
<p>Router&gt; en<br />Router# conf t<br />Router(config)# ip dhcp pool icqa<br />Router(dhcp-config)# network 192.168.100.0 255.255.255.0<br />Router(dhcp-config)# exit<br />Router(config)# exit<br />Router# copy r s</p>
<p>③ FastEthernet 0/0의 Description을 설정하시오. Description : ICQA</p>
<p><a target="_blank" href="https://blog.naver.com/suneue7">h</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">ttps://blog.naver.com/</a><a target="_blank" href="https://blog.naver.com/suneue7">su</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">neue7/223405318823</a></p>
<p><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">https://dev-as</a><a target="_blank" href="https://blog.naver.com/suneue7">tr</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">a.tistory.co</a><a target="_blank" href="https://blog.naver.com/suneue7">m/</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">45</a></p>
<p><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">https://devbirdfeet.tistor</a><a target="_blank" href="https://blog.naver.com/suneue7">y.</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">com/296</a></p>
<p><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">ht</a><a target="_blank" href="https://blog.naver.com/suneue7">tp</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">s://rbwsn.tistory.com/87</a></p>
<h3 id="heading-httpsblognavercomsuneue7223405318823"><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">선택형 , 단답형</a></h3>
<p><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">ht</a><a target="_blank" href="https://blog.naver.com/suneue7">tp</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">s://ohaengsa.tistory.com/40</a></p>
<p><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">네</a><a target="_blank" href="https://ohaengsa.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EA%B4%80%EB%A6%AC%EC%82%AC-2%EA%B8%89-%EC%8B%A4%EA%B8%B0-%EB%8F%85%ED%95%99-%EA%B3%B5%EB%9E%B5%EB%B2%95">관 공략</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">법</a></p>
<p><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">http</a><a target="_blank" href="https://blog.naver.com/suneue7">s:</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">//baekspace.tistory.com</a><a target="_blank" href="https://blog.naver.com/suneue7">/2</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">63#fastethernet-0/0%</a><a target="_blank" href="https://blog.naver.com/suneue7">EC</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">%9D%98-ip%EB%A5%</a><a target="_blank" href="https://blog.naver.com/suneue7">BC</a><a target="_blank" href="https://blog.naver.com/suneue7/223405318823">-192.168.0.100/24-%</a><a target="_blank" href="https://baekspace.tistory.com/263#fastethernet-0/0%EC%9D%98-ip%EB%A5%BC-192.168.0.100/24-%EB%A1%9C-%EC%84%A4%EC%A0%95">EB%A1%9C-%EC%84%A4%EC%A0%95</a></p>
<p><a target="_blank" href="https://howbeautifulworld.tistory.com/101">https://howbeautifulworld.tistory.com/101</a><br /><a target="_blank" href="https://howbeautifulworld.tistory.com/100">https://howbeautifulworld.tistory.com/100</a></p>
]]></content:encoded></item><item><title><![CDATA[[네트워크 관리사2급] 필기 요약]]></title><description><![CDATA[5개년 기출(1)5개년 기출(2)반드시 풀어보고 응시하러 가길 바람
롤링 클러스터 업그레이드 = 서비스 중단없이 한 노드씩 업그레이드
리피터 = 신호를 증폭
Hub = 네트워크 환경에서 여러 개의 기기를 서로 연결하는 역할을 하는 장치
스위치 = Hub랑 유사하지만 전송속도가 향상(스위치 > 허브)
Gateway = 라우터 = 네트워크와 네트워크 간의 경로(Route)를 설정하고 가장 빠른 길로 트래픽을 이끌어주는 네트워크 장비입니다.
DHCP...]]></description><link>https://haroldrippin.hashnode.dev/2</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/2</guid><category><![CDATA[network]]></category><category><![CDATA[certificate]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Fri, 18 Oct 2024 13:12:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/40XgDxBfYXM/upload/52ca0ccd6ca53b626eabaf18cba84caf.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a target="_blank" href="https://cbt.youngjin.com/">5개년 기출(1)</a><br /><a target="_blank" href="https://www.gunsys.com/q/index.php?midCode=7511">5개년 기출(2)</a><br /><mark>반드시 풀어보고 응시하러 가길 바람</mark></p>
<p><strong>롤링 클러스터 업그레이드</strong> = <mark>서비스 중단없이 한 노드씩 업그레이드</mark></p>
<p><strong>리피터</strong> = <mark>신호를 증폭</mark></p>
<p>Hub = 네트워크 환경에서 여러 개의 기기를 서로 연결하는 역할을 하는 장치</p>
<p>스위치 = Hub랑 유사하지만 전송속도가 향상(스위치 &gt; 허브)</p>
<p>Gateway = 라우터 = <strong>네트워크와 네트워크 간의 경로(Route)를 설정하고 가장 빠른 길로 트래픽을 이끌어주는 네트워크 장비입니다.</strong></p>
<p>DHCP = 동적으로 IP 할당하는 프로토콜, <mark>UDP</mark></p>
<p>SSL = HTTP 에서 사용되는 암호화 방식 <mark>443포트</mark></p>
<p>SSH = 원격 접속할때 암호화 <mark>22포트</mark></p>
<p>tcpdump = 스니핑</p>
<p>재전송 = Error control = ARQ 이고 ARQ 중의 go-back-and 혹은 stop and wait , selective ARQ , Adapive ARQ</p>
<p><strong>서브넷팅(Subnetting) =</strong> 서브넷팅이란 IP주소 낭비를 방지하기 위해 네트워크를 분할하여 효율적으로 사용하는 개념입니다.</p>
<p><mark>멀티플렉싱</mark> = 하나의 회선을 여러 사용자들이 <mark>동시에 채널을 나누어 </mark> 사용할 수 있도록 하는 방법</p>
<p><strong>DNS에서 사용될때 TTL</strong> = 데이터가 DNS 서버 <mark>캐시</mark>로부터 나오기 전에 <mark>현재 남는 시간</mark></p>
<p>MAC 주소 = <mark>48 비트</mark></p>
<p>NAC = 네트워크에 접속하는 엔드포인트(PC, 스마트폰 등과 같은 네트워크에 접속하는 모든 유무선 기기)에 대해 <mark>접속 가능 </mark> 여부를 <mark>확인</mark>하여 인가된 장치만이 <mark>접속할 수 있도록 제한하는 것</mark></p>
<p>Ip class 사용되는 멀티캐스트 = <mark>D class</mark></p>
<p>LCC , MAC 주소 계층 = <mark>데이터링크 계층</mark></p>
<p><mark>IPv4 Address</mark> 중 네트워크 ID가 ′<mark>127</mark>′로 시작하는 주소의 용도 = <mark>루프백 주소</mark></p>
<p>하드웨어적인 이상 유무나 디스크, 메모리, CPU, 커널 등의 이상 유무를 확인할 수 있는 로그파일 <strong>\=</strong> <mark>/var/log/dmesg</mark></p>
<p>로그온,파일,관리자가 사용한 감사 이벤트 등 모든 <mark>감사된 이벤트</mark>를 보여주는 로그 = <mark>보안로그</mark></p>
<p>하드웨어 메모리가 가득 차게 되면 논리적인 <mark>메모리 저장공간 역할</mark>을 수행하게 되는 파티션 = <mark>SWAP</mark></p>
<h3 id="heading-osi-7-layerjavascriptanswercheck31-3">[OSI 7 Layer](javascript:answer_check(31, 3))</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Layer</td><td>Name</td><td>Data 단위</td><td>장비</td><td>프로토콜</td></tr>
</thead>
<tbody>
<tr>
<td>7</td><td>Application</td><td>메세지</td><td><mark>Gateway</mark></td><td>HTTP, FTP, DNS, SNMP, Telnet, SMTP</td></tr>
<tr>
<td>6</td><td>Presentation</td><td>메세지</td><td>-</td><td>SSL, TLS</td></tr>
<tr>
<td>5</td><td>Session</td><td>메세지</td><td>-</td><td>NetBIOS, PPTP</td></tr>
<tr>
<td>4</td><td>Transport</td><td>세그먼트(TCP), 데이터그램(UDP)</td><td>-</td><td>TCP, UDP</td></tr>
<tr>
<td>3</td><td>Network</td><td><mark>패킷</mark></td><td><mark>Router</mark></td><td>IP, ICMP, ARP, RARP, IGMP, IPX</td></tr>
<tr>
<td>2</td><td>Data Link</td><td><mark>프레임</mark></td><td>Bridge, Switch</td><td>PPP, ARP, Ethernet, HCLC, LAPB, PAPD</td></tr>
<tr>
<td>1</td><td>Physical</td><td><mark>비트</mark></td><td><mark>Repeater, Hub</mark></td><td>Ethernet, USB, 블루투스, IEEE802.11, RS-232C, X.21, V.21</td></tr>
</tbody>
</table>
</div><h3 id="heading-osi-7-layer">OSI 7 Layer의 역할</h3>
<ul>
<li><p>응용 계층(Application Layer) - 인터페이스와 서비스 제공</p>
</li>
<li><p>표현 계층(Presentation Layer) - <mark>암호/복호화, 압축</mark>, 구문 변환</p>
</li>
<li><p>세션 계층 - 프로세스 간 연결 / 대화제어, 연결 설정, 동기화</p>
</li>
<li><p><mark>전송 계층 - 패킷 순서, 흐름, 오류 수정 (신뢰성, 정확성)</mark></p>
</li>
<li><p><mark>네트워크 계층</mark> - 패킷 ‘<mark>전달</mark>’만 잘 하면 됌</p>
</li>
<li><p><mark>데이터링크 계층 - 오류제어, 흐름제어 (point to point)</mark></p>
</li>
<li><p>물리 계층(Physical Layer) - 물리 계층 최하위 계층으로 하드웨어같은 물리적인 매체를 통해 bits 단위로 데이터를 전송한다.</p>
</li>
</ul>
<h3 id="heading-tcp-amp-udp">TCP &amp; UDP</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>프로토콜 종류</td><td>TCP</td><td>UDP</td></tr>
</thead>
<tbody>
<tr>
<td>연결 방식</td><td>연결형</td><td>비연결형(실시간)</td></tr>
<tr>
<td>패킷 교환 방식</td><td>가상 회선 방식</td><td>데이터그램 방식</td></tr>
<tr>
<td>전송 순서</td><td>전송 순서 보장</td><td>전송 순서 변경 가능</td></tr>
<tr>
<td>수신 여부 확인</td><td>확인</td><td>비확인</td></tr>
<tr>
<td>통신 방식</td><td><mark>Point to Point(1:1)</mark></td><td>N:N 통신</td></tr>
<tr>
<td>신뢰성</td><td>높음</td><td>낮음</td></tr>
<tr>
<td>속도</td><td>느림</td><td>빠름</td></tr>
<tr>
<td>헤더</td><td>복잡</td><td>간단</td></tr>
<tr>
<td>프로토콜</td><td>FTP(20, 21), <mark>SSH(22)</mark>, Telnet(23), HTTP(80), <mark>SSL(443)</mark>, POP3(110)</td><td>DNS(53), DHCP(67, 68), TFTP(69), SNMP(161, 162)</td></tr>
<tr>
<td>비고</td><td>Sliding window, 3-way Handshaking</td><td>-</td></tr>
</tbody>
</table>
</div><h3 id="heading-tcp">TCP 헤더의 구성</h3>
<p><img src="https://blog.kakaocdn.net/dn/cCay4S/btsgaNkVqV2/DPu0kkswaWxLuVeW7zJ5SK/img.png" alt /></p>
<ul>
<li><p>Source Port / Destination Port : 세그먼트의 출발지와 목적지를 나타내는 필드</p>
</li>
<li><p>Sequence : 전송하는 데이터의 순서</p>
</li>
<li><p>Acknowledge : 수신이 예상하는 다음 시퀸스#</p>
</li>
<li><p>Flags : 비트 플래그이며 세그먼트의 상태<br />  → URG(긴급, 최우선) ACK(확인) SYN(요청) FIN(완료) RST(리셋) PSH(푸쉬)</p>
</li>
<li><p>Window Size : 한번에 전송할 수 있는 데이터의 양</p>
</li>
<li><p>Checksum : 송신 중에 발생하는 <strong><mark>오류를 검출하는 값</mark></strong>. (값을 대조해봄)</p>
</li>
</ul>
<h3 id="heading-udp">UDP 헤더 구성</h3>
<p><img src="https://blog.kakaocdn.net/dn/v9sjb/btqEInCmCFr/kBQ5KHnV2ZXMTrY4Iy74dk/img.png" alt /></p>
<h3 id="heading-tcp-3-way-handshaking">TCP의 3-way Handshaking</h3>
<p><img src="https://blog.kakaocdn.net/dn/cyOVfX/btseQutwMjv/IZkg49elmWuxc99rvK5UVk/img.png" alt /></p>
<ol>
<li><p>Client - 서버로 SYN 전송</p>
</li>
<li><p>Server - Client로 SYN+ACK 전송</p>
</li>
<li><p>Client - ACK</p>
</li>
</ol>
<h2 id="heading-port">Port 포트</h2>
<div class="hn-table">
<table>
<thead>
<tr>
<td></td><td></td><td></td></tr>
</thead>
<tbody>
<tr>
<td>Well-known port</td><td>Registered Port</td><td>Dynamic Port</td></tr>
<tr>
<td>FTP 20, 21</td><td>오라클DB 1521</td><td>49152-65535 번까지 아무거나 사용</td></tr>
<tr>
<td><mark>SSH 22</mark></td><td>MySQL 3306</td><td></td></tr>
<tr>
<td>TELNET 23</td><td>MS원격데스크탑 3389</td><td></td></tr>
<tr>
<td>DNS 53</td><td></td><td></td></tr>
<tr>
<td>DHCP 67, 68</td><td></td><td></td></tr>
<tr>
<td>TFTP 69</td><td></td><td></td></tr>
<tr>
<td><mark>HTTP 80</mark></td><td></td><td></td></tr>
<tr>
<td><mark>HTTPS 443</mark></td><td></td></tr>
</tbody>
</table>
</div><h3 id="heading-ipv6">IPv6</h3>
<ul>
<li><p><mark>총 128비트</mark>, 16비트씩 8부분 (IPv4의 주소공간을 4배 확장)</p>
</li>
<li><p>라우터 부담 감소, 네트워크 부하 분산</p>
</li>
<li><p><mark>모바일IP, IPSec 사용</mark> / 인증과 보안 강화 / 자동 주소 설정 기능</p>
</li>
<li><p>확장 헤더 -&gt; 안정된 옵션 사용</p>
</li>
<li><p>2001:0DB8:1000:<mark>0000</mark>:<mark>0000</mark>:<mark>0000</mark>:1111:2222<br />  \= 2001:0DB8:1000::::1111:2222</p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>유니캐스트</td><td>애니캐스트</td><td>멀티캐스트</td></tr>
</thead>
<tbody>
<tr>
<td>한 개 노드에 단일 목적지를 지정하는 주소 형태</td><td>복수개 인터페이스에 주소 부여 가능한 형태로 된 패킷은 노드 그룹들 중 하나에만 전달</td><td>여러 개 노드가 수신할 수 있는 특정 주소로 보내진 패킷은 그룹의 모든 노드에게 전달</td></tr>
</tbody>
</table>
</div><p><img src="https://velog.velcdn.com/images/yadeimon/post/3c81b07c-6d5d-4e6d-a0e7-3a4872149449/image.png" alt /></p>
<h3 id="heading-ipv4">IPv4</h3>
<ul>
<li><p><mark>총 32비트</mark>, 8비트씩 4부분 / 10진수</p>
</li>
<li><p>네트워크 주소 + 호스트 주소</p>
</li>
<li><p>신뢰성 없이 전달만 수행.</p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>유니캐스트</td><td>브로드캐스트</td><td>멀티캐스트</td></tr>
</thead>
<tbody>
<tr>
<td>한 개 노드에 단일 목적지를 지정하는 주소 형태</td><td>로컬 랜에 붙어있는 모든 장비들에게 보내는 통신</td><td>여러 개 노드가 수신할 수 있는 특정 주소로 보내진 패킷은 그룹의 모든 노드에게 전달</td></tr>
</tbody>
</table>
</div><p><img src="https://velog.velcdn.com/images/yadeimon/post/07181abf-0d3e-4f46-95d3-f799e012f3e7/image.png" alt /></p>
<h3 id="heading-ipv4-1">IPv4 클래스</h3>
<ul>
<li><p>A</p>
<ul>
<li><p>범위 : 0.0.0.0 ~ 126.255.255.255</p>
</li>
<li><p>시작 bit : 0</p>
</li>
<li><p>설명 : 국가나 대형 네트워크</p>
</li>
</ul>
</li>
<li><p>B</p>
<ul>
<li><p>범위 : 128.0.0.0 ~ 191.255.255.255</p>
</li>
<li><p>시작 bit : 10</p>
</li>
<li><p>설명 : 중대형 네트워크</p>
</li>
</ul>
</li>
<li><p>C</p>
<ul>
<li><p>범위 : 192.0.0.0 ~ 223.255.255.255</p>
</li>
<li><p>시작 bit : 110</p>
</li>
<li><p>설명 : 소형 네트워크</p>
</li>
</ul>
</li>
<li><p>D</p>
<ul>
<li><p>범위 : 224.0.0.0 ~ 239.255.255.255</p>
</li>
<li><p>시작 bit : 1110</p>
</li>
<li><p>설명 : IP 멀티캐스트</p>
</li>
</ul>
</li>
<li><p>E</p>
<ul>
<li><p>범위 : 240.0.0.0 ~ 247.255.255.255</p>
</li>
<li><p>시작 bit : 11110</p>
</li>
<li><p>설명 : 실험용(연구용) IP</p>
</li>
</ul>
</li>
</ul>
<p>ex-(1). 122.12.250.13 = A 클래스, 네트워크 : 122.0.0.0, 호스트 : 12.250.13<br />ex-(2). 129.123.22.5 = B 클래스, 네트워크 : 129.123.0.0, 호스트 : 22.5<br />ex-(3). 211.203.130.250 = C 클래스, 네트워크 : 211.203.130.0, 호스트 : 250</p>
<h3 id="heading-nat-network-address-translation">NAT (Network Address Translation)</h3>
<p>네트워크 주소 변환(NAT)은 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술이다.</p>
<p>패킷에 변화가 생기기 때문에 IP나 TCP/UDP의 Checksum도 다시 계산되어 재기록해야한다. 내부망에서는 사설 IP주소를 사용하여 통신하고, <mark>외부망은 NAT을 거쳐 공인 IP 주소로 자동 변환</mark>한다.</p>
<h3 id="heading-arp-address-resolution-protocol">ARP (Address Resolution Protocol)</h3>
<p>같은 공간에서 통신하는 2계층에서 벗어나 다른 네트워크 대역에 있는 컴퓨터들과 통신을 하고 싶다면 MAC 주소를 알아내야 한다.</p>
<p>ARP는 IP를 통해 MAC 주소를 알아내는 역할을 하는 프로토콜이다.</p>
<ul>
<li><p><mark>ARP : IP → MAC</mark></p>
</li>
<li><p><mark>RARP : MAC → IP</mark></p>
</li>
<li><p>스위치(Switch) : 스위치와 연결된 디바이스의 MAC 주소를 기록하고, 해당 주소를 사용해 어떤 디바이스가 외부 송출 패킷을 전송했는지, 전송한 패킷을 어디로 전달해야 하는 지 파악한다</p>
</li>
</ul>
<h3 id="heading-icmp-internet-control-message-protocol">ICMP (Internet Control Message Protocol)</h3>
<p>ICMP 프로토콜은 네트워크 통신 시 운영체제로부터 <mark>오류 메세지를 알려주는 프로토콜</mark>이다. 오류가 나면 어떤 오류인지 Type과 code로 파악할 수 있다.</p>
<div class="hn-table">
<table>
<thead>
<tr>
<td>Type</td><td>Name</td><td>desc</td></tr>
</thead>
<tbody>
<tr>
<td>0</td><td>Echo Reply</td><td>에코 <mark>응답</mark> (디버깅 목적)</td></tr>
<tr>
<td>3</td><td>Destination Unreachable</td><td>라우팅/데이터 전송을 못할 때</td></tr>
<tr>
<td>4</td><td>Sourche Quench</td><td>송신측 데이터 전송속도 늦춰달라는 메세지, 전송시 중간장비에 대한 혼잡상황이 발생한 경우 패킷 손실/파괴되는 경우의 메세지</td></tr>
<tr>
<td>5</td><td>Redirect</td><td>원격으로 라우팅 테이블 내 주소 변환 가능. 더 나은 Gateway가 있으면 경로 변환 요청</td></tr>
<tr>
<td>8</td><td>Echo Request</td><td>에코 <mark>요청</mark> (디버깅 목적)</td></tr>
<tr>
<td>11</td><td>Time Exceeded</td><td>시간 초과(목적지에 도달하기 전에 TTL이 0이 됌)</td></tr>
<tr>
<td>12</td><td>Parameter Problem</td><td>Checksum에 의한 오류검출 결과 오류 시 자료 재전송 요청</td></tr>
</tbody>
</table>
</div><h3 id="heading-igmp-internet-group-management-protocol">IGMP (Internet Group Management Protocol)</h3>
<ul>
<li><p>IGMP는 IPv4를 사용하는 네트워크에서 <mark>멀티캐스팅</mark>을 설정하는 데 사용되는 프로토콜이다.</p>
<ul>
<li><code>멀티캐스팅</code>이란? <mark>특정 다수와 통신하는 것(</mark><strong><mark>IGMp</mark></strong><mark>)</mark></li>
</ul>
</li>
<li><p>여러 장치가 하나의 IP주소를 공유하여 모두 동일한 데이터를 수신할 수 있다.</p>
</li>
<li><p><mark>TTL이 제공되는 비대칭 프로토콜</mark>.</p>
</li>
</ul>
<h3 id="heading-ftp-tftp">FTP / TFTP</h3>
<ul>
<li><p>FTP란 File Transfer Protocol의 약자로 영어 그대로 서버와 클라이언트 사이에서 TCP/IP를 통해 파일을 송수신하기 위해 고안된 프로토콜입니다.</p>
</li>
<li><p>FTP 는 <mark>TCP</mark></p>
</li>
<li><p>TFTP 는 <mark>UDP</mark></p>
</li>
</ul>
<h3 id="heading-smtp-simple-mail-transfer-protocol">SMTP (Simple Mail Transfer Protocol)</h3>
<ul>
<li><p>단순 <mark>이메일 송신</mark> 시 사용되는 TCP 응용 프로토콜</p>
</li>
<li><p>포트 번호 25</p>
</li>
</ul>
<h3 id="heading-imap-internet-access-message-protocol">IMAP (Internet Access Message Protocol)</h3>
<ul>
<li><p>서버로부터 <mark>이메일 메세지</mark>를 관리하고 수신에 사용되는 프로토콜</p>
</li>
<li><p>서버에 메세지를 저장하고 여러가지 디바이스에 이 메일들을 동기화</p>
</li>
<li><p>포트 번호 143</p>
</li>
</ul>
<h3 id="heading-pop3-post-office-protocl3">POP3 (Post Office Protocl3)</h3>
<ul>
<li><p>이메일을 받아오는(수신) 프로토콜</p>
</li>
<li><p>서버로부터 이메일을 가져오고 가져온 메일이 확인되면 서버로부터 이메일을 삭제한다.</p>
</li>
<li><p>포트 번호 110</p>
</li>
</ul>
<h3 id="heading-dhcp">DHCP</h3>
<ul>
<li><p>동적으로 IP 할당하는 프로토콜</p>
</li>
<li><p><mark>UDP</mark></p>
</li>
</ul>
<h3 id="heading-snmp-simple-network-management-protocol">SNMP (Simple Network Management Protocol)</h3>
<ul>
<li><p><mark>TCP/IP</mark>를 사용하는 <mark>망 관리</mark> 프로토콜(쉽게 말해 <mark>네트워크 모니터링</mark>)</p>
</li>
<li><p><mark>UDP</mark> 데이터그램 방식 사용해서 전송</p>
</li>
<li><p>IETF RFC1157 표준 권고안</p>
</li>
<li><p>4가지 기능 수행 : GET / GET NEXT / SET / TRAP</p>
</li>
<li><p>비동기식 요청/응답 메세지 프로토콜</p>
</li>
<li><p>포트 번호 161, 162</p>
</li>
</ul>
<p><strong>NNTP (Network News Transfer Protocol)</strong><br /><strong>인터넷 전자회의실 시스템인 뉴스그룹에서 사용하는 프로토콜입니다.</strong><br />기사의 배포나 투고 접수, 뉴스 서버 간의 기사 교환에 사용됩니다</p>
<h3 id="heading-dns-domain-name-system">DNS (Domain Name System)</h3>
<ul>
<li><p>HTTP, FTP, SMTP와 달리 사용자가 직접 요청하지 않음.</p>
</li>
<li><p>웹사이트 주소를 치면 브라우저가 DNS 서버에 요청을 보낸다.</p>
</li>
<li><p><mark>TCP와 UDP</mark> 둘 다 사용 (<mark>Default는 UDP</mark>)</p>
</li>
<li><p><mark>포트 번호 53</mark></p>
</li>
</ul>
<h3 id="heading-ethernet">Ethernet</h3>
<p>2계층으로, <mark>동일 네트워크 대역</mark>에 있는 친구들과 <mark>통신</mark>을 할 수 있음.<br />MAC 주소는 각각 기기마다 내장된 고유의 주소이다.</p>
<h3 id="heading-window">Window 이벤트 뷰어</h3>
<ul>
<li><p>윈도우는 이벤트를 감시하다가 비정상적이거나 따로 기록해야할 만한 상황이 발생하면 여러 종류의 로그들에 기록한다.</p>
</li>
<li><p>구성 : 보안 / 응용프로그램 / Setup / 시스템</p>
</li>
</ul>
<h3 id="heading-powershell">PowerShell 특징</h3>
<ul>
<li><p>기존 DOS 명령어 사용 가능</p>
</li>
<li><p>스크립트는 콘솔에서 대화형으로 사용</p>
</li>
<li><p>스크립트는 텍스트로 구성</p>
</li>
<li><p>대소문자 구분X</p>
</li>
</ul>
<h3 id="heading-7jyi64e7jqwiouqheugueywta">윈도우 명령어</h3>
<ul>
<li><p>wbadmin.msc : 백업 명령어</p>
</li>
<li><p>diskmgmt.msc : 디스크 관리</p>
</li>
<li><p>hdwwiz.cpl : 하드웨어 추가 마법사</p>
</li>
<li><p>fsmgmt.msc : 파일시스템 공유 폴더 GUI</p>
</li>
<li><p>net user : 네트워크 접속 사용자</p>
</li>
<li><p>net share : 공유상태 확인</p>
</li>
<li><p>net session : 세션상태 확인</p>
</li>
</ul>
<h3 id="heading-66as64if7iqkiouqheugueywta">리눅스 명령어</h3>
<ul>
<li><p>ls : 디렉터리 내 파일 확인</p>
</li>
<li><p>cat : 화면 출력</p>
</li>
<li><p>man : 프로그램 사용법</p>
</li>
<li><p>pwd : 현재 작업중인 디렉터리 경로를 <mark>절대경로 방식</mark>으로 출력 (print working directory)</p>
</li>
<li><p>crontab : 스케쥴링 예약 명령어</p>
<ul>
<li><p>-u : root 사용자가 특정 사용자의 crontab 파일을 다룰 때</p>
</li>
<li><p>-e : 내용을 작성하거나 수정할 때</p>
</li>
<li><p>-r : 내용을 삭제할 때</p>
</li>
<li><p>-l : 내용을 출력할 때</p>
</li>
</ul>
</li>
<li><p>rm : 파일 또는 디렉터리 삭제</p>
</li>
<li><p>mount : 물리적 장치를 특정한 위치로 연결시켜주는 마운트 명령어</p>
</li>
<li><p>unmount : 마운트 해제</p>
</li>
<li><p>/etc/services : 리눅스의 포트번호 출력</p>
</li>
<li><p>passwd : 패스워드 설정</p>
</li>
<li><p>useradd : 유저 추가</p>
</li>
<li><p>usermod : 유저 수정 (etc /password)</p>
</li>
<li><p>userdel -r : 유저 삭제</p>
</li>
<li><p><mark>chmod : 허가권 변경</mark></p>
</li>
<li><p>chgrp : 그룹 변경</p>
</li>
<li><p>chage : 사용자 패스워드 만료기간 및 시간 정보 변경 (etc/shadow)</p>
<ul>
<li><p>-m : 최소 의무 사용일수 지정</p>
</li>
<li><p>-M : 패스워드 <mark>최종변경일로부터 패스워드 변경 없이 </mark> 사용할 수 있는 최대 일 수 지정</p>
</li>
<li><p>-W : 패스워드 <mark>만료 몇 일 전</mark>부터 사용자에게 <mark>경고 메세지 발송</mark> 설정</p>
</li>
<li><p>-I : 패스워드 만료일까지 패스워드를 바꾸지 않으면 계정이 만료되어 비활성화되는 옵션</p>
</li>
<li><p>-E : 계정만료일</p>
</li>
</ul>
</li>
<li><p><mark>chown : 허가권 변경 (root만 가능) = 리눅스일때</mark></p>
</li>
<li><p>netstat : 네트워크 연결 상태, 인터페이스, 라우팅 테이블 정보 확인</p>
<ul>
<li><p>-r : 라우팅 테이블 표시</p>
</li>
<li><p>-p : 프로토콜 및 PID, 사용중인 프로그램명을 출력(protocol)</p>
</li>
<li><p>-t : TCP 출력</p>
</li>
<li><p>-y : 모든 연결에 대한 TCP 연결 템플릿 표시</p>
</li>
</ul>
</li>
<li><p>nbtstat : ip 충돌 확인</p>
</li>
<li><p>ping : 네트워크 연결 상태 (0 응답, 1 거부)</p>
</li>
<li><p>pathping : 패킷 경로 추적</p>
</li>
<li><p><mark>free : 사용중인 메모리 , 사용 가능한 메모리 용량을 알 수 있다</mark></p>
</li>
</ul>
<h3 id="heading-7zse66gc7is47iqkioq0gougqa">프로세스 관련</h3>
<ul>
<li><p>kill : 프로세스 종료</p>
</li>
<li><p>nice : 프로그램 실행 시 실행 우선순위</p>
</li>
<li><p>renice : 실행중인 프로세스에 대한 nice 값 변경</p>
</li>
<li><p>pstree : 프로세스를 트리형태로 보여줌</p>
</li>
<li><p>top : 프로세스 상태를 실시간으로 보여줌 (CPU 및 메모리 사용정보 확인)</p>
</li>
</ul>
<h3 id="heading-vi">vi 명령어</h3>
<ul>
<li><p>dd : 줄단위 삭제 (ex. 5dd, 5줄 삭제)</p>
</li>
<li><p>x : 문자 하나 삭제</p>
</li>
<li><p>dw : 단어 삭제</p>
</li>
</ul>
<h3 id="heading-66as64if7iqkioq2jo2vna">리눅스 권한</h3>
<ul>
<li><p>-rw-r--r-- 1 root root 190 5월 19 16:40 file</p>
<ul>
<li><ul>
<li>: 일반파일</li>
</ul>
</li>
<li><p>rw- 소유자 / r-- 그룹 / r-- (제3자)</p>
</li>
<li><p>1 링크수</p>
</li>
<li><p>root 소유자 / root</p>
</li>
<li><p>190 바이트 / 5월 19 16:40 수정날짜 / file 수정한파일</p>
</li>
</ul>
</li>
<li><p>chmod 666 file : 파일 변경 권한 부여</p>
<ul>
<li><p>6 소유자 / 6 그룹 / 6 제3자</p>
</li>
<li><p>r : 4 / w : 2 / x : 1</p>
</li>
</ul>
</li>
<li><p>chmod a+w file : 모두(all)에게 w(쓰기) 권한 추가</p>
</li>
<li><p>chmod ugo+w file : user와 group과 other 에게 쓰기(w) 권한 추가</p>
</li>
<li><p>chmod go=w file : group과 other에게 쓰기(w) 권한 설정</p>
</li>
</ul>
<h3 id="heading-66as64if7iqkiouulougie2esoumra">리눅스 디렉터리</h3>
<ul>
<li><p>bin : 주요 명령어 바이너리</p>
</li>
<li><p>boot : 부트 로더의 스태틱 파일</p>
</li>
<li><p>dev: 디바이스 파일</p>
</li>
<li><p>etc : 호스트 관련 시스템 설정 파일 (보안/환경설정/사용자정보)</p>
</li>
<li><p>home : 사용자 홈 디렉터리</p>
</li>
<li><p>lib : 주요 공유 라이브러리 및 커널 모듈</p>
</li>
<li><p>proc : 시스템 정보를 담은 가상 디렉터리</p>
</li>
<li><p>root : 루트 사용자의 홈 디렉터리</p>
</li>
<li><p>tmp : 임시 파일 디렉터리</p>
</li>
<li><p>sys : 시스템 정보를 담은 가상 디렉터리</p>
</li>
<li><p>sbin : 주요 시스템 명령어 바이너리</p>
</li>
<li><p>var : 가변 데이터</p>
</li>
</ul>
<h3 id="heading-varlog">/var/log</h3>
<ul>
<li><p>cron : 스케쥴러 관련 로그</p>
</li>
<li><p>lastlog : 각 계정마다 마지막 로그인 등의 로그</p>
</li>
<li><p>dmesg : 시스템 부팅 시 생성된 시스템 로그</p>
</li>
<li><p>btmp : 로그인 실패 등의 로그</p>
</li>
</ul>
<h3 id="heading-64k07j6lioycroyaqeyekcdqt7jro7k">내장 사용자 그룹</h3>
<ul>
<li><p>Administrators : 관리자와 동등한 자격 (사용자계정 수정/삭제, 응용 프로그램 설치, 디스크 포맷)</p>
</li>
<li><p>Backup Operators : 컴퓨터 파일 백업/복원 (로그온, 시스템 종료, 재부팅)</p>
</li>
<li><p>Power Users : 계정 생성/삭제 (관리자에게 계정관리 권한 위임 시 사용)</p>
</li>
<li><p>Users : 응용 프로그램, 로컬 네트워크, 네트워크 프린터 사용, 로그아웃, 화면 잠금 (로컬그룹 생성/삭제 O, 시스템 설정은 X)</p>
</li>
<li><p>Guest : 임시 사용자들에게 시스템의 제한적인 기능 사용 로그온 (기본 사용과 종료)</p>
</li>
<li><p>Everyone : 시스템 접근하는 모든 사용자 계정</p>
</li>
</ul>
<h3 id="heading-64k07j6lio2mjoydvcdsi5zsiqtthzw">내장 파일 시스템</h3>
<ul>
<li><p>윈도우 : FAT16, FAT32, NTFS</p>
<ul>
<li><p>NTFS(NT File System)</p>
<ul>
<li><p>FAT32에서 안되는 디스크 관련 오류 자동 복구</p>
</li>
<li><p>FAT→NTFS 변환 가능 (반대는 불가)</p>
</li>
<li><p>대용량 디스크, 긴 파일 이름 지원</p>
</li>
<li><p>암호화로 승인된 사용자만 액세스 가능(보안성)</p>
</li>
<li><p>RAID 구축 (여러 하드디스크를 묶음)</p>
</li>
<li><p>다중시스템에서 하나만 HW 손실이 생겨도 나머지 데이터 보호</p>
</li>
<li><p>디렉터리 자동 압축 기능</p>
</li>
<li><p>파일 압축 저장 / 실시간 복구</p>
</li>
<li><p>장애 발생 시 FAT에 비해서 복구가 힘듦</p>
</li>
</ul>
</li>
<li><p>FAT(File Allocation Table)</p>
<ul>
<li><p>가장 단순, 최저 성능 파일 시스템</p>
</li>
<li><p>단순한 구조, 높은 신뢰성, 적은 메모리</p>
</li>
<li><p>저용량 볼륨이서 사용 시 성능 우수</p>
</li>
<li><p>보안 기능 취약</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="heading-active-directory">Active Directory</h3>
<ul>
<li><p>사용자가 마이크로스프트 IT 환경에서 업무를 수행하는 데 도움을 주는 데이터베이스이자 서비스 집합</p>
</li>
<li><p>시스템 개체 (사용자, DB, 리소스, 문서 등)를 조직적으로 관리하고 찾기 위한 도구</p>
</li>
<li><p>대규모 네트워크 사용</p>
</li>
<li><p>Window 환경에서 동일한 DB를 이용한 다양한 NW 서비스 제공</p>
</li>
<li><p>DNS, TCP/IP 지원 및 표준 프로토콜(LDAP) 지원을 포함하는 크로스 플랫폼</p>
</li>
<li><p>DNS 사용 (도메인 컨트롤러의 이름과 위치 사용을 위해)</p>
</li>
<li><p>풍부한 API 세트 제공</p>
</li>
<li><p>단순하고 계층적인 도메인 구조와 D&amp;D 방식의 직관적인 관리</p>
</li>
<li><p>구형의 카탈로그를 통한 신속하고 유연한 조회</p>
</li>
</ul>
<h3 id="heading-topology">통신망 - 토폴로지 (Topology)</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>종류</td><td>특징</td></tr>
</thead>
<tbody>
<tr>
<td>트리형</td><td>분산 처리 시스템을 구성. 통신 선로가 짧다</td></tr>
<tr>
<td>링형</td><td>양방향으로 접근할 수 있어 통신회선 장애에 대해 유연하고, 근거리 통신망에서 사용한다</td></tr>
<tr>
<td><mark>스타형(성형)</mark></td><td>호스트 중심으로 된 <mark>중앙집중형</mark>, 중앙 컴퓨터 오류 시 전체 시스템 마비</td></tr>
<tr>
<td>망형</td><td>모든 단말기-단말기들이 연결되어 있고, 공중데이터 통신망 주로 사용, 노드 연결성이 높다</td></tr>
<tr>
<td>버스형</td><td>한 통신회선에 여러 단말기들을 연결. 단순한 구조, 단말기 추가삭제가 쉽지만 회선 오류 시 전체 시스템 마비 (터미네이터로 시그널 반사를 방지)</td></tr>
</tbody>
</table>
</div><p><img src="https://blog.kakaocdn.net/dn/cug309/btsEiACwjwj/6fjbdP2E4GhZx0w3Ya0c7k/img.jpg" alt="네트워크-1.네트워크 기초" class="image--center mx-auto" /></p>
<h3 id="heading-6rwq7zmy66ed">교환망</h3>
<ul>
<li><p>회선 교환망 : 회선자체 교환 | <mark>팩시밀리</mark>로 전송 | 시분할 교환방식, 공간분할 교환방식 | 연결</p>
</li>
<li><p>메세지 교환망 : 메세지단위 교환 | <mark>축적방식</mark>으로 전송 (응답시간 느림, 실시간으로 부적합)</p>
</li>
<li><p>패킷 교환망 : 패킷 단위로 전송 | 전송에 용이 | 전송량 제어 및 속도 변환, 재전송, 블로킹 현상 X | 비연결성</p>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>데이터그램 방식</td><td>가상 회선 방식</td></tr>
</thead>
<tbody>
<tr>
<td>특정 경로 없이 노드들의 트래픽 상황을 감안하여 전송</td><td>논리적 가상회선, 패킷이 순차적 전송</td></tr>
<tr>
<td>독립적인 경로 배정</td><td>안전성, 신뢰성, 순서보장</td></tr>
<tr>
<td>적은 양의 데이터 전송에 용이</td><td>여러 사용자가 하나의 통신회선을 공유 -&gt; 회선 이용률이 높음</td></tr>
</tbody>
</table>
</div><h3 id="heading-lan">LAN (근거리 통신망)</h3>
<ul>
<li><p>근거리 고속 통신 가능</p>
</li>
<li><p>경로 설정 필요 X</p>
</li>
<li><p>확장성/재배치에 용이</p>
</li>
<li><p>오류 발생률 낮음</p>
</li>
<li><p>장비 : 라우터, 브릿지, 허브, 리피터, 스위치, 게이트웨이</p>
</li>
</ul>
<h3 id="heading-csmacd">CSMA/CD 방식</h3>
<ul>
<li><p>데이터 충돌을 막기 위해 송신 데이터가 없을 때만 통신</p>
</li>
<li><p>충돌 감지 시 멈추고 jam 신호를 전송</p>
</li>
<li><p>일정 시간 후 재전송</p>
</li>
</ul>
<h3 id="heading-csmaca">CSMA/CA</h3>
<p>표준 : IEEE <strong>802.11</strong><br />용도 : wireless lan 전송 프로토콜<br />토폴로지 : <strong>무선</strong><br />주요원리 : <strong>충돌회피</strong>를 위해 전송 전, 채널의 유휴여부를 확인하고, 일정시간 대기 후 전송한다. 성공여부를 확인하는 원리다.</p>
<h3 id="heading-7yag7ygwio2mqoylssdrsknsi50">토큰 패싱 방식</h3>
<ul>
<li><p>토큰이라는 제어비트를 송신하고 해당 토큰을 확보하여 통신</p>
</li>
<li><p>제어 신호가 각 노드들을 순차적으로 옮겨가며 데이터를 전송</p>
<ul>
<li><p>충돌 발생 X</p>
</li>
<li><p>설치비용이 비싸고 복잡함</p>
</li>
<li><p>토큰 분실 가능성 o</p>
</li>
</ul>
</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>토큰 링</td><td>토큰 버스</td></tr>
</thead>
<tbody>
<tr>
<td>모든 노드에 물리적인 링(Topology)이 연결, 토큰이 링을 따라 순차적 전송</td><td>모든 노드에 버스형 토폴로지 이용, 케이블 양 끝에 신호 바인딩을 막기 위한 터미네이터 장치 사용</td></tr>
</tbody>
</table>
</div><h3 id="heading-lan-1">LAN 표준</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>번호</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>IEEE 802.1</td><td>상위 계층 인터페이스오 MAC Bridge</td></tr>
<tr>
<td><mark>IEEE 802.2</mark></td><td><mark>LLC (Logical Link Control)</mark></td></tr>
<tr>
<td><mark>IEEE 802.3</mark></td><td><mark>CSMA/CD</mark></td></tr>
<tr>
<td><mark>IEEE 802.4</mark></td><td><mark>토큰 버스</mark></td></tr>
<tr>
<td><mark>IEEE 802.5</mark></td><td><mark>토큰 링</mark></td></tr>
<tr>
<td>IEEE 802.6</td><td>MAN (Metropolitan Area Network)</td></tr>
<tr>
<td>IEEE 802.7</td><td>광대역 LAN</td></tr>
<tr>
<td>IEEE 802.8</td><td>광섬유(Fiber Optic) LAN</td></tr>
<tr>
<td>IEEE 802.9</td><td>종합 데이터 &amp; 음성 네트워크</td></tr>
<tr>
<td>IEEE 802.10</td><td>보안 (Security)</td></tr>
<tr>
<td><mark>IEEE 802.11</mark></td><td>무선 네트워크(Wireless Network, <mark>CSMA/CA</mark>)</td></tr>
</tbody>
</table>
</div><ul>
<li><p>WPAN</p>
<ul>
<li><p>단거리 통신에 사용되는 개인용 무선 네트워크</p>
</li>
<li><p>ex) <mark>Bluetooth</mark>, Zigbee</p>
</li>
<li><p>낮은 가격, 낮은 전력</p>
</li>
<li><p>스마트홈 통신에 사용. 10m 이내의 단말기들을 무선으로 연결</p>
</li>
</ul>
</li>
<li><p>SDN(Software Defined Networking)</p>
<ul>
<li>라우터 및 스위치를 이용하여 네트워크 트래픽을 제어하는 기존 네트워크와는 달리 물리적인 설정을 하지 않고 가상 네트워크를 생성 및 제어하거나 소프트웨어가 포함된 기존 하드웨어 네트워크를 제어한다</li>
</ul>
</li>
</ul>
<h3 id="heading-7jeq65sioyiheulmoyzgcdsm5dsnbg">에러 종류와 원인</h3>
<ol>
<li><p>감쇠현상<br /> : 전송신호가 전송매체를 통과하며 <strong><mark>신호 세기가 약해짐</mark></strong><br /> (아날로그 - 증폭기 / 디지털 - 리피터)</p>
</li>
<li><p>지연왜곡<br /> : 신호전달이 주파수에 따라 속도가 달라져 신호 손상 유발</p>
</li>
<li><p>잡음</p>
</li>
<li><p>에코<br /> : 선로 상 임피던스의 변화가 있을 때, 약해진 신호가 송신 측으로 다시 돌아옴</p>
</li>
<li><p>위상지터<br /> : 연속적으로 위상이 변해 편차가 커지며 발생</p>
</li>
</ol>
<h3 id="heading-7jeq65sioqygoy2ncdrsknsi50">에러 검출 방식</h3>
<ul>
<li><p>패리티 검사<br />  : 전송되는 문자마다 +1개 패리티비트 추가하여 EVEN/ODD 검사 방식</p>
</li>
<li><p><mark>순환중복검사(CRC) = 데이터링크 계층</mark><br />  : 블록마다 검사용 코드를 추가하여 전송.</p>
<ul>
<li><p>데이터를 연속하여 전송하는 경우에는 집단 오류 검출을 위해 사용.</p>
</li>
<li><p>주로 동기식 전송에서 사용</p>
</li>
</ul>
</li>
<li><p>해밍 코드 방식<br />  : 에러 검출과 교정이 가능한 코드.</p>
<ul>
<li><p>자기정정부호의 하나로 비트 착오를 검출</p>
</li>
<li><p>고속 동기식 전송에서 사용</p>
</li>
</ul>
</li>
</ul>
<h3 id="heading-arq">에러 수정 방식(ARQ)</h3>
<ul>
<li><p>Stop &amp; Wait ARQ<br />  :송신측의 블록 전송 후, 수신측의 <mark>응답을 기다리는 방식</mark></p>
</li>
<li><p>Go-Back N ARQ<br />  : 송신측의 여러블록에 연속 전송 후, 수신측에게 NAK를 받으면 <mark>에러 발생한 블록 이후 모든 데이터 재전송</mark></p>
</li>
<li><p>Selective ARQ<br />  : 송신측의 여러 블록에 연속 전송 후, 수신측에게 NAK를 받으면 <mark>에러가 발생한 블록만 선택하여 재전송</mark></p>
</li>
<li><p>Adaptive ARQ<br />  : 전송효율을 높이기 위해 블록 길이를 <mark>동적으로 변경하여 전송</mark></p>
</li>
</ul>
<h3 id="heading-raid">RAID</h3>
<ul>
<li><p><mark>RAID 0 : 스트라이핑</mark>. 분산 저장은 되지만 손실 시 복구 X</p>
</li>
<li><p><mark>RAID 1 : 미러링모드</mark>. 다른 디스크에 백업. 손상시 백업</p>
</li>
<li><p>RAID 2 : ECC로 복구 가능</p>
</li>
<li><p>RAID 3 : 패리티비트를 따로 두고 사용하여 복구</p>
</li>
<li><p>RAID 5 : 각자의 뱅크에 패리티비트를 둔다</p>
</li>
</ul>
<h3 id="heading-65287jqw7yyfio2uhouhno2gooy9na">라우팅 프로토콜</h3>
<ul>
<li>거리 벡터 알고리즘 : 라우팅 테이블을 유지할 때 목적지 거리를 라우터 수 (<mark>Hop Count</mark>)로 계산</li>
</ul>
<div class="hn-table">
<table>
<thead>
<tr>
<td>RIP(Routing Information Protocol)</td><td>BGP(Border Gateway Protocol)</td></tr>
</thead>
<tbody>
<tr>
<td>라우터 홉 수에 따라 최단 거리를 결정하는 프로토콜</td><td>대표적인 EGP 프로토콜</td></tr>
<tr>
<td>홉 수가 최대 16이므로 대규모 네트워크에는 부적합</td><td>TCP 포트 이용 → 신뢰, 연결 지향</td></tr>
<tr>
<td>라우터 정보 수명이 짧아 외부 라우터와 일정시간 교신이 끊기면 정보 삭제</td><td>루프 발생 X</td></tr>
<tr>
<td>가까운 호스트에게 30초마다 전체 라우팅 테이블 전송</td><td>AS가 다른 AS들과 연결된 경우 사용</td></tr>
</tbody>
</table>
</div><ul>
<li><p><strong><mark>RIPv1</mark></strong> : <mark>브로드캐스트</mark>를 이용하여 라우팅 업데이트 전송</p>
</li>
<li><p><strong><mark>RIPv2</mark></strong> : <mark>멀티캐스트</mark>를 이용하여 라우팅 업데이트 전송</p>
</li>
<li><p><mark>링크 상태(Link State) </mark> 알고리즘</p>
<ul>
<li><p>라우터 연결 속도 기준으로 목적지 거리 계산</p>
</li>
<li><p>네트워크에 변화가 있을 때만 정보 교환</p>
</li>
<li><p>자신의 현재 상태(State)를 알려줌</p>
</li>
<li><p>자율 시스템(AS)을 위해 설계, 멀티캐스트 적용 (라우터 그룹끼리만 라우팅 가능)</p>
</li>
<li><p>사용자 경로 지정 &amp; 복수 경로 지정 가능</p>
</li>
<li><p>알고리즘이 복잡하여 사용자가 부담</p>
</li>
<li><p>VLSM 지원 -&gt; IP 주소 낭비 X</p>
</li>
<li><p><mark>OSPF (Open Shortest Path First Protocol) = </mark> <strong><mark>Dijkstra</mark></strong> <mark>알고리즘</mark></p>
<ul>
<li><p>최저 cost 경로를 최적 라우팅 경로로 결정</p>
</li>
<li><p>네트워크가 변경되어도 컴버전스 시간이 짧고 라우팅 루프 발생 X</p>
</li>
<li><p>AS의 네트워크를 각 Area로 나누고 Area들은 다시 Backbone으로 연결되어있는 계층 구조</p>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="heading-dns">DNS 레코드</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>이름</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>A</td><td>호스트 이름을 IPv4 주소와 매핑</td></tr>
<tr>
<td>AAAA</td><td>IPv6 버전 A 레코드</td></tr>
<tr>
<td>CNAME</td><td>별칭을 부여한 특정 도메인 주소. / 한 도메인 -&gt; 다른 도메인으로 리디렉션 (NS가 도메인 조회 시 이 레코드를 발견하면 -&gt; 첫 도메인 이름을 CNAME으로 대체)</td></tr>
<tr>
<td>MX</td><td>메일을 주고 받기 위한 서비스 레코드 (우선순위대로 여러 서버에 메일을 제공하는 메세지 라우팅 제공)</td></tr>
<tr>
<td>TXT</td><td>일반적인 텍스트 내용 기록 (String)</td></tr>
<tr>
<td><mark>SOA</mark></td><td><mark>도메인의 시작점</mark></td></tr>
<tr>
<td>PTR</td><td>IP 주소에 대해 도메인 명을 매핑, Reverse Zone 파일에서 사용 (<mark>역방향 조회</mark>)</td></tr>
<tr>
<td>SRV</td><td>비슷한 TCP/IP 서비스를 제공하는 다수의 서버 위치 정보</td></tr>
<tr>
<td>NS</td><td>영역을 풀이할 수 있는 DNS 서버 목록</td></tr>
<tr>
<td>UINFO</td><td>사용자 정보</td></tr>
<tr>
<td>MINFO</td><td>메일박스와 메일리스트 정보</td></tr>
<tr>
<td>HINFO</td><td>호스트의 CPu 정보와 운영체제 정보</td></tr>
</tbody>
</table>
</div><h3 id="heading-dns-1">DNS 명령어</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>DNS 명령어</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>ifconfig /displydns</td><td>DNS cache 확인</td></tr>
<tr>
<td>ifconfig /flushdns</td><td>DNS cache 삭제</td></tr>
<tr>
<td>ifconfig /release</td><td>IP 해제</td></tr>
<tr>
<td>ifconfig /renew</td><td>IP 가져오기</td></tr>
<tr>
<td>ifconfig all</td><td>모든걸 다 보여줌</td></tr>
</tbody>
</table>
</div><h3 id="heading-dns-round-robin">DNS 라운드 로빈(Round Robin)</h3>
<p>브라우저에 해당 도메인 주소를 입력하면<br />-&gt; DNS는 도메인의 정보를 조회하고<br />-&gt; 여러 대의 서버 IP 리스트 중에서 라운드 로빈 형태로 랜덤하게 하나 혹은 여러 개를 선택하여 다시 사용자에게 IP를 알려준다</p>
<p>-&gt; 결과적으로 다수의 사용자는 실제로는 여러 대의 웹 서버에 나뉘어 접속하게 되면서 자연스럽게 서버의 부하가 분산되는 방식이다.</p>
<h3 id="heading-ids-vs-ips">IDS vs. IPS</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>IDS(Intrusion Detection System)</td><td>IPS(Intrusion Prevent System</td></tr>
</thead>
<tbody>
<tr>
<td>침입 <mark>탐지</mark> 시스템</td><td>침입 <mark>방지</mark> 시스템</td></tr>
<tr>
<td>로그, 서명(Signiture) 기반의 패턴 매칭</td><td>정책, 규칙 DB 기반 비정상 행위를 실시간 탐지 (세션 기반)</td></tr>
<tr>
<td>- 오용 탐지 기법 : 새로운 유형 탐지 불가</td><td>비싼 장비, 오탐 현상 가능성</td></tr>
<tr>
<td>- 비정상 탐지 기법 : 새로운 유형 탐지 가능</td></tr>
</tbody>
</table>
</div><h3 id="heading-http">HTTP 상태 코드</h3>
<ul>
<li><p>100번대 : 정보 요청</p>
</li>
<li><p>200번대 : 정보 요청 성공</p>
</li>
<li><p>300번대 : 리다이렉션</p>
</li>
<li><p>400번대 : 클라이언트 오류</p>
</li>
<li><p>500번대 : 서버 오류<br />  - 500 : 서버 내 자체 스크립트 오류 (Syntax Error)<br />  - 501 : 클라이언트의 요청 내용 중 일부가 수행 불가능한 경우<br />  - 502 : (Bad Gateway) 요청 자체가 틀린 경우<br />  - 503 : (Server Unreachable) 현재 서버가 아예 사용 불가능한 경우</p>
</li>
</ul>
<h3 id="heading-linux-init">Linux의 init(초기화 프로세스)</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>init</td><td>설명</td></tr>
</thead>
<tbody>
<tr>
<td>init 0</td><td>시스템 종료</td></tr>
<tr>
<td><mark>init 1</mark></td><td>단일 사용자 모드 (시스템 복구 시 사용)</td></tr>
<tr>
<td>init 2</td><td>다중 사용자 텍스트 모드 (NFS 사용 불가)</td></tr>
<tr>
<td>init 3</td><td>다중 사용자 텍스트 모드</td></tr>
<tr>
<td>init 4</td><td>사용X</td></tr>
<tr>
<td>init 5</td><td>다중 사용자 그래픽 모드</td></tr>
<tr>
<td>init 6</td><td><mark>재부팅 모드</mark></td></tr>
</tbody>
</table>
</div><h3 id="heading-tcpip">TCP/IP 프로토콜</h3>
<div class="hn-table">
<table>
<thead>
<tr>
<td>계층</td><td>프로토콜</td></tr>
</thead>
<tbody>
<tr>
<td>물리계층</td><td>x</td></tr>
<tr>
<td>데이터링크 계층</td><td>Ethernet, Token Ring, FDDI, MAC, SLIP, PPD</td></tr>
<tr>
<td>네트워크 계층</td><td>IP, ICMP, ARP, RARP, IGMP, IPX</td></tr>
<tr>
<td>전송 계층</td><td>TCP, UDP</td></tr>
<tr>
<td>세션 계층</td><td>NetBIOS, SAP, SDP, NWLink</td></tr>
<tr>
<td>표현 계층</td><td>BCD 코드, EBCDIC 코드, ASII 코드, 유니코드, MPEG, JPRG, MIDI, GIF</td></tr>
<tr>
<td>응용 계층</td><td>HTTP, SMTP, Telnet, DNS, DHCP</td></tr>
</tbody>
</table>
</div>]]></content:encoded></item><item><title><![CDATA[Building Rust Smart Contracts On Stellar Soroban]]></title><description><![CDATA[https://stellar.expert/explorer/public
soran SDK 를 사용하여 Rust 기반의 스마트 컨트랙트 개발의 대해 다룰 예정입니다
https://k0070.tistory.com/279
https://hardhat.org/]]></description><link>https://haroldrippin.hashnode.dev/building-rust-smart-contracts-on-stellar-soroban</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/building-rust-smart-contracts-on-stellar-soroban</guid><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sun, 13 Oct 2024 08:33:41 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://stellar.expert/explorer/public">https://stellar.expert/explorer/public</a></p>
<p>soran SDK 를 사용하여 Rust 기반의 스마트 컨트랙트 개발의 대해 다룰 예정입니다</p>
<p><a target="_blank" href="https://k0070.tistory.com/279">https://k0070.tistory.com/279</a></p>
<p><a target="_blank" href="https://hardhat.org/">https://hardhat.org/</a></p>
]]></content:encoded></item><item><title><![CDATA[[blockchain] web3 CTF]]></title><description><![CDATA[https://immunefi.com/
https://medium.com/@JohnnyTime/how-to-hack-smart-contracts-a-beginners-guide-to-smart-contract-hacking-17670238fcf6
https://opensource.samsung.com/blog/article/265
https://speedrunethereum.com/
https://spems.tistory.com/85
https...]]></description><link>https://haroldrippin.hashnode.dev/blockchain-web3-ctf</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/blockchain-web3-ctf</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Beginner Developers]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Thu, 03 Oct 2024 11:43:54 GMT</pubDate><content:encoded><![CDATA[<p><a target="_blank" href="https://immunefi.com/">https://immunefi.com/</a></p>
<p><a target="_blank" href="https://medium.com/@JohnnyTime/how-to-hack-smart-contracts-a-beginners-guide-to-smart-contract-hacking-17670238fcf6">https://medium.com/@JohnnyTime/how-to-hack-smart-contracts-a-beginners-guide-to-smart-contract-hacking-17670238fcf6</a></p>
<p><a target="_blank" href="https://opensource.samsung.com/blog/article/265">https://opensource.samsung.com/blog/article/265</a></p>
<p><a target="_blank" href="https://speedrunethereum.com/">https://speedrunethereum.com/</a></p>
<p><a target="_blank" href="https://spems.tistory.com/85">https://spems.tistory.com/85</a></p>
<p><a target="_blank" href="https://velog.io/@oomia/series/speedrun-ethereum">https://velog.io/@oomia/series/speedrun-ethereum</a></p>
<h1 id="heading-git-clone">git clone</h1>
<p>모든 개발은 소스에서부터 시작합니다. 경건한 마음으로 git clone을 해줍시다.<br />레포 링크<br />git clone <a target="_blank" href="https://github.com/OpenZeppelin/ethernaut%EF%BF%BC'README.md'%EB%A5%BC">https://github.com/OpenZeppelin/ethernaut<br />'README.md'를</a> <a target="_blank" href="https://github.com/OpenZeppelin/ethernaut">살펴보니 nvm과 yarn을 사용하네요? 두 개 모두 설치합시</a>다.</p>
<p><img src="https://velog.velcdn.com/images/oomia/post/f866a41f-19a4-418c-b08a-b44782d8514f/image.png" alt /></p>
<h1 id="heading-nvm">nvm 설치</h1>
<ol>
<li><p><code>nvm --version</code>으로 설치 확인! 없다면 설치합시다.</p>
</li>
<li><p><code>brew install nvm</code>을 수행하면 설치 후 다음을 보게 됩니다.</p>
</li>
</ol>
<p><a target="_blank" href="https://velog.io/@oomia/%EB%A1%9C%EC%BB%AC%EC%97%90%EC%84%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-Ethernaut">https://velog.io/@oomia/%EB%A1%9C%EC%BB%AC%EC%97%90%EC%84%9C-%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94-Ethernaut</a></p>
]]></content:encoded></item><item><title><![CDATA[[Rust] Constant part 5]]></title><description><![CDATA[상수는 변경할 수 없는 값을 나타냅니다.상수를 사용하는 키워드는 const를 사용합니다.
const VARIABLE_NAME:dataType = value;

Constant naming conventions
상수의 명명 규칙은 변수의 명명 규칙과 유사합니다.상수 이름의 모든 문자는 일반적으로 대문자 사용합니다.변수 선언과 달리 let 키워드는 상수 선언에 사용되지 않습니다.
fn main() {
   const USER_LIMIT:i32 = ...]]></description><link>https://haroldrippin.hashnode.dev/rust-constant-part-5</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/rust-constant-part-5</guid><category><![CDATA[Rust]]></category><category><![CDATA[Web3]]></category><category><![CDATA[Rust programming]]></category><category><![CDATA[Blockchain]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sun, 07 Jul 2024 07:48:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/4iN-wBT2Tko/upload/ca472da512c143e7e01bf78c43ff6d0a.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>상수는 변경할 수 없는 값을 나타냅니다.<br />상수를 사용하는 키워드는 const를 사용합니다.</p>
<pre><code class="lang-rust"><span class="hljs-keyword">const</span> VARIABLE_NAME:dataType = value;
</code></pre>
<h1 id="heading-constant-naming-conventions">Constant naming conventions</h1>
<p>상수의 명명 규칙은 변수의 명명 규칙과 유사합니다.<br />상수 이름의 모든 문자는 일반적으로 대문자 사용합니다.<br />변수 선언과 달리 let 키워드는 상수 선언에 사용되지 않습니다.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">const</span> USER_LIMIT:<span class="hljs-built_in">i32</span> = <span class="hljs-number">100</span>;    <span class="hljs-comment">// Declare a integer constant</span>
   <span class="hljs-keyword">const</span> PI:<span class="hljs-built_in">f32</span> = <span class="hljs-number">3.14</span>;           <span class="hljs-comment">//Declare a float constant</span>
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"user limit is {}"</span>,USER_LIMIT);  <span class="hljs-comment">//Display value of the constant</span>
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"pi value is {}"</span>,PI);            <span class="hljs-comment">//Display value of the constant</span>
}
</code></pre>
<h1 id="heading-constants-vs-variables">Constants vs. variables</h1>
<ul>
<li><p>Constants are declared using the const keyword and variables are declared using the let keyword</p>
</li>
<li><p>변수 선언은 선택적으로 데이터 형식을 가질 수 있지만 상수 선언은 데이터 형식을 지정해야 합니다</p>
</li>
<li><p>mut 키워드를 사용하여 변수는 변경 할 수 있으나 상수는 변경 할 수 없습니다</p>
</li>
<li><p>상수는 상수 표현식으로만 설정할 수 있으며 함수 호출의 결과나 런타임에 계산될 다른 값으로는 설정할 수 없습니다</p>
</li>
<li><p>상수는 전역 범위를 포함하여 모든 범위에서 선언할 수 있으므로 코드의 많은 부분에서 알아야 하는 값에 유용합니다</p>
</li>
</ul>
<h1 id="heading-kirrs4dsijgg67cpioydgeyimoydmcdshidrj4tsnokqkg"><strong>변수 및 상수의 섀도잉</strong></h1>
<p>Rust는 프로그래머가 같은 이름의 변수를 선언할 수 있도록 허용합니다<br />이러한 경우 새 변수가 이전 변수를 재정의합니다</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> salary = <span class="hljs-number">100.00</span>;
   <span class="hljs-keyword">let</span> salary = <span class="hljs-number">1.50</span> ; 
   <span class="hljs-comment">// reads first salary</span>
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"The value of salary is :{}"</span>,salary);
}
</code></pre>
<p>Rust는 다른 데이터 형식의 섀도잉을 지원합니다</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> uname = <span class="hljs-string">"HaroldRippin"</span>;
   <span class="hljs-keyword">let</span> uname = uname.len();
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"name changed to integer : {}"</span>,uname);
}
</code></pre>
<p><img src="https://miro.medium.com/v2/resize:fit:1400/1*66LuxrSMAr-kzB0doB-RGg.png" alt /></p>
<p>변수와 달리 상수는 섀도잉할 수 없습니다</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">const</span> NAME:&amp;<span class="hljs-built_in">str</span> = <span class="hljs-string">"Mohtashim"</span>;
   <span class="hljs-keyword">const</span> NAME:<span class="hljs-built_in">usize</span> = NAME.len(); 
   <span class="hljs-comment">//Error : `NAME` already defined</span>
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"name changed to integer : {}"</span>,NAME);
}
</code></pre>
]]></content:encoded></item><item><title><![CDATA[[Rust] Variables part 4]]></title><description><![CDATA[A variable is a named storage that a program can manipulate.Simply put, variables help programs store values.Variables in Rust are associated with a specific data type.The data type determines the size and layout of the variable's memory, the range o...]]></description><link>https://haroldrippin.hashnode.dev/rust-variables-part-4</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/rust-variables-part-4</guid><category><![CDATA[Rust]]></category><category><![CDATA[rust lang]]></category><category><![CDATA[Rust programming]]></category><category><![CDATA[Rust, Solana, Web3]]></category><category><![CDATA[programming languages]]></category><category><![CDATA[rustseries]]></category><category><![CDATA[low level programming]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sat, 06 Jul 2024 05:06:01 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/XvjS2WY-vYE/upload/9477eeee457615c0348e073199ffe0bc.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A variable is a named storage that a program can manipulate.Simply put, variables help programs store values.Variables in Rust are associated with a specific data type.The data type determines the size and layout of the variable's memory, the range of values that can be stored in that memory, and the set of operations that can be performed on the variable.</p>
<h1 id="heading-variable-naming-conventions"><strong>Variable naming conventions</strong></h1>
<ul>
<li><p>Variable names consist of letters, numbers, and underscore characters</p>
</li>
<li><p>Must start with a letter or underscore</p>
</li>
<li><p>Case-sensitive</p>
</li>
</ul>
<h1 id="heading-syntax"><strong>Syntax</strong></h1>
<p>The data type is optional while declaring a variable.</p>
<p>By default, the data type is inferred from the value assigned to the variable.</p>
<pre><code class="lang-rust"><span class="hljs-keyword">let</span> variable_name = value;            <span class="hljs-comment">// no type specified</span>
<span class="hljs-keyword">let</span> variable_name:dataType = value;   <span class="hljs-comment">//type specified</span>
</code></pre>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> fees = <span class="hljs-number">25_000</span>;
   <span class="hljs-keyword">let</span> salary:<span class="hljs-built_in">f64</span> = <span class="hljs-number">35_000.00</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"fees is {} and salary is {}"</span>,fees,salary);
}
</code></pre>
<h1 id="heading-immutable"><strong>Immutable</strong></h1>
<p>Rust에서는 변수는 기본적으로 읽기 전용입니다.<br />즉, 값이 변수 이름에 바인딩되면 변수의 값을 변경할 수 없습니다.<br />Rust가 프로그래머가 코드를 작성하고 안전하고 쉬운 동시성을 활용할 수 있도록 하는 많은 방법 중 하나입니다.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> fees = <span class="hljs-number">25_000</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"fees is {} "</span>,fees);
   fees = <span class="hljs-number">35_000</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"fees changed is {}"</span>,fees);
}
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1720243781690/21addcb3-3275-40f1-b551-1a0eb7fa8d21.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-mutable"><strong>Mutable</strong></h1>
<p>Variable names can be mutable by appending the mut keyword to them</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
  <span class="hljs-keyword">let</span> <span class="hljs-keyword">mut</span> fees: <span class="hljs-built_in">i32</span> = <span class="hljs-number">25_000</span>;
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"fees is {} "</span>, fees);
  fees = <span class="hljs-number">35_000</span>;
  <span class="hljs-built_in">println!</span>(<span class="hljs-string">"fees changed is {}"</span>, fees);
}
</code></pre>
]]></content:encoded></item><item><title><![CDATA[[Rust] Data Types part 3]]></title><description><![CDATA[A data type system represents the different types of values supported by a language.It allows for code hints and automated documentation while validating the values provided before they are stored or manipulated by the program and verifying that the ...]]></description><link>https://haroldrippin.hashnode.dev/rust-data-types-part-3</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/rust-data-types-part-3</guid><category><![CDATA[Rust]]></category><category><![CDATA[Rust programming]]></category><category><![CDATA[rust lang]]></category><category><![CDATA[Rust, Solana, Web3]]></category><category><![CDATA[rustseries]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Mon, 24 Jun 2024 00:02:59 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/NxxycCKR3vw/upload/479521aaf84dc775f784d4def8046d71.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A data type system represents the different types of values supported by a language.<br />It allows for code hints and automated documentation while validating the values provided before they are stored or manipulated by the program and verifying that the code behaves as planned.</p>
<h3 id="heading-rust-is-a-statically-typed-language"><strong>Rust is a statically typed language.</strong></h3>
<p>Every value in Rust is a specific data type, and the compiler automatically infers the data type of a variable based on the assigned value.</p>
<h3 id="heading-declaring-variables"><strong>Declaring variables</strong></h3>
<p>Declaring variables with the let keyword</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> company_string = <span class="hljs-string">"HR&amp;T"</span>;  
   <span class="hljs-keyword">let</span> rating_float = <span class="hljs-number">1.5</span>;             
   <span class="hljs-keyword">let</span> is_growing_boolean = <span class="hljs-literal">true</span>;          
   <span class="hljs-keyword">let</span> icon_char = <span class="hljs-string">'♥'</span>;                    

   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"company name is:{}"</span>,company_string);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"company rating on 5 is:{}"</span>,rating_float);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"company is growing :{}"</span>,is_growing_boolean);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"company icon is:{}"</span>,icon_char);
}
</code></pre>
<p><img src="https://miro.medium.com/v2/resize:fit:1400/1*qXYWc1IIfNlmTlk2d9iiVA.png" alt /></p>
<p>In the example above, the data type of a variable is inferred from its assigned value.Assign a string data type to the variable company_string and a float data type to rating_float.</p>
<p>println The macro takes two arguments.</p>
<ul>
<li><p>{} Placeholder</p>
</li>
<li><p>Variable name or constant name</p>
</li>
</ul>
<h1 id="heading-scalar-types"><strong>Scalar Types</strong></h1>
<p>The scalar format represents a single value.</p>
<ul>
<li><p>Integer</p>
</li>
<li><p>Floating-point</p>
</li>
<li><p>Booleans</p>
</li>
<li><p>Characters</p>
</li>
</ul>
<h1 id="heading-integer"><strong>Integer</strong></h1>
<p>Integer는 정수를 나타냅니다.<br />Signed와 Unsigned로 분류합니다.</p>
<p><img src="https://miro.medium.com/v2/resize:fit:1208/1*kAqbiV-dERexHWxOEHQnWg.png" alt /></p>
<p>크기가 시스템 아키텍처에서 파생됩니다.<br />x86에서는 32bit x64에서는 64bit</p>
<h2 id="heading-for-example"><strong>for example</strong></h2>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> result = <span class="hljs-number">10</span>;    
   <span class="hljs-keyword">let</span> age:<span class="hljs-built_in">u32</span> = <span class="hljs-number">20</span>;
   <span class="hljs-keyword">let</span> sum:<span class="hljs-built_in">i32</span> = <span class="hljs-number">5</span>-<span class="hljs-number">15</span>;
   <span class="hljs-keyword">let</span> mark:<span class="hljs-built_in">isize</span> = <span class="hljs-number">10</span>;
   <span class="hljs-keyword">let</span> count:<span class="hljs-built_in">usize</span> = <span class="hljs-number">30</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"result value is {}"</span>,result);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"sum is {} and age is {}"</span>,sum,age);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"mark is {} and count is {}"</span>,mark,count);
}
</code></pre>
<p>If you replace the age variable with a real number in the above code, you will get a compilation error.</p>
<p>Integer Range</p>
<p>각 부호 있는 변수는 -(2^(n — 1)에서 2^(n — 1) — 1까지의 숫자를 저장<br />부호 없는 변수는 0 부터 2^n — 1 까지의 숫자를 저장<br />여기서 n은 변수가 사용하는 비트 수<br />i8은 -(2⁷) 부터 (2⁷) — 1 까지 표현<br />u8은 0 부터 2⁸ — 1 까지 표현</p>
<h2 id="heading-integer-overflow"><strong>Integer Overflow</strong></h2>
<p>An integer overflow occurs when the value assigned to an integer variable exceeds the range defined by Rust for the data type.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
    <span class="hljs-keyword">let</span> age:<span class="hljs-built_in">u8</span> = <span class="hljs-number">255</span>;

    <span class="hljs-comment">// 0 to 255 only allowed for u8</span>
    <span class="hljs-keyword">let</span> weight:<span class="hljs-built_in">u8</span> = <span class="hljs-number">256</span>;   <span class="hljs-comment">//overflow value is 0</span>
    <span class="hljs-keyword">let</span> height:<span class="hljs-built_in">u8</span> = <span class="hljs-number">257</span>;   <span class="hljs-comment">//overflow value is 1</span>
    <span class="hljs-keyword">let</span> score:<span class="hljs-built_in">u8</span> = <span class="hljs-number">258</span>;    <span class="hljs-comment">//overflow value is 2</span>

    <span class="hljs-built_in">println!</span>(<span class="hljs-string">"age is {} "</span>,age);
    <span class="hljs-built_in">println!</span>(<span class="hljs-string">"weight is {}"</span>,weight);
    <span class="hljs-built_in">println!</span>(<span class="hljs-string">"height is {}"</span>,height);
    <span class="hljs-built_in">println!</span>(<span class="hljs-string">"score is {}"</span>,score);
 }
</code></pre>
<p>위 예제의 결과는<br />age is 255<br />weight is 0<br />height is 1<br />score is 2<br />로 표현되어 있었으나, 실제 rustc로 컴파일 하면 위 그림처럼 에러 발생합니다.</p>
<h1 id="heading-float"><strong>Float</strong></h1>
<p>Rust의 Float 데이터 유형은 f32와 f64로 분류합니다.<br />f32 유형은 단정밀도 부동 소수점이고 f64 유형은 배정밀도 부동 소수점<br />기본은 f64</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> result = <span class="hljs-number">10.00</span>;        <span class="hljs-comment">//f64 by default</span>
   <span class="hljs-keyword">let</span> interest:<span class="hljs-built_in">f32</span> = <span class="hljs-number">8.35</span>;
   <span class="hljs-keyword">let</span> cost:<span class="hljs-built_in">f64</span> = <span class="hljs-number">15000.600</span>;  <span class="hljs-comment">//double precision</span>

   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"result value is {}"</span>,result);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"interest is {}"</span>,interest);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"cost is {}"</span>,cost);
}
</code></pre>
<h2 id="heading-automatic-type-casting"><strong>Automatic Type Casting</strong></h2>
<p>Rust doesn't allow automatic type casting.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> interest:<span class="hljs-built_in">f32</span> = <span class="hljs-number">8</span>;   <span class="hljs-comment">// integer assigned to float variable</span>
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"interest is {}"</span>,interest);
}
</code></pre>
<h2 id="heading-number-separator"><strong>Number Separator</strong></h2>
<p>To make large numbers easier to read, you can use the visual separator _ underscore to separate numbers.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> float_with_separator = <span class="hljs-number">11_000.555_001</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"float value {}"</span>,float_with_separator);

   <span class="hljs-keyword">let</span> int_with_separator = <span class="hljs-number">50_000</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"int value {}"</span>,int_with_separator);
}
</code></pre>
<h1 id="heading-boolean"><strong>Boolean</strong></h1>
<p>bool 형식은 true 또는 false의 두 가지 가능한 값 사용합니다.<br />bool 키워드를 사용하여 bool 변수를 선언합니다.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> isfun:<span class="hljs-built_in">bool</span> = <span class="hljs-literal">true</span>;
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"Is Rust Programming Fun ? {}"</span>,isfun);
}
</code></pre>
<h1 id="heading-character"><strong>Character</strong></h1>
<p>Rust's character data type supports numbers, alphabets, Unicode, and special characters. Use the char keyword to declare variables of the character data type.<br />Rust의 char 유형은 유니코드 스칼라 값을 표현합니다.<br />ASCII 그 이상을 나타낼 수 있습니다.<br />유니코드 스칼라 값의 범위는 U+0000 ~ U+D7FF 및 U+E000 ~ U+10FFFF 포함합니다.</p>
<pre><code class="lang-rust"><span class="hljs-function"><span class="hljs-keyword">fn</span> <span class="hljs-title">main</span></span>() {
   <span class="hljs-keyword">let</span> special_character = <span class="hljs-string">'@'</span>; <span class="hljs-comment">//default</span>
   <span class="hljs-keyword">let</span> alphabet:<span class="hljs-built_in">char</span> = <span class="hljs-string">'A'</span>;
   <span class="hljs-keyword">let</span> emoji:<span class="hljs-built_in">char</span> = '😁';

   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"special character is {}"</span>,special_character);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"alphabet is {}"</span>,alphabet);
   <span class="hljs-built_in">println!</span>(<span class="hljs-string">"emoji is {}"</span>,emoji);
}
</code></pre>
]]></content:encoded></item><item><title><![CDATA[[Rust] Hello World part 2]]></title><description><![CDATA[매크로
Rust는 메타 프로그래밍을 허용하는 강력한 매크로 시스템을 제공합니다.예제에서 보았듯이 매크로는 이름이 Bang(!)으로 끝나는 점을 제외하면 함수처럼 보이지만 함수 호출을 생성하는 대신 매크로가 프로그램의 나머지 부분과 함께 컴파일되는 소스 코드로 확장됩니다.따라서 함수와 달리 프로그램에 더 많은 런타임 기능을 제공매크로는 함수의 확장합니다.
comment
주석은 프로그램의 가독성을 향상시키는 방법주석은 코드 작성자, 함수/구조에 대...]]></description><link>https://haroldrippin.hashnode.dev/rust-hello-world-part-2</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/rust-hello-world-part-2</guid><category><![CDATA[Rust]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sat, 22 Jun 2024 07:42:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/2GlAiL6D0DQ/upload/5dd00f3cbdc51d97af68a28f01e3e064.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1 id="heading-kirrp6ttgazrozwqkg"><strong>매크로</strong></h1>
<p>Rust는 메타 프로그래밍을 허용하는 강력한 매크로 시스템을 제공합니다.<br />예제에서 보았듯이 매크로는 이름이 Bang(!)으로 끝나는 점을 제외하면 함수처럼 보이지만 함수 호출을 생성하는 대신 매크로가 프로그램의 나머지 부분과 함께 컴파일되는 소스 코드로 확장됩니다.<br />따라서 함수와 달리 프로그램에 더 많은 런타임 기능을 제공매크로는 함수의 확장합니다.</p>
<h1 id="heading-comment"><strong>comment</strong></h1>
<p>주석은 프로그램의 가독성을 향상시키는 방법<br />주석은 코드 작성자, 함수/구조에 대한 힌트 등과 같은 프로그램에 대한 추가됩니다.</p>
<p>정보를 포함하는 데 사용됩니다.<br />컴파일러는 주석을 무시합니다.</p>
]]></content:encoded></item><item><title><![CDATA[[Rust] Rust install part 1]]></title><description><![CDATA[going to the official site
Disclaimer: I’m by no means a Rust expert.
https://www.rust-lang.org/tools/install]]></description><link>https://haroldrippin.hashnode.dev/rust-rust-install-part-1</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/rust-rust-install-part-1</guid><category><![CDATA[low-level programming language]]></category><category><![CDATA[Rust]]></category><category><![CDATA[rust lang]]></category><category><![CDATA[Tutorial]]></category><category><![CDATA[Rust, Solana, Web3]]></category><category><![CDATA[Rust programming]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Sat, 22 Jun 2024 03:38:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/-ki-75uB50Y/upload/f9d47f9d71f8bb09d1f50b36dbb208fa.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><img src="https://miro.medium.com/v2/resize:fit:1024/1*Gk6PnSOU-wl51iDGiM31Lw.png" alt /></p>
<p>going to the official site</p>
<h2 id="heading-disclaimer-im-by-no-means-a-rust-expert"><strong>Disclaimer: I’m by no means a Rust expert.</strong></h2>
<p><a target="_blank" href="https://www.rust-lang.org/tools/install">https://www.rust-lang.org/tools/install</a></p>
<p><img src="https://miro.medium.com/v2/resize:fit:1400/1*IjbDr4W5rf3ShApMvq7PXQ.png" alt /></p>
<p><img src="https://miro.medium.com/v2/resize:fit:1400/1*W3-cEBj7zD_yVLffbhbYIA.png" alt /></p>
]]></content:encoded></item><item><title><![CDATA[[Blockchain] Node, 노드의 종류]]></title><description><![CDATA[1-1. Node Introduction
아래의 내용 모두 노드를 설명해준다.


Wallet

블록체인 참여자/서버

블록 생성 주체

블록체인 네트워크 유지를 위해 컴퓨팅 파워를 사용하는 모든 주체

네트워크 연결 포인트 혹은 데이터 전송의 종점/재분배점



노드는 다양한 기능을 가지며, 기능 및 필요에 따라 다양한 종류로 구분된다.
1-2. 노드의 기능

Wallet
소유한 비트코인 송수신 및 잔고를 확인하며 사용자의 개인키와 공개키를 ...]]></description><link>https://haroldrippin.hashnode.dev/blockchain-node</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/blockchain-node</guid><category><![CDATA[Blockchain]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Blockchain technology]]></category><category><![CDATA[Blockchain development]]></category><category><![CDATA[blockchain security]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Fri, 21 Jun 2024 03:01:10 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/FO7JIlwjOtU/upload/b9d2b2b7790cd2fde5fe1d15a311d1db.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-1-1-node-introduction">1-1. Node Introduction</h2>
<p>아래의 내용 모두 노드를 설명해준다.</p>
<blockquote>
<ul>
<li><p>Wallet</p>
</li>
<li><p>블록체인 참여자/<strong>서버</strong></p>
</li>
<li><p>블록 생성 주체</p>
</li>
<li><p>블록체인 <strong>네트워크 유지를 위해 컴퓨팅 파워를 사용</strong>하는 모든 주체</p>
</li>
<li><p>네트워크 <strong>연결 포인트</strong> 혹은 데이터 전송의 종점/재분배점</p>
</li>
</ul>
</blockquote>
<p>노드는 다양한 기능을 가지며, 기능 및 필요에 따라 다양한 종류로 구분된다.</p>
<h2 id="heading-1-2">1-2. 노드의 기능</h2>
<p><img src="https://velog.velcdn.com/images%2Fyooni%2Fpost%2F02b2e4ce-4e7d-4543-8f55-1b67621ea574%2Fimage.png" alt /></p>
<h3 id="heading-wallet">Wallet</h3>
<p>소유한 비트코인 송수신 및 잔고를 확인하며 사용자의 개인키와 공개키를 관리하고 거래에 사용되는 주소를 생성한다.</p>
<h3 id="heading-miner">Miner</h3>
<p>작업증명 방식을 사용하여 새로운 블록을 위해 경쟁하고 블록 생성시 코인을 보상으로 받는다.</p>
<h3 id="heading-full-blockchain">Full Blockchain</h3>
<p>온전한 최신 블록체인 복사본을 유지하여 외부 참조 없이 독자적으로 거래 검증이 가능하다. 모든 블록을 다 가지고 있기 때문에 상당한 용량을 차지한다.</p>
<h3 id="heading-network-routing">Network Routing</h3>
<p>거래와 블록을 검증하고 전파하며, 이웃 노드들과의 연결을 유지한다. 모든 노드 유형에 필요하다.</p>
<p>블록체인에서 어떤 기능을 담당하는 노드가 될 건지는 본인의 자유이다. 노드의 기본적인 4가지 기능 모두를 가지고 있는 노드는 많지 않다.</p>
<h2 id="heading-1-3-types-of-nodes">1-3. Types of nodes</h2>
<p><img src="https://velog.velcdn.com/images%2Fyooni%2Fpost%2F8a6f780d-b776-4c2a-b3ed-39ebe3c230cc%2Fimage.png" alt /></p>
<h3 id="heading-full-node">Full Node</h3>
<p>지갑, 채굴, 데이터베이스, 네트워크 등 <strong>노드의 모든 기능을 가지고 있는 노드</strong>이다. 제네시스 블록부터 시작하여 현재까지 온전한 최신 블록체인 복사본을 유지한다. 새로운 블록을 추가하기 위해 전달받은 블록에 대한 검증을 수행한다. 거래 내역에 오류가 없음을 확인하고 새로운 블럭이 생성될 때 최종 승인하는 역할을 한다. 방대한 양의 데이터를 소화할 수 있는 대규모 채굴업 관련 종사자들에게 필요한 기술이다. 중앙서버와 달리 주요 데이터를 여러 풀노드가 함께 보관하기 때문에 사실상 해킹이 불가능하다.</p>
<p>풀노드는 모든 블록체인의 내용을 가지고 있기 때문에 다른 노드의 도움 없이 스스로 거래 검증이 가능하지만 용량이 너무 커서 다운로드에 오랜 시간이 걸리고 하드디스크의 용량을 많이 차지한다. 이러한 단점을 해결하기 위해 <strong>라이트 노드</strong>가 등장했다.</p>
<h3 id="heading-light-node">Light Node</h3>
<p><strong>지갑, 네트워크 기능</strong>이 있어 블록체인에 참여하는 거래를 수행하는 노드이다. 이 노드는 대부분 저장 공간의 한계가 있는 <strong>모바일 지갑</strong>에서 사용된다. 풀노드와 다르게 자료의 중요한 일부분(블록헤더)만을 다운받는다. 대신 거래를 위해 내용 검증이 필요한데, 그 때마다 풀노드에게 자료를 요청해야 한다.</p>
<blockquote>
<p><strong>✔️ SPV(Simple Payment Verify)</strong><br />It is a way for light nodes to validate transactions for individual transactions, requesting block information from full nodes to verify that the transaction is a validated transaction through Merkletree.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images%2Fyooni%2Fpost%2Fefa36349-27f4-4a51-a6aa-a4663afc85bb%2Fimage.png" alt /></p>
<h3 id="heading-master-node">Master Node</h3>
<p><strong>풀노드 중에서 권한과 보상을 받는 노드</strong>로 <strong>주인/상위 노드</strong>로 표현된다. 마스터 노드는 채굴하지 않는 풀노드를 늘리기 위해 고안되었다. 풀노드는 블록체인 데이터를 전부 저장해 네트워크에 기여하는 의무를 갖고 있고, 마스터노드는 풀노드의 의무를 수행하면서 블록 생성에 대한 보상을 받고 트랜잭션의 추가 기능을 수행한다.</p>
<p>풀노드 운영에는 많은 비용이 들어가기 때문에 채굴을 하지 않는다면 풀노드를 운영하는 유지비를 감당하기 어렵다. 따라서 대부분의 풀노드들은 채굴을 위한 풀노드이다. 채굴을 하지 않으면서 굳이 풀노드를 운영할 필요가 없는 것이다. 개인 구성원들은 대부분 라이트노드를 선호한다. <strong>채굴하지 않는 풀노드를 늘리기 위해</strong> 마스터노드가 고안되었다. 마스터노드 운영시 소정의 인센티브가 지급된다. 마스터노드는 <strong>풀노드를 유지에 쓰이는 비용에 대한 보상</strong>을 주기 위함이다.</p>
<p>❗️ <strong>풀노드의 수는 매우 중요하다. 블록체인이 얼마나 안정적으로 운영되고 있는지 확인할 수 있기 때문이다.</strong></p>
<h3 id="heading-mining-node">Mining Node</h3>
<p><strong>채굴만을 담당</strong>하는 노드이다. 채굴노드의 유일한 목적은 가능한 한 빠르게 채굴하는 것이다. 채굴이란 실질적으로 작업증명 방식의 퍼즐을 푸는 일이기 때문에, 채굴노드는 작업증명 방식을 채택한 블록체인에만 존재한다.</p>
<p>마이닝 풀(Mining pool)에 가담해서 **풀 프로토콜(Pool protocol)**과 연결되어 채굴하는 경우와, **스트라텀 프로토콜(Stratum Protocol)**과 연결되어 경량지갑(Lighit weight wallet)을 가지고 채굴하는 경우가 있다. 전자는 채굴 전문 업체들이 주로 사용하는 방식이고 후자는 네트워크 기능이 있는 노드와 연결된 후 풀에 접근하는 방식이다.</p>
<blockquote>
<p><strong>✔️ Stratum Protocol</strong><br />채굴 기능만을 가진 노드와 블록체인 기능을 가진 노드, SPV 지갑 노드를 연결하는 프로토콜이다. 채굴 기능만 있다면 이를 저장하는 역할을 하는 노드와 네트워크 기능을 하는 노드가 필요하기 때문이다.</p>
</blockquote>
<h3 id="heading-random-node">Random Node</h3>
<p>전체 블록체인의 무결성을 유지하기 위해 임의로 선택된 노드이다. 선출된 마스터노드와 함께 블록을 생선한다. <strong>위임지분 증명 방식</strong>을 그대로 사용하면서, 실시간으로 <strong>랜덤노드를 임의로 추가하여 검증</strong>하도록 한다. 따라서 대표자들 간의 담합에 의한 데이터 조작을 예방할 수 있다.</p>
<h3 id="heading-baking-node">Baking Node</h3>
<p><strong>테조스(Tezos)</strong> 블록체인에서 코인 소유자로부터 위임받은 코인으로 베이킹을 하는 노드이다. <strong>베이킹</strong>은 테조스 에서 블록을 생성하고 블록을 입증하는 방식으로 채굴과 동일한 의미이다.</p>
<h3 id="heading-super-node-representative-node">Super Node / Representative Node</h3>
<p><strong>위임지분 증명</strong> 방식을 사용하는 블록체인 네트워크에서 노드들을 대표하여 블록을 생성하고 그에 대한 보상을 받는 노드이다. 블록체인의 노드들은 암호화폐 보유량에 따라 투표권을 행사하여 중요한 의사결정 권한을 수행한 대리인을 선정한다. 선정된 대표노드는 블록 생성 및 거래 확정 권한을 위임받아 역할을 수행한다. 선출된 소수의 대표노드만 합의 과정에 참여하기 때문에 트랜잭션 처리 속도가 매우 빨라진다.</p>
<p><img src="https://velog.velcdn.com/images%2Fyooni%2Fpost%2F4ad6e884-20f5-4816-99f0-4a978d856523%2Fimage.png" alt /></p>
<h3 id="heading-7j207jm47j2yioufuoutnoutpc4ulg">이외의 노드들...</h3>
<ul>
<li><p>Endpoint Node</p>
</li>
<li><p>Consensus Node</p>
</li>
<li><p>History Node</p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[[Rust] Smart Contracts Introduction]]></title><description><![CDATA[brew install protobuf
rustup update nightly설치가 안되는 경우 rust를 재설치 후 다시 실행 하면 정상적으로 설치 되는걸 확인 할 수 있다
rustup target add wasm32-unknown-unknown --toolchain nightly
brew install cmake
cargo install --force --locked cargo-contract --version 2.0.0-rc
cargo c...]]></description><link>https://haroldrippin.hashnode.dev/rust-smart-contracts-introduction</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/rust-smart-contracts-introduction</guid><category><![CDATA[Solana]]></category><category><![CDATA[Rust]]></category><category><![CDATA[rust lang]]></category><category><![CDATA[Web3]]></category><category><![CDATA[Blockchain]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Wed, 22 May 2024 00:20:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/V9ounv39B7k/upload/faa255e6740f609feb38065859daa195.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><code>brew install protobuf</code></p>
<p><code>rustup update nightly</code><br />설치가 안되는 경우 rust를 재설치 후 다시 실행 하면 정상적으로 설치 되는걸 확인 할 수 있다</p>
<p><code>rustup target add wasm32-unknown-unknown --toolchain nightly</code></p>
<p><code>brew install cmake</code></p>
<p><code>cargo install --force --locked cargo-contract --version 2.0.0-rc</code></p>
<p><code>cargo contract new incrementer</code></p>
<p><a target="_blank" href="https://www.youtube.com/watch?v=98CIYL7FeDQ">https://www.youtube.com/watch?v=98CIYL7FeDQ</a></p>
<p>rustup update<br />rust 버전을 업그레이드 합니다.</p>
]]></content:encoded></item><item><title><![CDATA[[CS] mac ports]]></title><description><![CDATA[Mac ports 업그레이드
sudo port -d selfupdate]]></description><link>https://haroldrippin.hashnode.dev/cs-mac-ports</link><guid isPermaLink="true">https://haroldrippin.hashnode.dev/cs-mac-ports</guid><category><![CDATA[Computer Science]]></category><dc:creator><![CDATA[Harold Lippin]]></dc:creator><pubDate>Thu, 21 Mar 2024 00:00:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/stock/unsplash/UqVvNxLD1us/upload/c9a9e4e2bc48874138c6bce19e3acec5.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h3 id="heading-mac-ports">Mac ports 업그레이드</h3>
<pre><code class="lang-abap">sudo port -d selfupdate
</code></pre>
]]></content:encoded></item></channel></rss>