<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>study_record.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 11 Aug 2024 06:46:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. study_record.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/study_record" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[혼공S_후기]혼공학습단 12기 회고]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5S%ED%9B%84%EA%B8%B0%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-12%EA%B8%B0-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5S%ED%9B%84%EA%B8%B0%ED%98%BC%EA%B3%B5%ED%95%99%EC%8A%B5%EB%8B%A8-12%EA%B8%B0-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Sun, 11 Aug 2024 06:46:49 GMT</pubDate>
            <description><![CDATA[<h3 id="12기-혼공단이-끝났다💡">12기 혼공단이 끝났다!💡</h3>
<p>이번에는 &#39;혼자공부하는 SQL&#39;로 6주동안 책 한권을 다봤다. 
회고를 작성해본다</p>
<h3 id="📡-혼공s에-참여-후기">📡 혼공s에 참여 후기</h3>
<p>ADSP시험을 준비해서 SQL에 대해서 조금은 알고있었다. 하지만 시험을 붙었다고 실제로 능숙하게 사용할수 있는것은 아니어서 어떤책을 볼까 하다가 &#39;혼자공부하는 SQL&#39;로 공부하기로 했다. 
이전에 &#39;혼자 공부하는 컴퓨터 구조+운영체제&#39;책을 봤을 때 자세한 설명으로 도움이 많이 되어 SQL도 망설이지 않고 구입하였다! 책을 보면서 이전에 공부했던 것이 다시 생각나며 복습도 되었고 7,8단원은 처음배우고 실습하는것이라서 새롭고 재미있었다. </p>
<p>아쉬운점이 있다면 문제가있고 어떤 쿼리문으로 풀어가는지에 대한 내용이 없었다것이다. 이부분은 코딩테스트 사이트에서 문제를 풀면서 더 공부가 필요하다. &#39;한빛미디어-이것이 시리즈&#39;에 SQL도 나와주면 더 좋을것같다😁</p>
<h3 id="📡-혼공단-추천사">📡 혼공단 추천사</h3>
<ol>
<li>일회독은 한번을 꼭 할수있다
혼공단에 참여 안했다면 아마도 &#39;혼자공부하는 SQL&#39;은 좀더 오래 묵혀 두었을 것같다. 혼공단에 참여하면 일단 한번은 처음부터 끝까지 볼수있는 아주 좋은 기회이다. </li>
<li>다른사람공부 방법을 볼수있다.
다른사람들 공부방법을 볼수 있는것이 좋다. 다른사람을 보면서 나의 부족한 부분을 자책하는것 보다는 다양한 방법이있구나 하면서 봤다.</li>
<li>동기부여 충전
한권을 다 끝내고 나면 다음에는 어떤책을 공부할까 라는 동기부여가 된다. 이번에도 끝냈으니깐 다음에도 할수 있을거라는 자신감이 생긴다. 어려울것같지만 다음 혼공단에 &#39;혼자 공부하는 머신러닝+딥러닝&#39;으로 참여를 생각중이다.</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_6주]chapter08 SQL과 파이썬 연결]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5S6%EC%A3%BCchapter8-SQL%EA%B3%BC-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%97%B0%EA%B2%B0</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5S6%EC%A3%BCchapter8-SQL%EA%B3%BC-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EC%97%B0%EA%B2%B0</guid>
            <pubDate>Thu, 08 Aug 2024 03:07:58 GMT</pubDate>
            <description><![CDATA[<h2 id="진도🐥">진도🐥</h2>
<p><img src="https://velog.velcdn.com/images/study_record/post/ef3d8ce5-3d8b-4202-a566-083c0f49e05e/image.png" alt=""></p>
<h3 id="추가미션✨">추가미션✨</h3>
<ul>
<li>완전한 형태의 GUI 응용프로그램 만들기
<img src="https://velog.velcdn.com/images/study_record/post/d8fd85a3-6ee3-4cc6-82e1-182b9fafc9c8/image.png" alt=""></li>
</ul>
<ul>
<li><p>입력 성공 화면
<img src="https://velog.velcdn.com/images/study_record/post/a69feefc-13b0-4615-bd15-ef552b1d39bb/image.png" alt=""></p>
</li>
<li><p>조회 화면
<img src="https://velog.velcdn.com/images/study_record/post/5aff2ca1-c7cb-4531-82ed-04327356fbfc/image.png" alt=""></p>
</li>
</ul>
<h3 id="공부📚">공부📚</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/b265aaf1-f92c-48e7-ba3b-66e934c49c0b/image.png" alt=""></p>
<h4 id="08-1-파이썬-개발환경">08-1 파이썬 개발환경</h4>
<ul>
<li><p>파이썬과 MySQL 연결을 위해서 외부라이브러리(PyMySQL)를 사용함</p>
</li>
<li><p>파이썬 설치 완료</p>
<h4 id="08-2-파이썬-mysql연결">08-2 파이썬 MySQL연결</h4>
</li>
<li><p>파이썬에서 데이터 입력하는 단계
MySQL연결하기 → 커서 생성하기 → 테이블 만들기 → 데이터입력하기 → 입력한 데이터 저장하기 → MySQL 연결 종료하기</p>
</li>
<li><p>파이썬에서 데이터 입력하기</p>
<blockquote>
<pre><code>import pymysql 
conn = pymysql.connect(host=&#39;127.0.0.1&#39;, user=&#39;root&#39;,password=&#39;1234&#39;,db=&#39;soloDB&#39;,charset=&#39;utf8&#39;) // 데이터베이스와 연결
cur = conn.cursor() // SQL문 실행
cur.execute(&quot;CREATE TABLE userTable (id char(4), userName char(15), email char(20), birthYear int)&quot;) // 데이터 입력
conn.commit() // 데이터 커밋하기
conn.close // 연결한데이터 베이스 닫기</code></pre></blockquote>
</li>
</ul>
<ul>
<li>데이터 입력프로그램
<img src="https://velog.velcdn.com/images/study_record/post/5453f213-2836-4242-b2bc-aca7f51f68c1/image.png" alt=""></li>
</ul>
<ul>
<li>MySQL의 데이터 조회를 위한 파이썬 단계
MySQL연결하기 → 커서 생성하기 → 테이터 조회하기 → 조회한 데이터출력하기 → MySQL 연결 종료하기</li>
</ul>
<ul>
<li>데이터 조회 프로그램
<img src="https://velog.velcdn.com/images/study_record/post/66e517e6-c9b6-429a-b584-ecc349565c81/image.png" alt=""></li>
</ul>
<h4 id="08-3-gui-응용프로그램">08-3 GUI 응용프로그램</h4>
<ul>
<li><p>GUI : 윈도 그래픽 환경으로 제공되는 화면을 의미함</p>
</li>
<li><p>tkinter 라이브러리로 만든다</p>
</li>
<li><p>라벨 : 문자를 표현하는 위젯. pack() 함수 사용</p>
</li>
<li><p>위젯 : 윈도에 나오는 버튼, 라디오 버튼, 이미지를 지칭 </p>
</li>
<li><p>버튼 : command 옵션이 있어서 클릭할때만 작업을 처리함</p>
</li>
<li><p>프레임: 화면 구역나누기</p>
</li>
<li><p>엔트리 : 입력상자</p>
</li>
<li><p>리스트 박스 : 목록을 나타냄</p>
</li>
<li><p>완전한 형태의 GUI만들기
<img src="https://velog.velcdn.com/images/study_record/post/13496968-57b2-492e-acca-9822db3ea744/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_6주]chapter07 스토어드 프로시저]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5S6%EC%A3%BCchapter%EC%8A%A4%ED%86%A0%EC%96%B4%EB%93%9C-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5S6%EC%A3%BCchapter%EC%8A%A4%ED%86%A0%EC%96%B4%EB%93%9C-%ED%94%84%EB%A1%9C%EC%8B%9C%EC%A0%80</guid>
            <pubDate>Wed, 07 Aug 2024 12:03:38 GMT</pubDate>
            <description><![CDATA[<h2 id="진도🐥">진도🐥</h2>
<p><img src="https://velog.velcdn.com/images/study_record/post/5093d74d-6c1c-4e45-9b69-f81c56e99e96/image.png" alt=""></p>
<h3 id="기본미션✨">기본미션✨</h3>
<p>P.365의 고객테이블 회원정보 변경트리거 작성하고 인증
<img src="https://velog.velcdn.com/images/study_record/post/0db5343d-0511-4700-8e90-43f9e98810de/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/c007dc34-d742-4e7a-ab43-cddbb7c19cd3/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/f2b0d1f7-1ec5-412f-8442-a2bce9b23086/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/549a35de-7464-420e-a082-1a9b98552603/image.png" alt=""></p>
<h3 id="공부📚">공부📚</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/182dd400-862e-4a21-b304-586fc7a35a69/image.png" alt=""></p>
<h4 id="07-1-스토어드-프로시저-사용방법">07-1 스토어드 프로시저 사용방법</h4>
<h5 id="스토어드-프로시저">스토어드 프로시저</h5>
<ul>
<li><p>MySQL에서 제동하는 기능으로 프로그래밍 기능을 제공함</p>
</li>
<li><p>동작의 일괄처리를 위해 사용함</p>
</li>
<li><p>스토어드 프로시저 필수형식</p>
<blockquote>
<p>DELIMITER $ (1)
CREATE PROCEDURE 스토어드프로시저_이름(IN / OUT 매개변수) (2)
BEGIN</p>
</blockquote>
</li>
<li><p><em>SQL 프로그래밍 코드 작성*</em>
END $ 
DELIMITER</p>
<p>(1) $ : 스토어드 프로시저를 묶어주는 기능. #,%,/,&amp;  을 써도 됨
(2) CREATE PROCEDURE : 스토어드 프로시저의 이름을 정해줌
(3) DELIMITER : 구분자</p>
<ul>
<li>스토어드 프로시저 호출<blockquote>
<p>CALL 스토어드프로시저_이름();</p>
</blockquote>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/a7aab52d-8e05-4ae6-9152-30780430c38e/image.png" alt=""></p>
<ul>
<li>스토어드 프로시저 삭제<blockquote>
<p>DROP PROCEDURE 스토어드프로시저_이름;</p>
</blockquote>
</li>
</ul>
</li>
<li><p>스토어드 프로시저 입력/출력 매개변수 지정</p>
<blockquote>
<p>IN 입력_매개변수이름 데이터형식</p>
</blockquote>
<blockquote>
<p>OUT 출력_매개변수이름 데이터형식</p>
</blockquote>
</li>
<li><p>스토어드 프로시저 입력/출력 매개변수 실행</p>
<blockquote>
<p>CALL 프로시저_이름(전달값);</p>
</blockquote>
<blockquote>
<p>CALL 프로시저_이름(@변수명)
SELECT @변수명</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/f20ded16-c454-4875-bc2a-a4ed1e1b1c7f/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/59dd3e76-23b5-4f28-8e8f-5d04f73b5a51/image.png" alt=""></p>
</li>
<li><p>스토어드 프로시저에 SQL프로그래밍 활용
<img src="https://velog.velcdn.com/images/study_record/post/75623bbf-af26-43ea-a1d2-37a3f5aa9d5b/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/d4ac4f66-26c2-4141-b554-300d3eebaa98/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/700ad42b-bf1d-4c20-bb8c-6113813f2763/image.png" alt=""></p>
</li>
</ul>
<h4 id="07-2-스토어드-함수와-커서">07-2 스토어드 함수와 커서</h4>
<h5 id="스토어드-함수">스토어드 함수</h5>
<ul>
<li><p>직접 함수를 만들어서 사용하는 기능 </p>
</li>
<li><p>스토어드 함수 형식</p>
<blockquote>
<p>DELIMITER $
CREATE FUNCTION 스토어드함수(매개변수)
RETURNS 반환방식
BEGIN</p>
</blockquote>
</li>
<li><p><em>프로그래밍 코딩*</em></p>
</li>
<li><p><em>RETURN 반환값*</em>
END $
DELIMITER ;
SELECT 스토어드함수</p>
</li>
<li><p>RETURNS문 : 반환할 값의 데이터 형식을 지정함</p>
</li>
<li><p>RETURN문 : 하나의 값 반환</p>
</li>
<li><p>SELECT문으로 호출</p>
</li>
<li><p>스토어드 함수에서는 SELECT문 사용못함</p>
</li>
<li><p>계산을 통해서 하나의 값 반환</p>
</li>
<li><p>SELECT ~ INTO ~ : 값을 저장했다가 사용 </p>
</li>
<li><p>기존 스튜어드 함수 확인 </p>
<blockquote>
<p>SHOW CREATE FUNCTION 함수이름;</p>
</blockquote>
</li>
<li><p>스튜어드 함수 삭제</p>
<blockquote>
<p>DROP FUNCTION 함수이름;</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/9c23e290-7c20-482c-af16-9a8e94bd7f17/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/cb6f2223-aad9-4572-9dc5-867f835683d7/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/fe3a84fc-8d79-46dd-8052-76864187dd50/image.png" alt=""></p>
</li>
</ul>
<h5 id="커서로-처리하기">커서로 처리하기</h5>
<ul>
<li><p>커서 : 테이블에서 한행씩 처리함</p>
</li>
<li><p>커서는 스토어드 프러시저안에 작성함</p>
</li>
<li><p>커서의 작동순서 : 커서선언 → 반복 조건 선언하기 → 커서 열기 → 데이터 가져오기/데이터처리하기 &lt;반복구간&gt; → 커서 닫기</p>
</li>
<li><p>커서와 스토어드 프로시저는 같이 사용함
<img src="https://velog.velcdn.com/images/study_record/post/ba2f4840-1a57-46a5-bcee-b46bbb3fec5e/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/46afd85b-833b-4497-8dab-26ca25123570/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/fb489ff2-e9e9-4a90-8d65-bba8248ab375/image.png" alt=""></p>
<blockquote>
<p>-- 변수 선언 --
DECLARE 변수1
DECLARE 변수2</p>
</blockquote>
</li>
<li><ul>
<li>커서 선언 --
DECLARE 커서이름 CURCOR FOR SELECT문</li>
</ul>
</li>
<li><ul>
<li>반족조건 선언 --
DECLARE CONTINUE HANDLER</li>
</ul>
</li>
<li><ul>
<li>행이 더 없을경우 수행하는 것 --
FOR NOT FOUND </li>
</ul>
</li>
<li><ul>
<li>커서열기 --
OPEN 커서이름</li>
</ul>
</li>
<li><ul>
<li>커서가 반복할 코드 시작 --
cursor_loop : LOOP ~ </li>
</ul>
</li>
<li><ul>
<li>커서가 빠져나갈 조건 --
IF ~ THEN LEAVE coursor_loop; END IF; </li>
</ul>
</li>
<li><ul>
<li>커서 반복 조건 종료 --
END LOOP coursor_loop</li>
</ul>
</li>
<li><ul>
<li>커서 닫기 --
CLOSE 커서이름</li>
</ul>
</li>
</ul>
<h4 id="07-3-자동-실행되는-트리거">07-3 자동 실행되는 트리거</h4>
<h5 id="트리거">트리거</h5>
<ul>
<li><p>INSERT, UPDATE, DELETE 문이 실행될때 자동으로 실행되는 추가 코드 → 테이터 무결성을 지켜줌</p>
</li>
<li><p>CALL문으로 작동 시킬수 없음</p>
</li>
<li><p>IN, OUT 매개변수를 사용할수 없음
<img src="https://velog.velcdn.com/images/study_record/post/63a68f9c-fb28-491b-88dc-f90380ed36d0/image.png" alt=""></p>
</li>
<li><p>트리거 활용
<img src="https://velog.velcdn.com/images/study_record/post/beb8738a-b5b2-495d-b647-3f69a777cc96/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/9f6ad655-a879-4774-ba99-e5626deaaec2/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/1609a482-74ef-4190-acc7-60271fea467b/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/e95c7a8e-ac0f-4df8-b137-13903f281025/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/d43229a1-131f-4a73-a60d-272a4c85417b/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_5주]chapter06 인덱스]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s5%EC%A3%BCchapter06-%EC%9D%B8%EB%8D%B1%EC%8A%A4</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s5%EC%A3%BCchapter06-%EC%9D%B8%EB%8D%B1%EC%8A%A4</guid>
            <pubDate>Tue, 06 Aug 2024 07:23:27 GMT</pubDate>
            <description><![CDATA[<h2 id="5주차-진도🐥">5주차 진도🐥</h2>
<p><img src="https://velog.velcdn.com/images/study_record/post/f25921d7-a7cf-4614-a224-66fd4714ca13/image.png" alt=""></p>
<h3 id="✨-기본미션">✨ 기본미션</h3>
<p>P.301쪽 인덱스 생성하고 key_name이 primary 출력화면 캡처
<img src="https://velog.velcdn.com/images/study_record/post/47992d86-6929-48c4-9fff-034731fd5b54/image.png" alt=""></p>
<h3 id="✨-추가미션">✨ 추가미션</h3>
<ul>
<li>인덱스 생성 형식<blockquote>
<p>CREATE [유니크] INDEX 인덱스 이름
ON 테이블 이름 (열이름) [오름차순|내림차순]</p>
</blockquote>
</li>
<li>인덱스 제거 헝식<blockquote>
<p>DROP INDEX 인덱스 이름 ON 테이블 이름</p>
</blockquote>
</li>
</ul>
<h3 id="📚공부">📚공부</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/739c0465-f49f-4e51-a788-6dcc67f49264/image.png" alt=""></p>
<h4 id="06-1-인덱스-개념을-파악하자">06-1 인덱스 개념을 파악하자</h4>
<h5 id="인덱스">인덱스</h5>
<ul>
<li>데이터를 빠르게 찾을수 있게 도와주는 도구 <h5 id="인덱스-장점과-단점">인덱스 장점과 단점</h5>
<table>
<thead>
<tr>
<th align="left">장점</th>
<th align="right">단점</th>
</tr>
</thead>
<tbody><tr>
<td align="left">SELECT문 검색 속도가 빠름</td>
<td align="right">인덱스가 공간을 차지함(테이블 크기의 10%)</td>
</tr>
<tr>
<td align="left">→ 전체시스템 성능이 향상됨</td>
<td align="right">처음 인덱스를 만들때 시간이 오래걸림</td>
</tr>
<tr>
<td align="left"></td>
<td align="right">INSERT, UPDATE, DELETE 작업을 자주하면 성능이 나빠짐</td>
</tr>
</tbody></table>
</li>
</ul>
<h5 id="인덱스-종류">인덱스 종류</h5>
<ul>
<li>클러스터형 인덱스(CLUSTERED INDEX)<ul>
<li>알파벳순으로 정리  예)영어사전</li>
<li>기본키로 만들면 자동으로 지정되는 인덱스 → 테이블에 한개만 만들수 있음</li>
<li>열을 기본키로 지정하면 열을 기준으로 자동정렬됨</li>
</ul>
</li>
<li>보조 인덱스(SENCONDARY INDEX)<ul>
<li>찾아보기로 검색 예)책의 찾아보기 </li>
<li>고유키로 테이블에 여러개 지정할수 있음</li>
<li>보조인덱스를 생성해도 데이터 순서 변화가 없음</li>
</ul>
</li>
</ul>
<h5 id="인덱스-생성">인덱스 생성</h5>
<ul>
<li><p>하나의 열에 하나의 인덱스를 생성함</p>
<ul>
<li>key_name의 PRIMARY: 자동생성된 인덱스, 클러스터형 인덱스</li>
<li>Non_unique : 중복이 허용되는가? / 0은 false, 1은 true</li>
</ul>
<p>![]
(<a href="https://velog.velcdn.com/images/study_record/post/be407690-3e79-468a-b621-c87668f0d2b6/image.png">https://velog.velcdn.com/images/study_record/post/be407690-3e79-468a-b621-c87668f0d2b6/image.png</a>)</p>
<ul>
<li>key_name의 UNIQUE: 고유키로 생성되는 인덱스는 보조인덱스</li>
<li>key_name의 열이름 : 보조인덱스</li>
<li>클러스터형 인덱스 생성</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/bdef9871-195d-4da3-95e2-ea85e99938c1/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/557f3d4b-a61e-455c-a1b1-bef55a54e6d3/image.png" alt=""></p>
<ul>
<li>클러스터형 인덱스 변경
<img src="https://velog.velcdn.com/images/study_record/post/232a980a-8e9e-4ae7-9785-40a9b18d1ca3/image.png" alt=""></li>
</ul>
</li>
<li><p>보조 인덱스 생성
<img src="https://velog.velcdn.com/images/study_record/post/4c802da3-e432-44e1-89e0-c81ead002116/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/14526ce5-b352-40d4-95c3-095a11b4ba38/image.png" alt=""></p>
</li>
</ul>
<h4 id="06-2-인덱스-내부작동">06-2 인덱스 내부작동</h4>
<h5 id="균형트리">균형트리</h5>
<ul>
<li>인덱스는 균형트리 형식으로 되어있음</li>
<li>균형트리는 루트-중간-리프로 구성된 데이터 구조</li>
<li>노드(NODE) : 데이터가 저장되는 공간<ul>
<li>루트노드 : 상위 노드, 모든 노드들의 출발점</li>
<li>중간노드 : 루트노드와 리프노드 가운데 있는것</li>
<li>리프노드 : 가장 마지막 노드 </li>
<li>MySQL 페이지 = 노드<ul>
<li>최소한은 저장단위(16Kbyte)</li>
<li>1건 데이터입력 하는데 1페이지가 필요한</li>
<li>루트 페이지/리프 페이지</li>
</ul>
</li>
<li>균형트리 검색<ul>
<li>루트페이지 부터 검색함</li>
</ul>
</li>
<li>균형트리 사용시 <ul>
<li>데이터 검색(SELECT) → 속도가 향상됨</li>
<li>데이터 변경작업(INSERT, UPDATE, DELETE) → 페이지 분할로 성능이 나빠짐 </li>
</ul>
</li>
</ul>
</li>
</ul>
<h4 id="클러스터형-인덱스-구성하기">클러스터형 인덱스 구성하기</h4>
<ul>
<li>클러스터형 인덱스 : 루트페이지, 리프페이지로 구성됨</li>
<li>인덱스 페이지의 리프페이지 = 데이터 자체</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/f6c44edb-4cbf-459a-b250-9f0ca44877b4/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/b51260fc-ef38-4776-9b6a-97926894eb75/image.png" alt=""></p>
<h4 id="보조-인덱스-구성하기">보조 인덱스 구성하기</h4>
<ul>
<li>보조인덱스는 데이터페이지를 만들지 않음</li>
<li>리프페이지에 &quot;페이지번호+#위치&quot;를 기록함
<img src="https://velog.velcdn.com/images/study_record/post/0183da19-f165-4137-9bae-cdbd9ac7c4d0/image.png" alt=""></li>
</ul>
<h4 id="인덱스에서-검색하기">인덱스에서 검색하기</h4>
<ul>
<li>클러스터형 인덱스가 보조인덱스보다 빠름</li>
</ul>
<h4 id="06-3-인덱스-실제-사용">06-3 인덱스 실제 사용</h4>
<h5 id="인덱스-생성-1">인덱스 생성</h5>
<ul>
<li><p>CREATE INDEX로는 보조인덱스를 생성함</p>
<blockquote>
<p>CREATE [유니크] INDEX 인덱스 이름
ON 테이블 이름 (열이름) [오름차순|내림차순]</p>
</blockquote>
<ul>
<li>DATA_LENGTH : 클러스트 인덱스의 크기. Byte단위</li>
<li>INDEX_LENGTH : 보조인덱스 크기</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/659f601f-0b97-4d27-b574-2df6caf5e106/image.png" alt=""></p>
</li>
<li><p>NON_UNIQUE : 1은 중복 허용 함. 0은 중복 허용 안함
<img src="https://velog.velcdn.com/images/study_record/post/c06d588e-d9a1-4d30-8e29-de638d5e9bfb/image.png" alt=""></p>
</li>
<li><p>ANALYZE TABLE : 보조인덱스 적용을 위해 테이블 분석을 해야함
<img src="https://velog.velcdn.com/images/study_record/post/c47fc793-47b1-4f4d-a125-05150c3296f2/image.png" alt=""></p>
</li>
<li><p>CREATE UNIQUE INDEX ON : 고유보조 인덱스 생성. 중복없는 경우만 지정이 가능 but 현재 중복값이 없다고 지정하면 안됨
<img src="https://velog.velcdn.com/images/study_record/post/2ba78a97-7263-487a-afe9-f66cd759ba80/image.png" alt=""></p>
</li>
<li><p>중복데이터가 많은 열에 인덱스를 생성하는것은 성능만 나빠지게 함</p>
</li>
</ul>
<h5 id="인덱스-활용">인덱스 활용</h5>
<ul>
<li>single row / index range scan: 인덱스로 결과를 얻었다는 의미
<img src="https://velog.velcdn.com/images/study_record/post/a9d4b344-4d49-4c21-9010-6bc9b489e756/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/ceb9ab5c-e5fb-4d41-b3eb-c98a7ba255f8/image.png" alt=""></li>
<li>full table scan : 인덱스가 있어도 인덱스보다 전체 검색이 낫다고 MySQL이 판단할 경우 전체를 검색함
<img src="https://velog.velcdn.com/images/study_record/post/1633f4ee-eda5-4791-ab80-7ca25639eaa4/image.png" alt="">]</li>
<li>WHERE문 연산이 있을경우 인덱스를 사용하지 않음</li>
</ul>
<h5 id="인덱스-제거">인덱스 제거</h5>
<ul>
<li>기본키, 고유키로 생성된 인덱스는 &quot;DROP INDEX&quot;로 제거 못함 → ALTER TABLE문으로 제거해야함 <blockquote>
<p>DROP INDEX 인덱스 이름 ON 테이블 이름</p>
</blockquote>
</li>
</ul>
<ul>
<li><p>제거 순서 : 보조 인덱스 제거 → 클러스터형 인덱스 제거</p>
<p><img src="https://velog.velcdn.com/images/study_record/post/946a5000-a18b-4169-948a-5efe4b0c29be/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_4주]chapter05 테이블과 뷰]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s4%EC%A3%BCchapter05-%ED%85%8C%EC%9D%B4%EB%B8%94%EA%B3%BC-%EB%B7%B0</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s4%EC%A3%BCchapter05-%ED%85%8C%EC%9D%B4%EB%B8%94%EA%B3%BC-%EB%B7%B0</guid>
            <pubDate>Tue, 23 Jul 2024 07:09:04 GMT</pubDate>
            <description><![CDATA[<h2 id="4주차-진도🐥">4주차 진도🐥</h2>
<p><img src="https://velog.velcdn.com/images/study_record/post/d563acd1-8f5c-4020-bb83-1e20f8df7357/image.png" alt=""></p>
<h3 id="✨-기본미션">✨ 기본미션</h3>
<p>p.225 테이블 생성하고 p.229 데이터 입력하기 
<img src="https://velog.velcdn.com/images/study_record/post/f2e1ae0a-aef3-4157-b4e8-eadc52ddf38e/image.png" alt=""></p>
<h3 id="✨-추가미션">✨ 추가미션</h3>
<p>P.271 4번 문제 풀기
4. 다음의 기존 뷰가 있으면 덮어쓰고 없으면 생성하는 SQL입니다. 빈칸에 들어갈 내용은?  ** 정답(2)번 CREATE OR REPLACE VIEW**</p>
<blockquote>
<p>[              ] 뷰_이름
AS
    SELECT 문;</p>
</blockquote>
<p>1) CREATE AND REPLACE VIEW
2) CREATE OR REPLACE VIEW
3) CREATE AND OVERWRITE VIEW
4) CREATE OR OVWRWRITE VIEW</p>
<h3 id="📚공부">📚공부</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/c2bb9953-6194-4f65-800f-327e456e316c/image.png" alt=""></p>
<h4 id="05_1-테이블-만들기">05_1 테이블 만들기</h4>
<ul>
<li>테이블 : 행과열로 구성 / 행=로우=레코드 / 열=컬럼=필드</li>
</ul>
<h5 id="gui로-테이블-만들고-데이터입력하기">GUI로 테이블 만들고 데이터입력하기</h5>
<ul>
<li>member, buy 테이블 만들기
<img src="https://velog.velcdn.com/images/study_record/post/f7a325bc-1757-4a22-bb18-108678b521e0/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/a9f343f8-28c2-43a8-b0ff-167e70db3ee5/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/5043254a-0014-43df-9aa4-edfceac590f7/image.png" alt=""></li>
<li>member, buy 테이블에 데이터 입력하기 
<img src="https://velog.velcdn.com/images/study_record/post/6142e01b-9235-4c11-91b3-1ae9a47ba7d3/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/b5910336-e7f0-4656-ab76-65ce850d1a4a/image.png" alt=""></li>
</ul>
<h6 id="sql로-테이블-만들기">SQL로 테이블 만들기</h6>
<ul>
<li>member 테이블 만들기
<img src="https://velog.velcdn.com/images/study_record/post/557a9f52-4bcc-4299-b4ae-ab66f3364859/image.png" alt=""></li>
<li>buy 테이블 만들기
<img src="https://velog.velcdn.com/images/study_record/post/4c5875d4-b600-4e7f-8ee1-7420ffd293dd/image.png" alt=""></li>
</ul>
<h5 id="sql로-데이터-입력하기">SQL로 데이터 입력하기</h5>
<p><img src="https://velog.velcdn.com/images/study_record/post/6901e5dd-a471-4789-b1ac-4152e072c746/image.png" alt=""></p>
<h4 id="05_2-제약조건으로-테이블-견고하게">05_2 제약조건으로 테이블 견고하게</h4>
<ul>
<li>제약조건의 개념 : 데이터의 무결성을 지키기 위한 제한조건을 의미함<ul>
<li>데이터 무결성 : 데이터에 결함이 없음을 의미함</li>
</ul>
</li>
<li>MySQL 제약조건 종류<ul>
<li>PRRIMARY KEY 제약조건</li>
<li>FOREIGN KEY 제약조건</li>
<li>UNIQUE 제약조건</li>
<li>CHECK 제약조건</li>
<li>DEFAULT 제약조건</li>
<li>NULL 제약조건</li>
</ul>
</li>
<li>PRRIMARY KEY 제약조건<ul>
<li>기본키 : 데이터를 구분할수있는 식별자 </li>
<li>중복없고 NULL값은 없음</li>
<li>키본키로 생성하면 자동으로 클러스트형 인덱스가 생성됨</li>
<li>테이블은 기본키를 1개만 있음</li>
<li>creat tabale 기본키 설정방법은 2개가 있음
<img src="https://velog.velcdn.com/images/study_record/post/ccd665cc-6af7-41bc-a713-e50aad1a5775/image.png" alt=""></li>
<li>alter table 기본키 설정방법
<img src="https://velog.velcdn.com/images/study_record/post/a2075126-ce90-4442-944a-43020143cf97/image.png" alt=""></li>
<li>기본키 이름 지정 
<img src="https://velog.velcdn.com/images/study_record/post/128c9173-103d-4e5f-9559-c952ae1450bc/image.png" alt=""></li>
<li>기본키-외래키로 지정된 테이블은 외래키로 설정된 테이블을 먼저 drop하고  기본키 테이블을 drop해야 함</li>
</ul>
</li>
<li>FOREIGN KEY 제약조건<ul>
<li>두 테이블 사이의 관계를 연결해주고 데이터 무결성을 보장해주는 역할을 함</li>
<li>기준테이블(기본키)-참조테이블(외래키)</li>
<li>참조하는 기준테이블의 열은 반드시 기본키, 고유키로 설정해야함 </li>
<li>create table 외래키 설정 방법
<img src="https://velog.velcdn.com/images/study_record/post/7c31c78d-0b13-4ce6-a069-ea33b62488b4/image.png" alt=""></li>
<li>alter table 외래키 설정방법
<img src="https://velog.velcdn.com/images/study_record/post/66dddce5-7da4-4a43-a894-67c2cb0ae234/image.png" alt=""></li>
<li>기본키-외래키 설정후 기준테이블 열이름 변경이나 테이블 삭제가 안됨 </li>
<li>on update cascade : 기분테이블 열 이름 변경시 참조테이블 열이름 자동 변경해주는 옵션
<img src="https://velog.velcdn.com/images/study_record/post/3ae0ebd6-e560-41f9-9566-b03d75f82532/image.png" alt=""></li>
</ul>
</li>
</ul>
<ul>
<li><p>on delete cascade : 기준테이블이 삭제되면 참조테이블 데이터가 삭제되는 기능
<img src="https://velog.velcdn.com/images/study_record/post/391ca32a-4894-406e-8676-896614379a87/image.png" alt=""></p>
<ul>
<li><p>UNIQUE 제약조건</p>
</li>
<li><p>중복되지 않는 유일한 값을 입력해야 하는 조건</p>
</li>
<li><p>NULL이 허용됨</p>
</li>
<li><p>테이블에 여러개 고유키 설정이 가능함
<img src="https://velog.velcdn.com/images/study_record/post/36d9a047-ee46-42db-a472-86c6ec78539e/image.png" alt=""></p>
</li>
<li><p>CHECK 제약조건</p>
</li>
<li><p>입력되는 데이터를 점검하는 기능 
<img src="https://velog.velcdn.com/images/study_record/post/040b67c6-fb89-4b75-8d95-cb579cd5c43c/image.png" alt=""></p>
</li>
<li><p>DEFAULT 제약조건</p>
</li>
<li><p>값을 입력하지 않았을때 자동으로 입력될 값을 정해놓는것
<img src="https://velog.velcdn.com/images/study_record/post/cdb257d2-9a27-40ea-8048-e80a5da3b51a/image.png" alt=""></p>
</li>
<li><p>NULL 제약조건</p>
</li>
<li><p>널값 허용 : NULL</p>
</li>
<li><p>널값 허용하지 않음 :NOT NULL </p>
</li>
</ul>
</li>
</ul>
<h4 id="05_3-가상테이블뷰">05_3 가상테이블:뷰</h4>
<ul>
<li><p>뷰 </p>
<ul>
<li>데이터베이스 개채중 하나</li>
<li>데이터를 가지고 있지 않음</li>
<li>SELECT 문으로 만들고 결과가 출력됨</li>
</ul>
</li>
<li><p>뷰 생성</p>
<blockquote>
<p><strong>CREATE VIEW</strong> 뷰이름</p>
</blockquote>
</li>
<li><p><em>AS*</em> 
   <strong>SELECT</strong> select문</p>
<p> <img src="https://velog.velcdn.com/images/study_record/post/7607ded1-183b-42ff-b735-f4020f86e4c4/image.png" alt=""></p>
<ul>
<li><p>기존 뷰가 있을때 덮어쓰고 생성</p>
<blockquote>
<p>  <strong>CREATE OR REPLACE VIEW</strong> 뷰이름
<strong>AS</strong> 
 <strong>SELECT</strong> select문</p>
</blockquote>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>뷰를 사용하는 이유</p>
<ul>
<li>보안을 지킬수 있음 : 중요한 개인정보를 제외시키고 작업할수 있다</li>
<li>복잡한 SQL을 단순하게 만듦 </li>
</ul>
</li>
<li><p>단순뷰 : 하나의 테이블로 만든 뷰 </p>
</li>
<li><p>복합뷰 : 두개 이상의 테이블로 만든 뷰 / 읽기 전용 / 두 테이블을 조인한 결과를 뷰로 만들때 사용</p>
</li>
<li><p>뷰의 작동</p>
<ul>
<li><p>뷰 생성시 테이블이름 별칭 작성 가능(한글, 띄어쓰기 가능)</p>
</li>
<li><p>뷰 조회시 백틱 사용(`)
<img src="https://velog.velcdn.com/images/study_record/post/43fac149-575b-456f-818f-0db3b7605578/image.png" alt=""></p>
</li>
<li><p>뷰 수정 : ALTER VIEW
<img src="https://velog.velcdn.com/images/study_record/post/80f08259-e5e5-48fa-9be2-49ed4710232f/image.png" alt=""></p>
</li>
<li><p>뷰 삭제 : DROP VIEW </p>
<blockquote>
<p>DROP VIEW v_viewtest1</p>
</blockquote>
</li>
<li><p>뷰 정보확인 : DESCRIBE 
  기본키 정보는 확인 되지 않음
<img src="https://velog.velcdn.com/images/study_record/post/41a320c6-ec66-4f19-8fd7-c8dcd2c5756b/image.png" alt=""></p>
</li>
<li><p>뷰의 소스코드 확인
<img src="https://velog.velcdn.com/images/study_record/post/af85eace-655a-4030-a8fd-216516e9ae77/image.png" alt=""></p>
</li>
<li><p>뷰를 통한 데이터 수정 
<img src="https://velog.velcdn.com/images/study_record/post/b964a730-e0b4-47d6-bbce-d8f4d611578d/image.png" alt=""></p>
</li>
<li><p>지정한 범위로 뷰 생성
<img src="https://velog.velcdn.com/images/study_record/post/392aaeaf-e10a-4778-8b42-877c5d1b6014/image.png" alt=""></p>
</li>
<li><p>뷰를 통한 데이터 삭제 
<img src="https://velog.velcdn.com/images/study_record/post/8b442c66-8507-4848-8e78-b9af847cb1c5/image.png" alt=""></p>
</li>
<li><p>뷰를 통한 데이터 입력 : 뷰에 보이이지 않는 테이블에 NOT NULL이 없어야 함
  WITH CHECK OPTION을 사용해서 설정값에 벗어는 값을 입력되지 않게함
<img src="https://velog.velcdn.com/images/study_record/post/473d6f27-1ab8-4937-a060-b87c4ad3deb5/image.png" alt=""></p>
</li>
<li><p>뷰가 참조하는 테이블 삭제</p>
<blockquote>
<p>  <strong>DROP TABLE IF EXISTS</strong> 테이블이름</p>
</blockquote>
</li>
<li><p>기존 뷰 덮어쓰는 기능</p>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_3주]chapter04 SQL고급 문법]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s3%EC%A3%BCchapter04-SQL%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s3%EC%A3%BCchapter04-SQL%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95</guid>
            <pubDate>Tue, 16 Jul 2024 01:23:31 GMT</pubDate>
            <description><![CDATA[<h2 id="3주차-진도🐥">3주차 진도🐥</h2>
<p><img src="https://velog.velcdn.com/images/study_record/post/e6a52ab3-64f9-4b22-900a-6e16970787bf/image.png" alt=""></p>
<h3 id="✨기본미션✨">✨기본미션✨</h3>
<p>P.195 4번</p>
<blockquote>
<p>문제
SELECT DISTINCT M.mem_id, B.prod_name, M.mem_name, M.addr
FROM memeber M
LEFT OUTER JOIN buy B
ON M.mem_id = B.mem_id
[                      ]
ORDER BY M.mem_id</p>
</blockquote>
<p>정답 <strong>4번 WHERE B.prod_name IS NULL</strong></p>
<h3 id="✨추가미션✨">✨추가미션✨</h3>
<p>p.184 손코딩 실행하고 결과 캡처
<img src="https://velog.velcdn.com/images/study_record/post/3beb567a-24bc-4f90-8d1c-78064f423bf4/image.png" alt=""></p>
<h3 id="공부📚">공부📚</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/6fb4b353-a7ec-48fc-8344-1ddd21f4de91/image.png" alt=""></p>
<h3 id="04-1-mysql의-데이터형식">04-1 MySQL의 데이터형식</h3>
<ul>
<li><p>데이터형식</p>
<ul>
<li>정수형 : 소수점이 없는 숫자 / 연산에 의미가 있고 순서에 의미가 있을때 사용</li>
</ul>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center">TINYINT</th>
<th align="center">SMALLINT</th>
<th align="center">INT</th>
<th align="center">BIGINT</th>
</tr>
</thead>
<tbody><tr>
<td align="center">바이트수</td>
<td align="center">1</td>
<td align="center">2</td>
<td align="center">4</td>
<td align="center">8</td>
</tr>
<tr>
<td align="center">표현할수 있는 숫자</td>
<td align="center">127</td>
<td align="center">32767</td>
<td align="center">21억</td>
<td align="center">900경</td>
</tr>
<tr>
<td align="center"><img src="https://velog.velcdn.com/images/study_record/post/b8970c48-0c23-4ed8-84be-d3b4b688db27/image.png" alt=""></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center">UNSIGNED : 1바이트 크기를 표시함 (0~255)</td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center"><img src="https://velog.velcdn.com/images/study_record/post/a9b3735a-d287-4d77-b619-048f736caadc/image.png" alt=""></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody></table>
<ul>
<li>문자형 </li>
</ul>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center">CHAR(숫자)</th>
<th align="center">VARCHAR(숫자)</th>
</tr>
</thead>
<tbody><tr>
<td align="center">바이트수</td>
<td align="center">1~255</td>
<td align="center">1~16383</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">고정 길이 문자형</td>
<td align="center">가변 길이 문자형</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">내부적으로 성능이 좋음</td>
<td align="center">공간을 효율적으로 사용 가능</td>
</tr>
<tr>
<td align="center">예시</td>
<td align="center">CHAR(6) 가나다OOO</td>
<td align="center">VARCHAR(6)가나다</td>
</tr>
<tr>
<td align="center"><img src="https://velog.velcdn.com/images/study_record/post/67ebb725-414e-4fff-9229-70733292398e/image.png" alt=""></td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center">* 실수형</td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center">소수점이 있는 숫자 저장할때 사용</td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center">FLOAT</th>
<th align="center">DOUBLE</th>
</tr>
</thead>
<tbody><tr>
<td align="center">바이트수</td>
<td align="center">4(소수점아래 7자리)</td>
<td align="center">8(소수점아래 15자리)</td>
</tr>
<tr>
<td align="center">* 날짜형</td>
<td align="center"></td>
<td align="center"></td>
</tr>
<tr>
<td align="center">날짜와 시간을 입력할때는 작은따음표를 묶어서 써줘야함</td>
<td align="center"></td>
<td align="center"></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th></th>
<th>DATE</th>
<th>TIME</th>
<th>DATETIME</th>
</tr>
</thead>
<tbody><tr>
<td>바이트수</td>
<td>3</td>
<td>3</td>
<td>3</td>
</tr>
<tr>
<td></td>
<td>날짜만 저장</td>
<td>시간만 저장</td>
<td>날짜, 시간저장</td>
</tr>
<tr>
<td>형식</td>
<td>YYYY-MM-DD</td>
<td>HH:MM:SS</td>
<td>YYYY-MM-DD HH:MM:SS</td>
</tr>
<tr>
<td>* 대량데이터 형식</td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">TEXT형식</th>
<th align="center">TEXT</th>
<th align="center">LONGTEXT</th>
<th align="center"></th>
</tr>
</thead>
<tbody><tr>
<td align="center">바이트수</td>
<td align="center">1~65535</td>
<td align="center">1~4294967295</td>
<td align="center">소설, 영화 대본 저장</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">BLOB형식</th>
<th align="center">BLOB</th>
<th align="center">LONGBLOB</th>
<th align="center"></th>
</tr>
</thead>
<tbody><tr>
<td align="center">바이트수</td>
<td align="center">1~65535</td>
<td align="center">1~4294967295</td>
<td align="center">이미지, 동영상 저장</td>
</tr>
</tbody></table>
<p> <img src="https://velog.velcdn.com/images/study_record/post/def6a3db-9cf8-40e2-8f74-45aeb7f28fcd/image.png" alt=""></p>
</li>
</ul>
<ul>
<li><p>변수의 사용
변수는 워크벤치를 종료하면 없어는 임시
변수선언 방법</p>
<blockquote>
<p>SET @변수이름 = 변수값  -- 변수선언 및 값 넣기
SELECT @변수이름   -- 변수 값 출력</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/3da9dd3a-cb97-4794-a834-b61c91b4e714/image.png" alt="">
 LIMIT에 변수사용하지 못함 -&gt; PREPARE, EXECUTE를 사용함
<img src="https://velog.velcdn.com/images/study_record/post/ae214c7e-1ec7-4e85-b74b-958b809ac1b3/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/7e5ca25d-c7e8-40d7-9f91-65e8aa805d42/image.png" alt=""></p>
</li>
<li><p>데이터 형 변환
형변환은 문자형→정수형 또는 정수형→문자형 바꾸는것</p>
<table>
<thead>
<tr>
<th align="center">명시적 변환</th>
<th align="center">암시적변환</th>
</tr>
</thead>
<tbody><tr>
<td align="center">함수를 이용해서 변환</td>
<td align="center">자연스럽게 변환</td>
</tr>
</tbody></table>
</li>
</ul>
<ul>
<li>명시적 변환
CAST 또는 CONVERT 사용
함수에 쓸수있는 데이터형식: CHAR, SIGNED(부호있는 정수), UNSIGNEDSIGNED(부호없는 정수), DATE, TIME, DATETIME<blockquote>
<p>CAST (값 AS 데이터 형식 [길이])
CONVERT(값, 데이터 형식[길이])</p>
</blockquote>
</li>
</ul>
<p>   <img src="https://velog.velcdn.com/images/study_record/post/1579e9fb-7e3a-4288-8de2-752c3cbdf0cb/image.png" alt="">
    날짜형으로 병경하기
    <img src="https://velog.velcdn.com/images/study_record/post/71f5a646-c2a2-4440-b63c-2ec0188a4a41/image.png" alt="">
   결과를 원하는 형태로 변경하기
<img src="https://velog.velcdn.com/images/study_record/post/6d095182-d313-4df3-ad20-bf8b6b3fe70c/image.png" alt=""></p>
<ul>
<li>암시적 변환
문자+문자 = 숫자
<img src="https://velog.velcdn.com/images/study_record/post/2cab3645-cf24-4f52-bbfd-756410690647/image.png" alt="">
CONCAT(문자,문자) = 문자문자
<img src="https://velog.velcdn.com/images/study_record/post/7d9298ca-895c-48c3-9640-4151d3ca41bf/image.png" alt="">
CONCAT(숫자, 문자) = 문자문자
<img src="https://velog.velcdn.com/images/study_record/post/8358822a-05bd-45db-ad8a-9355a6158477/image.png" alt="">
숫자+문자 = 숫자
<img src="https://velog.velcdn.com/images/study_record/post/5ff0b19a-6e78-4f2e-a3e6-6546d7b2120b/image.png" alt=""></li>
</ul>
<h3 id="04-2-두-테이블을-묶는-조인">04-2 두 테이블을 묶는 조인</h3>
<h4 id="내부조인">내부조인</h4>
<ul>
<li><p>일대다 관계(one to many/PK-FK관계)
한쪽 테이블에는 하나의 값이 있고 연결된 테이블에는 여러개의 값이 있는 관계
기본키, 외래키 관계를 가지고 있음</p>
<blockquote>
<p>SELECT 열 
  FROM 첫번째 테이블</p>
<pre><code>INNER JOIN 두번째 테이블
ON 조인할 조건 -- 두개 테이블에 같은 이름의 열이 있으면 &lt;테이블이름.열이름&gt;으로 표기해야함 </code></pre><p>  [WHERE 검색조건] </p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/f5b03d4f-114c-4d24-931c-f7a5dba7d8f3/image.png" alt=""><br>조인하는 두 테이블의 열이름이 같은것이 있으면 테이블이름까지 적어야 오류가 안생김
<img src="https://velog.velcdn.com/images/study_record/post/6864a8aa-3dad-4bb0-acaf-3858adf7e8fd/image.png" alt="">
테이블이름의 별칭을 사용하기<br><img src="https://velog.velcdn.com/images/study_record/post/4b050dbc-27d8-4796-8287-fa4d61969583/image.png" alt="">
내부조인은 양쪽테이블에 모두 내용이 있는것만 조인된다 
(외부조인은 한쪽 테이블에 내용이 있어도 조인함)
<img src="https://velog.velcdn.com/images/study_record/post/1a090514-13f0-436d-85a2-6a0e6aada461/image.png" alt="">
결과의 중복을 제거하기 싶을때는 DISTINCT 사용하기
<img src="https://velog.velcdn.com/images/study_record/post/0adc179a-474f-4768-8fb7-9daa78ee58a8/image.png" alt=""></p>
</li>
</ul>
<h4 id="외부조인">외부조인</h4>
<ul>
<li><p>외부조인:  한쪽 테이블에만 데이터가 있어도 결과가 나오는 조인</p>
<blockquote>
<p>SELECT 열
FROM 첫번째 테이블(LEFT 테이블)
LEFT|RIGHT|FULL OUTER JOIN 두번째테이블(RIGHT 테이블)
ON 조인될 조건
[WHERE 검색 조건]</p>
</blockquote>
<p>LEFT OUTER JOIN : 왼쪽테이블의 내용을 모두 출력해라
<img src="https://velog.velcdn.com/images/study_record/post/8ffc003b-8055-42ef-af85-17e882d957ee/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/aa4a5c13-c510-4dff-af55-0757a89517ce/image.png" alt=""></p>
<p>FULL OUTER JOIN : 왼쪽 외부조인, 오른쪽 외부조인을 합친것. 자주사용하지 않음</p>
</li>
</ul>
<h4 id="상호조인cross-join">상호조인(CROSS JOIN)</h4>
<ul>
<li><p>상호조인: 한쪽 테이블과 모든 행과 다른 테이블의 모든 행을 조인 하는것</p>
<ul>
<li>ON구문을 사용하지 않음</li>
<li>결과가 의미가 없음</li>
<li>상호조인은 테스트를 위한 대용량 데이터를 만들때 사용함</li>
</ul>
</li>
<li><p>SELECT TABLE ~ SELECT : 대용량 데이터를 만들 때 사용함
<img src="https://velog.velcdn.com/images/study_record/post/c64c36dc-704b-4394-97ed-4094816a4a86/image.png" alt=""></p>
</li>
<li><p>자체조인: 자신과 조인하는 것. 1개 테이블로 조인함. 실무에서 많이 사용하지 않음</p>
<blockquote>
<p>SELECT 열 목록
FROM 테이블 별칭A
INNER JOIN 테이블 별칭B
ON 조인조건
[WHERE 검색조건]</p>
</blockquote>
<p>하나의 테이블을 각각 별칭을 지정해서 조인함
<img src="https://velog.velcdn.com/images/study_record/post/73e7c087-4576-44e9-87d2-404169899ce0/image.png" alt=""></p>
</li>
</ul>
<h3 id="04-3-sql프로그래밍">04-3 SQL프로그래밍</h3>
<ul>
<li>MySQL에서 프로그래밍기능이 필요할때는 스토어드 프로시저안에서 만든다 </li>
<li>스토어드 프로시저 구조
스토어드 프로시저의 끝은 &#39;$$&#39;으로 구분한다<blockquote>
<p> DELIMITER $$ 
CREATE PROCEDURE  스토어드 프로시저 이름()
BEGIN SQL프로그래밍 코딩<br>END $$ -- 스토어드 프로시저 종료
DELIMITER; 
CALL 스토어드 프로시저 이름() -- 스토어드 프로시저 실행</p>
</blockquote>
</li>
</ul>
<ul>
<li><p>IF문
<img src="https://velog.velcdn.com/images/study_record/post/a4b73acb-ffe3-4be3-aac5-71d07b47b441/image.png" alt=""></p>
</li>
<li><p>IF ~ ELSE문
조건이 참일때와 참이 아닐때 실행하는 문장이 다름
<img src="https://velog.velcdn.com/images/study_record/post/b1a1ecfa-0f49-487e-866b-559db0144cdc/image.png" alt="">
SELECT ~ INTO : 결과를 변수에 저장할때 사용
<img src="https://velog.velcdn.com/images/study_record/post/79ed1a76-9165-4c14-9d8d-3f9833a808de/image.png" alt=""></p>
</li>
<li><p>CASE문
다중 분기에 사용함</p>
<blockquote>
<p>CASE 
  WHEN 조건1 THEN SQL문장1
  WHEN 조건2 THEN SQL문장2
  WHEN 조건3 THEN SQL문장3
  ELSE SQL문장4
  END CASE;</p>
</blockquote>
<p> <img src="https://velog.velcdn.com/images/study_record/post/24ad1bc9-707a-4dd0-a1ae-4ed0b6013a07/image.png" alt="">
CASE-END와 INNER JOIN같이 써서 등급을 구함<br><img src="https://velog.velcdn.com/images/study_record/post/eca47e76-0129-4d20-aec5-cce5b8573d0f/image.png" alt=""></p>
</li>
</ul>
<ul>
<li><p>WHILE문
조건문이 참인동안 &lt;SQL문&gt;을 반복한다</p>
<blockquote>
<p>WHILE 조건식 DO
&lt;SQL문&gt;
END WHILE ;</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/e9f030ae-6e51-40e7-9b84-28e055b5fecb/image.png" alt="">
ITERATE[레이블] : 지정한 레이블의 계속진행함 /CONTINUE와 비슷
LEAVE[레이블] : 지정한 레이블을 종료함 /BREAK와 비슷
<img src="https://velog.velcdn.com/images/study_record/post/f664b9f0-75ea-4ae2-ab63-284e3bc26e08/image.png" alt=""></p>
</li>
<li><p>동적SQL
내용변경이 필요할때 동적SQL문을 사용해서 변경함 
PREPARE : SQL문을 미리 준비합(실행X)
EXECUTE : SQL문을 실해함
DEALLOCATE PREPARE: SQL문을 해제 함</p>
<p>기본형태
<img src="https://velog.velcdn.com/images/study_record/post/80b9786e-ce6e-42ba-a2fb-481931dfb366/image.png" alt="">
현재시간 이용해서 출입기록 SQL문 만들기
<img src="https://velog.velcdn.com/images/study_record/post/7962d0da-d643-4cd5-abed-cd2feb719959/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_2주]chapter03 SQL기본 문법]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s2%EC%A3%BCchapter03-SQL%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s2%EC%A3%BCchapter03-SQL%EA%B8%B0%EB%B3%B8-%EB%AC%B8%EB%B2%95</guid>
            <pubDate>Sun, 14 Jul 2024 02:11:58 GMT</pubDate>
            <description><![CDATA[<h2 id="2주차-진도🐥">2주차 진도🐥</h2>
<p><img src="https://velog.velcdn.com/images/study_record/post/ddab2a4f-aaa7-42ed-8c8c-734eaaba9e6f/image.png" alt=""></p>
<h3 id="✨기본숙제✨">✨기본숙제✨</h3>
<h5 id="p138-2번문제-빈칸에-알맞은것-쓰기">P.138 2번문제 빈칸에 알맞은것 쓰기</h5>
<p>1) SELECT * FROM member [<strong>ORDER BY</strong>] height
2) SELECT * FROM member [<strong>LIMIT</strong>] 5,2
3) SELECT [<strong>DISTINCT</strong>]  phone1 FROM member</p>
<h3 id="✨추가숙제✨">✨추가숙제✨</h3>
<h5 id="데이터-입력-기본형식">데이터 입력 기본형식</h5>
<blockquote>
<p>INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)</p>
</blockquote>
<blockquote>
<p>데이터 여러개 입력할때 사용 
 INSERT INTO 테이블이름 VALUES (값1, 값2..), (값3, 값4..), (값5, 값6.. );</p>
</blockquote>
<h5 id="데이터-삭제-기본형식">데이터 삭제 기본형식</h5>
<blockquote>
<p>DELET FROM 테이블이름 WHERE 조건;</p>
</blockquote>
<h3 id="📚정리">📚정리</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/a4dfd325-1a2e-465c-b85c-1e566f0e9eba/image.png" alt=""></p>
<h3 id="03-1-select--from--where">03-1 SELECT ~ FROM ~ WHERE</h3>
<h4 id="실습용-데이터베이스-구축하기">실습용 데이터베이스 구축하기</h4>
<p>1) 예제파일 워크벤치로 열기
<del>sql파일이 왜 pdf로 연결되있는지 모르겠지만 저 파일 맞음</del>
<img src="https://velog.velcdn.com/images/study_record/post/6798142b-72b7-4bbc-ab1c-8aac39463d74/image.png" alt="">
2) result grid 창에서  member1과 buy 확인하기
<img src="https://velog.velcdn.com/images/study_record/post/8b724ede-40ca-4ad8-ba9d-94d248bb1c5b/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/409c1cc0-d87c-4dd3-8354-490eef127922/image.png" alt=""></p>
<h4 id="파일-내용-확인해보기">파일 내용 확인해보기</h4>
<ul>
<li>데이터베이스 만들기 <ul>
<li>DROP DATABASE : 데이터 베이스 삭제하기 </li>
<li>CREAT DATABASE : 데이터베이스 만들기  </li>
</ul>
</li>
</ul>
<blockquote>
<p>DROP DATABASE IF EXISTS 파일이름 
CREAT DATABASE 파일이름</p>
</blockquote>
<ul>
<li>회원테이블 만들기<ul>
<li>USE : 데이터베이스 선택 </li>
<li>VARXHAR : 입력데이터를 문자입력 지정</li>
<li>--^주석을 쓰자: 주석쓰고 싶을때 하이픈 두개(--) 쓰고 한칸 띄우고 쓴다</li>
</ul>
</li>
</ul>
<blockquote>
<p>USE market_db;
CREATE TABLE member -- 회원 테이블
( mem_id          CHAR(8) NOT NULL PRIMARY KEY, -- 사용자 아이디(PK)
  mem_name        VARCHAR(10) NOT NULL, -- 이름
  mem_number    INT NOT NULL,  -- 인원수
  addr              CHAR(2) NOT NULL, -- 지역(경기,서울,경남 식으로 2글자만입력)
  phone1        CHAR(3), -- 연락처의 국번(02, 031, 055 등)
  phone2        CHAR(8), -- 연락처의 나머지 전화번호(하이픈제외)
  height        SMALLINT,  -- 평균 키
  debut_date    DATE  -- 데뷔 일자
);</p>
</blockquote>
<ul>
<li>구매 테이블 만들기<ul>
<li>AUTO_INCREMENT : 숫자를 자동으로 입력된다 </li>
<li>FOREIGN KEY : 외래키 지정</li>
</ul>
</li>
</ul>
<blockquote>
<p>CREATE TABLE buy -- 구매 테이블
(  num         INT AUTO_INCREMENT NOT NULL PRIMARY KEY, -- 순번(PK)
   mem_id      CHAR(8) NOT NULL, -- 아이디(FK)
   prod_name     CHAR(6) NOT NULL, --  제품이름
   group_name     CHAR(4)  , -- 분류
   price         INT  NOT NULL, -- 가격
   amount        SMALLINT  NOT NULL, -- 수량
   FOREIGN KEY (mem_id) REFERENCES member(mem_id)
);</p>
</blockquote>
<ul>
<li>데이터 입력하기 <ul>
<li>INSERT : 각 테이블에 값을 입력할때 사용함. CHRA, VARCHAR, DATE형은 데이터를 입력할때 작은따음표를 같이 써야한다. INT형은 작은따음표 없이 쓰면된다</li>
<li>NULL : 여기서 NULL은 [AUTO_INCREMENT]로 숫자가 자동입력되는 곳이라서 NULL을 입력했음 </li>
</ul>
</li>
</ul>
<blockquote>
<p>INSERT INTO member VALUES(&#39;TWC&#39;, &#39;트와이스&#39;, 9, &#39;서울&#39;, &#39;02&#39;, &#39;11111111&#39;, 167, &#39;2015.10.19&#39;);
INSERT INTO buy VALUES(NULL, &#39;BLK&#39;, &#39;지갑&#39;, NULL, 30, 2);</p>
</blockquote>
<ul>
<li>데이터 조회하기<ul>
<li>SELECT : 데이터 조회문</li>
</ul>
</li>
</ul>
<blockquote>
<p>SELECT * FROM member;
SELECT * FROM buy;</p>
</blockquote>
<h4 id="조회하기">조회하기</h4>
<ul>
<li><p>USE 데이터베이스이름 </p>
<ul>
<li>사용할 데이터베이스 선택하기. SELECT 실행전에 써야함. </li>
<li>다른 USE문을 쓰지 않으면 처음 쓴 USE문 데이터베이스에서 계속 쿼리를 실항하게 된다 </li>
<li>쿼리창, 워크벤치를 다시시작할때는 다시 실행해야 함</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/bc821357-0640-4daa-89eb-36a05da87e07/image.png" alt=""></p>
</li>
<li><p>SELECT문 기본 
<img src="https://velog.velcdn.com/images/study_record/post/f73beebd-b003-4137-8c04-877732f89480/image.png" alt=""></p>
</li>
<li><p>SELECT, FROM 문</p>
<ul>
<li>SELECT : 테이블에서 데이터를 가져와라</li>
<li>[*] : 모든 것</li>
<li>FROM 테이블이름 : 테이블 데이터를 가져와라</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/f49c4f34-d11a-4576-b8aa-0369aedbdbfa/image.png" alt=""></p>
</li>
<li><p>SELECT 열이름 : 특정열만 가져오기 
![] (<a href="https://velog.velcdn.com/images/study_record/post/fa553fdd-8d71-427d-8d66-11a7ebb75ca4/image.png">https://velog.velcdn.com/images/study_record/post/fa553fdd-8d71-427d-8d66-11a7ebb75ca4/image.png</a>)</p>
</li>
</ul>
<p> <img src="https://velog.velcdn.com/images/study_record/post/451d1658-8ec1-4462-aaf2-1ba327e630ab/image.png" alt=""></p>
<ul>
<li>SELECT 열이름 순서대로 결과가 나옴
<img src="https://velog.velcdn.com/images/study_record/post/08f3b584-b95a-4f3e-986c-bddb645597d3/image.png" alt=""></li>
</ul>
<ul>
<li><p>SELECT문의 원칙은 &quot;데이터베이스이름.테이블이름&quot; 으로 써야 한다. USE문을 먼저쓰는 경우 데이터베이스가 선택되서 같은 결과가 나옴 
<img src="https://velog.velcdn.com/images/study_record/post/2159c55b-7805-4187-b5b4-d6696a778d55/image.png" alt=""></p>
</li>
<li><p>열 이름 별칭 지정하기 
열 이름 [별칭] 순서로 쓰면 결과에 별칭으로 나옴 
별칭에 공백이 있을때 큰따음표를 써주면 됨
 <img src="https://velog.velcdn.com/images/study_record/post/d5ad8c15-44b2-4578-9f73-ec3ec33863be/image.png" alt=""></p>
</li>
</ul>
<h4 id="특정-조건만-조회하기">특정 조건만 조회하기</h4>
<ul>
<li><p>WHERE 없이 조회하면 데이터가 많을때 어려움 </p>
</li>
<li><p>기본 WHERE절</p>
<blockquote>
<p>  SELECT 열이름 FROM 테이블이름 WHRER 조건식</p>
</blockquote>
</li>
<li><p>문자형 검색시 작은따음표 사용
<img src="https://velog.velcdn.com/images/study_record/post/be72b901-743d-41f4-a5ad-47b6f4eab864/image.png" alt=""></p>
</li>
<li><p>숫자형 검색시 그대로 입력
<img src="https://velog.velcdn.com/images/study_record/post/1dcc001b-6ecb-43f5-b4b4-495c220b2557/image.png" alt=""></p>
</li>
<li><p>관계연산자 사용 
숫자데이터는 관계연산자(작거나 같다)를 사용해서 검색할수 있음
<img src="https://velog.velcdn.com/images/study_record/post/4e251228-5576-4475-9746-3d3904870642/image.png" alt=""></p>
</li>
<li><p>논리연산자 
논리연산자(AND, OR)사용해서 조회하기
<img src="https://velog.velcdn.com/images/study_record/post/bbb84eac-51f5-45e1-9772-1b51f20e9af0/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/3d3def5c-28f8-4355-ba24-80b028d90ed5/image.png" alt=""></p>
</li>
<li><p>BETWEEB~AND
숫자 범위가 있는 값을 구하는 경우에 사용 
<img src="https://velog.velcdn.com/images/study_record/post/895f9e55-9a8d-4cce-963f-a7404b308f9c/image.png" alt=""></p>
</li>
<li><p>IN
문자형 데이터에서 검색하고싶은 문자형은 OR 이나 IN 을 사용해서 여러개를 검색하면 된다
<img src="https://velog.velcdn.com/images/study_record/post/de24ea1d-967e-426a-b3ba-06c19a700272/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/3c1cb847-0a6b-40a5-9633-f0d215d3e9ae/image.png" alt=""></p>
</li>
<li><p>LIKE
문자열의 일부를 검색할때 사용한다 
[%]는 검색하기 원하는 글자외에 아무글자나 와도 괜찮을때 사용한다 EX) [우%] 는 &#39;우&#39; 뒤에 아무 글자나 와도 된다는 의미 
<img src="https://velog.velcdn.com/images/study_record/post/6133d9c4-d960-4af1-aab8-77140491adf9/image.png" alt=""></p>
<p>[_] 를 사용하면 한 글자와 매치하여 검색한다
<img src="https://velog.velcdn.com/images/study_record/post/b0394251-697d-4571-bf07-8bee6846c719/image.png" alt=""></p>
</li>
<li><p>서브쿼리
SELECT 안에 다른 SELECT문을 서브쿼리라고 함
<img src="https://velog.velcdn.com/images/study_record/post/7ab0a330-08cf-42d4-b88d-fa44700ce5cd/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/fbac2df9-c689-4ca3-8ca1-4b033b737993/image.png" alt=""></p>
</li>
</ul>
<h3 id="03-2-깊게-보는-select문">03-2 깊게 보는 SELECT문</h3>
<h4 id="order-by-절">ORDER BY 절</h4>
<ul>
<li><p>ORDER BY 
결과가 출력되는 순서를 조절해줌 
기본값은 ASC(오름차순) / DESC(내림차순) 필요할경우 써줘야 함 
<img src="https://velog.velcdn.com/images/study_record/post/c22f8b20-5d6a-4cca-a92e-06d7eda92e6e/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/1fcbce72-7b8b-4853-96ad-d0aa62bf1faf/image.png" alt=""></p>
</li>
<li><p>OREDER BY와 WHERE절 순서
WHERE절 다음에 OREDER BY절을 적어야 한다
<img src="https://velog.velcdn.com/images/study_record/post/2db0ec7d-9822-4482-8aec-40715930a3ee/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/8f9d6386-525e-4a47-94d1-0590dc6bb46a/image.png" alt=""></p>
</li>
<li><p>정렬 기준 여러개일 경우 
첫번째 조건으로 정렬한후 두번째 조건으로 정렬함
<img src="https://velog.velcdn.com/images/study_record/post/1beafa2f-1365-4916-87b2-03e319db0144/image.png" alt=""></p>
</li>
<li><p>LIMIT
출력할 개수를 제한함 </p>
<blockquote>
<p> LIMIT 시작, 개수
(LIMIT 개수 OFFSER 시작 ← 같은 결과가 나옴)</p>
</blockquote>
</li>
<li><p>LIMIT 3 = LIMIT 0,3 같은의미 (0번째 부터 3건을 나타내라)</p>
<p><img src="https://velog.velcdn.com/images/study_record/post/08cbe58e-397d-4626-96a2-4e9d756cde34/image.png" alt=""></p>
</li>
<li><p>LIMIT 3,2
<img src="https://velog.velcdn.com/images/study_record/post/26f3ec16-048d-45cd-9305-7b6ec10a57e9/image.png" alt=""></p>
</li>
<li><p>DISTINCT
검색한 결과에 중복이 있는 데이터는 제거하고 하나만 남겨줌
<img src="https://velog.velcdn.com/images/study_record/post/399aab9f-78f0-47f0-9f53-351f1ba2a4c9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/993fce7d-24ff-4ec8-a690-906c901115dc/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/08eb9db2-7701-47f2-8fab-e806e9bff902/image.png" alt=""> </p>
</li>
</ul>
<h4 id="group-by절">GROUP BY절</h4>
<ul>
<li><p>그룹으로 묶어주는 역할을 함</p>
</li>
<li><p>집계함수와 GROUP BY절을 같이 쓰면서 그룹화를 해줌 </p>
</li>
<li><p>집계함수</p>
<blockquote>
<p>  SUM() 합계
AVG()  평균
MIN() 최소값
MAX() 최대값
COUNT() 행의 개수
COUNT(DISTINCT) 중복을 제거한 행의 개수</p>
</blockquote>
</li>
<li><p>GROUP BY로 회원을 묶고 SUM으로 구매개수를 합하기(별칭 사용가능)
<img src="https://velog.velcdn.com/images/study_record/post/1b0bfd19-29af-43aa-b92f-4f33939751b0/image.png" alt=""> </p>
<p><img src="https://velog.velcdn.com/images/study_record/post/2df470b5-b90a-4773-8184-9f2c85a74b5e/image.png" alt=""></p>
</li>
</ul>
<ul>
<li><p>회원이 구매한 총 금액 구하기 (가격X수량=총 금액)
<img src="https://velog.velcdn.com/images/study_record/post/72543a37-fd74-45a0-931a-74dc2ec02620/image.png" alt=""></p>
</li>
<li><p>회원이 구매한 물품의 평균 개수
<img src="https://velog.velcdn.com/images/study_record/post/b1e35d6a-25cc-415f-8dc5-261cd768e654/image.png" alt=""></p>
</li>
<li><p>연락처가 있는 회원수 개수
COUNT(*)는 모든 행의 개수를 세어줌 
<img src="https://velog.velcdn.com/images/study_record/post/f33c7837-bb44-4a35-acfe-a91e15a99b54/image.png" alt="">
COUNT(열이름) 열에서 값이 NULL인것은 제외하고 세어줌
<img src="https://velog.velcdn.com/images/study_record/post/58cb31fa-42ed-4e1b-ac9b-6183b46cfa22/image.png" alt=""></p>
</li>
<li><p>HAVING 절
WHERE 절과 비슷하게 조건을 걸어주지만 집계함수에 대한 조건을 제한하는 절
GROUP BY절 뒤에 작성한다</p>
<p>총 구매액이 1000 이상인 회원을 구할때 WHERE절에 집계함수를 쓰면 오류가 발생한다
<img src="https://velog.velcdn.com/images/study_record/post/362ae75a-951b-4023-9c5b-b3126714ff3a/image.png" alt="">
GROUP BY절에 집계함수 조건을 적어주고 ORDER BY로 정렬해줌
<img src="https://velog.velcdn.com/images/study_record/post/6041bb6a-a00d-42da-8f54-655d2d018c5a/image.png" alt=""></p>
</li>
</ul>
<h3 id="03-3-데이터-변경을-위한-sql문">03-3 데이터 변경을 위한 SQL문</h3>
<h4 id="데이터-입력-insert문">데이터 입력 INSERT문</h4>
<ul>
<li><p>INSERT문 기본형태</p>
<blockquote>
<p>INSERT INTO 테이블 [(열1, 열2, ...)] VALUES (값1, 값2, ...)</p>
</blockquote>
<blockquote>
<p>데이터 여러개 입력할때 사용 
INSERT INTO 테이블이름 VALUES (값1, 값2..), (값3, 값4..), (값5, 값6.. );</p>
</blockquote>
</li>
<li><p>열이름은 생략이 가능하고 생략할 경우 VALUES 다음에 적는 값의 순서와 개수는 테이블을 정의 할때 나오는 순서와 개수를 맞춰서 적어야함 -&gt; 아니면 오류가 발생</p>
</li>
<li><p>테이블의 열이 3개면 데이터도 3개 입력하기
<img src="https://velog.velcdn.com/images/study_record/post/c12d1a6b-93e4-426e-99b2-aedbcf84e213/image.png" alt=""></p>
</li>
<li><p>값을 입력하지 않을때는 열의 이름을 써줘야 함
<img src="https://velog.velcdn.com/images/study_record/post/5bdde9aa-a2de-4957-aaa0-f3533301c20d/image.png" alt=""></p>
</li>
<li><p>열 이름의 순서를 바꾸면 값의 순서도 바꿔서 입력해야 함
<img src="https://velog.velcdn.com/images/study_record/post/21ddd5c5-3528-42f9-b013-2f1ff868b783/image.png" alt=""></p>
<h4 id="auto_increment">AUTO_INCREMENT</h4>
</li>
<li><p>열을 정의 할때 1부터 증가 하는 값이 입력된다</p>
</li>
<li><p>AUTO_INCERMENT로 지정하는 열은 꼭 PRIMARY KEY로 지정해야 함
<img src="https://velog.velcdn.com/images/study_record/post/d8de70fe-ad81-4130-bf9b-8f9c2f981f1b/image.png" alt=""></p>
</li>
<li><p>숫자가 몇가지 자동 입력되었는지 확인</p>
<blockquote>
<p>LAST_INSERT_ID()</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/f016b7f8-c2ec-4f8c-84a5-770ae740bc4b/image.png" alt=""></p>
</li>
<li><p>자동 입력되는 숫자를 지정할수 있음</p>
<blockquote>
<p>ALTER TABLE 테이블 이름 AUTO_INCREMENT=원하는 숫자</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/f536acb1-10ba-441c-a2c6-22964b63c4ed/image.png" alt=""></p>
</li>
<li><p>증가되는 숫자를 지정할수 있음</p>
<blockquote>
<p>SET @@auto_increment_increment = 숫자</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/c54294cf-c682-4c5e-8a3f-514a22ec2d4c/image.png" alt=""></p>
</li>
</ul>
<h4 id="insert-into--select">INSERT INTO ~ SELECT</h4>
<ul>
<li>테이블에 데이터를 한번에 입력하는 방법이다.</li>
<li>SELECT문의 열개수 와 INSERT 열개수가 동일해야함<blockquote>
<p>INSERT INTO 테이블이름(열이름1, 열이름2, ...)
SELECT문 ;</p>
</blockquote>
</li>
<li>DESC : 테이블 구조 확인
<img src="https://velog.velcdn.com/images/study_record/post/b7a19333-8085-4afe-b955-bae9d62a33a1/image.png" alt=""></li>
<li>새로운 테이블 생성해서 데이터 한꺼번에 입력하기
<img src="https://velog.velcdn.com/images/study_record/post/111769e0-9a2d-4e95-9c69-1230e4eaf3be/image.png" alt=""></li>
</ul>
<h4 id="update문">UPDATE문</h4>
<ul>
<li><p>기존에 입력되어있는 데이터를 수정할때 사용함</p>
<blockquote>
<p>UPDATE 테이블이름
SET 열1=값1, 열2=값2 ...
WHERE 조건;</p>
</blockquote>
</li>
<li><p>UPDATE로 하나의 값 바꾸기
<img src="https://velog.velcdn.com/images/study_record/post/564a38a3-e935-4269-9b03-5a08d15b7cf5/image.png" alt=""></p>
</li>
<li><p>UPDATE로 여러개 값 바꾸기
<img src="https://velog.velcdn.com/images/study_record/post/93c9748d-c996-4b8d-aa5d-4e530f181f1a/image.png" alt=""></p>
</li>
<li><p>WHERE 없는 UPDATE문
WHRER절을 생략하면 테이블의 모든 값이 변경됨 따라서 주의해서 사용해야 함</p>
</li>
</ul>
<h4 id="delet문">DELET문</h4>
<ul>
<li><p>데이터 행을 삭제할때는 DELET를 사용함</p>
<blockquote>
<p>DELET FROM 테이블이름 WHERE 조건;</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/study_record/post/3d0f5844-f865-4aae-bc1a-7de84aadeaab/image.png" alt=""></p>
<ul>
<li>&#39;LIMIT 숫자&#39; 로 원하는 건수만 삭제 가능
<img src="https://velog.velcdn.com/images/study_record/post/cb8f7dfe-6b16-4dbc-a787-5d94b3724394/image.png" alt=""></li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_1주]chapter02 실전용SQL 미리맛보기]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5schapter02</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5schapter02</guid>
            <pubDate>Sat, 06 Jul 2024 12:17:01 GMT</pubDate>
            <description><![CDATA[<h3 id="데이터베이스-모델링">데이터베이스 모델링</h3>
<ul>
<li>데이터베이스 모델링이 잘되여야 프로젝트를 잘 진행할수 있음</li>
<li>프로젝트 : 현실세계에서 일어나는 업무를 컴퓨터 시스템으로 옮겨 놓는 과정 / 대규모 소프트웨어를 작성하기 위한 전체과정</li>
<li>폭포수 모델 : 소프트웨어 공학에서 가장 기본적으로 언급되는 소포트웨어 개발중 하나<ul>
<li>1단계 프로젝트 계획 </li>
<li>2단계 업무분석 (업무에 대해서 정리함)</li>
<li>3단계 시스템설계 (컴퓨에 적용시키기 위해서 다듬는 과정)</li>
<li>4단계 프로그램 구현 (프로그래밍 언어로 코딩하는 과정)</li>
<li>5단계 테스트 (오류 확인 과정)</li>
<li>6단계 유지보수 (문제점보완, 기능추가)</li>
<li>장점 - 프로젝트 진행단계가 명확함</li>
<li>단점 - 단계를 거슬러 가기 어려움</li>
</ul>
</li>
<li>데이터베이스 모델링<ul>
<li>현실세계 작업을 DBMS의 데이터베이스 개체(테이블)로 옮기는 과정</li>
<li>사람, 행동 → 테이블 개체로 변환</li>
</ul>
</li>
<li>데이터베이스 구성도<ul>
<li>데이터 : 단편적인 정보</li>
<li>테이블 : 표 형태로 표현한것</li>
<li>데이터베이스 : 테이블이 저장 되는 저장소 </li>
<li>DBMS : 데이터베이스 관리 시스템 또는 소프트웨어</li>
<li>열=컬럼=필드 : 테이블의 세로</li>
<li>열이름: 열을 구분하는 이름</li>
<li>데이터 형식 : 열에 저장될 데이터 형식 / 테이블 생성시 지정함</li>
<li>행 : 실질적인 데이터 / 행의 개수 = 데이터 개수</li>
<li>기본키 : 각 생을 구분하는 유일한 열 / 중복없음/ 값이 비어있지 않음/ 기본키는 1개만 지정 해야함</li>
<li>SQL : DBMS와 소통하는 언어<h4 id="데이터-베이스-모델링-툴-실습">데이터 베이스 모델링 툴 실습</h4>
<img src="https://velog.velcdn.com/images/study_record/post/5e99fe2d-274b-4642-8de6-438c14577c31/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="데이터베이스-구축">데이터베이스 구축</h3>
<ul>
<li>데이터베이스 구축 절차<ul>
<li>데이터베이스 만들기 → 테이블 만들기 → 데이터입력/수정/삭제하기 → 데이터조회/활용하기</li>
</ul>
</li>
</ul>
<ol>
<li><p>데이터베이스 만들기</p>
<ul>
<li>스키마 = 데이터베이스</li>
<li>스키마 패널에서 만들기 </li>
<li>&quot;CREATE DATABASE&quot; 써도 만들수 있음</li>
<li>실습
 <img src="https://velog.velcdn.com/images/study_record/post/dabfb9e4-6625-438c-bd32-3dd1c5818ac6/image.png" alt=""></li>
</ul>
</li>
<li><p>테이블 만들기</p>
<ul>
<li>테이블 설계 : 열이름과 데이터 형식을 지정하는 것</li>
<li>CHAR : 문자를 의미</li>
<li>널 허용 안함(Not Null, NN) : 반드시 입력이 필요함</li>
<li>열이름을 영문으로 정할때는 띄어쓰기 금지</li>
<li>띄어쓰기 대신에 (_)를 이용한다</li>
<li>member테이블
<img src="https://velog.velcdn.com/images/study_record/post/e09bdd8b-b576-4229-a692-8df30f1da786/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/5950ba02-fa40-4479-acf8-20a99da92227/image.png" alt=""></li>
<li>product 테이블
<img src="https://velog.velcdn.com/images/study_record/post/b2a38180-fe8f-49c1-a14d-993dedb25115/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/78f92d63-8892-4d86-b69c-3bd55a32521d/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/33c95e8b-6c90-4708-805d-fa960b3226e6/image.png" alt=""></li>
</ul>
</li>
<li><p>테이터 입력/수정/삭제 하기</p>
<ul>
<li><p>데이터 입력(SQL문 INSERT INTO)</p>
</li>
<li><p>기본키로 설정한열 기준으로 오름차순을 자동정렬 됨 
<img src="https://velog.velcdn.com/images/study_record/post/f452f23b-289a-45d7-8683-f3e78efbe6bd/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/227cb4ab-7ac6-4921-918c-e1a251e8fc0a/image.png" alt=""></p>
</li>
<li><p>데이터 추가 입력
<img src="https://velog.velcdn.com/images/study_record/post/b56a39a9-695c-4fd0-948d-d6a86264075e/image.png" alt=""></p>
</li>
<li><p>데이터 수정(SQL문 UPDATE)
<img src="https://velog.velcdn.com/images/study_record/post/cb97e5ff-4014-40ca-a858-82860367395c/image.png" alt=""></p>
</li>
<li><p>데이터 삭제(SQL문 DELETE)
<img src="https://velog.velcdn.com/images/study_record/post/f8264c35-8abe-4f07-9a9d-00bc9b2fec24/image.png" alt=""></p>
</li>
</ul>
</li>
<li><p>데이터 활용하기</p>
<ul>
<li>SELECT : 데이터베이스 활용에 가장 많이 사용함<pre><code>     SELECT 열이름 FROM 테이블이름 [WHRER 조건]</code></pre><blockquote>
<pre><code>SELECT * FROM member</code></pre><p><img src="https://velog.velcdn.com/images/study_record/post/f0841345-5dbf-40b0-a17a-c9442957c122/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<blockquote>
<p>   SELECT member_name, member_addr FROM member;
<img src="https://velog.velcdn.com/images/study_record/post/6bdfc777-5b21-43c2-96a2-f233befee584/image.png" alt=""></p>
</blockquote>
<blockquote>
<p> ✨ 기본숙제 ✨
SELECT * FROM member WHERE member_name=&quot;아이유&quot;<br><img src="https://velog.velcdn.com/images/study_record/post/2c28874d-fea5-419e-ba1f-1d743d38bda7/image.png" alt=""></p>
</blockquote>
</li>
</ol>
<h3 id="데이터베이스-개체">데이터베이스 개체</h3>
<ul>
<li>데이터베이스의 개체 : 테이블, 인덱스. 뷰, 스토어드 프로시저, 트리거, 함수등이 있음</li>
</ul>
<h4 id="데이터베이스-개채-3개-설명하기-✨추가-숙제✨">데이터베이스 개채 3개 설명하기 ✨추가 숙제✨</h4>
<table>
<thead>
<tr>
<th align="center">인덱스</th>
<th align="center">뷰</th>
<th align="center">스토어드 프로시저</th>
</tr>
</thead>
<tbody><tr>
<td align="center">책의 찾아보기와 비슷함</td>
<td align="center">바로가기 아이콘과 비슷한 기능</td>
<td align="center">MySQL의 프로그래밍 기능</td>
</tr>
<tr>
<td align="center">데이터를 빠르게 찾을수 있음</td>
<td align="center">SELECT문</td>
<td align="center">여러개의 SQL을 묶어줌</td>
</tr>
<tr>
<td align="center">데이터가 많을때 유용힘</td>
<td align="center">보안에 도움된다</td>
<td align="center">조건문, 반복문 사용할수 있음</td>
</tr>
<tr>
<td align="center">6장</td>
<td align="center">5장</td>
<td align="center">7장</td>
</tr>
</tbody></table>
<h4 id="인덱스">인덱스</h4>
<ul>
<li>데이터가 많을때 시간을 단축시키는 효과가 있음</li>
<li>책의 찾아보기와 비슷한 개념</li>
<li>인덱스 생성여부에 따라서 결과가 달라지지 않음<blockquote>
<p> CREATE INDEX idx_member_name ON member(member_name);  &quot;ON member(member_name)&quot;는 member테이블의 member_name 열에 인덱스를 지정하라 / 결과는 보이지 않음
<img src="https://velog.velcdn.com/images/study_record/post/6a307c52-9324-407f-830f-a1f1bd8f8e51/image.png" alt=""> 인덱스가 생겼음
<img src="https://velog.velcdn.com/images/study_record/post/c49739ee-f134-407b-9eb1-4503b6bfa98b/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<h4 id="뷰">뷰</h4>
<ul>
<li>가상 테이블</li>
<li>실제 데이터를 가지고 있지 않고 진짜 테이블에 링크된 개념</li>
<li>뷰의 실제 = SELECT 문</li>
<li>보안에 도움이 되고 긴 SQL문을 간단하게 만들수 있음<blockquote>
<p>CREATE VIEW member_view AS     SELECT * FROM member;
SELECT * FROM member_view;
<img src="https://velog.velcdn.com/images/study_record/post/55cf6be2-57ca-4589-a676-841c2a23f01f/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<h4 id="스토어드-프로시저">스토어드 프로시저</h4>
<ul>
<li>MySQL에서 프로그래밍 기능을 사용할수 있게 하는 것</li>
<li>여러개의 SQL문을 하나로 묶어서 사용함</li>
<li>기본적인 형태로만 코딩이 가능<blockquote>
<p>SELECT * FROM member WHERE member_name=&#39;나훈아&#39;;
SELECT * FROM product WHERE product_name=&#39;삼각김밥&#39;; 결과가 따로 2개 생성됨
<img src="https://velog.velcdn.com/images/study_record/post/4a795532-8849-472f-834e-2f07e84da046/image.png" alt=""></p>
</blockquote>
</li>
<li>프로지저 한개로 만들기<blockquote>
<p>DELIMITER // &lt;구분문자&gt;
CREATE PROCEDURE myProc()
BEGIN
  SELECT * FROM member WHERE member_name=&#39;나훈아&#39;;
  SELECT * FROM product WHERE product_name=&#39;삼각김밥&#39;;
END //
DELIMITER ; &lt;구분문자&gt;
CALL myProc(); &lt;스토어드 프로시저 호출&gt;
<img src="https://velog.velcdn.com/images/study_record/post/a3f80037-25bf-49db-8416-95e8bbd34923/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<h3 id="📚확인문제">📚확인문제</h3>
<p>P.65 확인문제
1번 </p>
<p>1) 현실의 세게를 컴퓨터 시스템으로 옯겨놓는 일련의 과정
<strong>정답 : 프로젝트</strong>
2) 소프트웨어 개발 절차중 하나로 폭포가 떨어지듯 각 단계가 진행됨 
<strong>정답 : 폭포수 모델</strong>
3) 소프트웨어를 완성하는 절차를 연구하는 분야를 통틀어 부르는 말 
<strong>정답 : 소프트웨어 공학</strong></p>
<p>2번 폭포수 모델 나열하기
** 정답 : 프로젝트 계획 → 업무분석 → 시스템 설계 →프로그램 구현 → 테스트 → 유지보수 ** </p>
<p>3번 
세상의 작업이나 사물을 DBMS로 옯기는 과정은 무엇인가?
<strong>정답 : 데이터베이스 모델링</strong></p>
<p>4번 </p>
<p>1) 회원이나 제품을 데이터를 입력하기 위해 표형태로 표현한것 
<strong>정답 : 태이블</strong>
2) 데이터베이스를 관리하는 시스템 또는 소프트웨어
<strong>정답 : DBMS</strong>
3) 실질적인 진짜 데이터, 데이터의 가로
<strong>정답 : 행 **
4) 사람과 DBMS가 소통하기 위한 말
**정답 : SQL</strong></p>
<p>P.85
1번 데이터베이스 구축절차 나열하기
** 정답 : 데이터베이스 만들기 → 테이블 만들기 → 데이터 입력하기 → 데이터 조회하기**</p>
<p>2번 빈칸에 들어갈 내용은? <strong>(4)번</strong>
데이터베이스는 테이블을 저장하는 공간으로 (   ) 라고도 부릅니다</p>
<p>1) 테이블  2) 열이름 3) 데이터형식 4) 스키마 5) 기본키</p>
<p>3번</p>
<p>1) 데이터를 수정할때 이용
<strong>정답 : UPDATE</strong>
2) 데이터를 조회할때 사용
<strong>정답 : SELECT</strong>
3) 테이블이나 데이터베이스를 만들때 이용
<strong>정답 : CREATE</strong>
4) 데이터를 삭제할때 사용
<strong>정답 : DELETE</strong></p>
<p>4번</p>
<p>1) 데이터형식중 소수점이 없는 정수형
<strong>정답 : INT</strong>
2) 빈있는 값을 허용하지 않음
<strong>정답 : NOT NULL</strong>
3) 데이터형식중 문자형
<strong>정답 : CHAR</strong>
4) 데이터형식중 날짜형
<strong>정답 : DATE</strong></p>
<p>5번 </p>
<blockquote>
<p>SELECT * FROM 테이블이름 WHERE 열이름 = &#39;값&#39;</p>
</blockquote>
<p>  *<em>정답(1)번 특정값 조회 *</em></p>
<p>P.99 
1번 데이터베이스 개체가 아닌것은?
*<em>정답 : 열이름, 데이터형식, 기본키 *</em></p>
<p>2번 인덱스 설명이 아닌것은?  ** 정답: (2)(3)번**</p>
<p>1) 인덱스 책 뒤의 찾아보기와 비슷하다
2) 데이터 건수가 적어도 인덱스 효과를 <del>체감할수 있다</del>
3) 인덱스 테이블을 생성하면 <del>자동으로 생성됨</del>
4) 인덱스를 생성하는 SQL은 CREATE INDEX 이다</p>
<p>3번 뷰에대한 설명이 아닌것은? ** 정답 : (2)번 **</p>
<p>1) 가상의 테이블이라고 함
2) <del>생성하면 검색 속도가 향상된다</del>
3) 윈도우즈의 바로가기 아이콘과 개념이 비슷하다
4) 뷰를 만든후에 테이블과 동일하게 사용하면 된다</p>
<p>4번 스토어드 프로시저에대한 설명이 아닌것은? <strong>정답 (4)(5)번</strong></p>
<p>1) 프로그래밍 기능을 제공한다
2) 여러개의 SQL을 하나로 묶으수 있다
3) 스토어드 프로시저를 만들때는 DELIMITER로 묶어준다
4) 스토어드 프로시저는 <del>SELECT 문으로 호출한다</del>
5) 스토어드 프로시저는 <del>DELETE 문으로 삭제한다</del></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공S_1주]chapter01 데이터베이스와 SQL]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s1%EC%A3%BCchapter01-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%99%80-SQL</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5s1%EC%A3%BCchapter01-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%99%80-SQL</guid>
            <pubDate>Sat, 06 Jul 2024 08:20:26 GMT</pubDate>
            <description><![CDATA[<h3 id="데이터베이스와-dbms">데이터베이스와 DBMS</h3>
<h4 id="dbms">DBMS</h4>
<ul>
<li>데이터베이스 = 데이터의 집합</li>
<li>DBMS : 데이터베이스를 관리하고 운영하는 소프트웨어</li>
<li>DBMS의 종류 : MySQL, SQL서버, 오라클, MariaDB</li>
<li>SQL <ul>
<li>DBMS에 데이터를 구축,관리하고 활용하기 사용하기 위해서 사용되는 언어 </li>
</ul>
</li>
</ul>
<h4 id="dbms-발전과정">DBMS 발전과정</h4>
<ul>
<li><p>종이와 펜으로 기록</p>
</li>
<li><p>컴퓨터 파일에 기록, 저장함</p>
</li>
<li><p>파일은 불일치 문제가 생김</p>
<h4 id="dbms-분류">DBMS 분류</h4>
</li>
<li><p>계층형DBMS </p>
<ul>
<li>1960년대 시작해 처음등장한 개념</li>
<li>트리형태를 가짐</li>
<li>처음구성을 완료한 이후 변경하기 어렵고 지금은 사용하지 않음</li>
</ul>
</li>
<li><p>망형DBMS</p>
<ul>
<li>계층형DBMS문제점을 해결하기 위해 1970년대 등장</li>
<li>망형DBMS을 활용하려면 프로그래머가 모든 구조를 이해해야만 작성이 가능함</li>
</ul>
</li>
<li><p>관계형DBMS</p>
<ul>
<li>RDBMS(Relational DBMS)라고 부름</li>
<li>테이블(최소단위)로 구성되고 테이블은 열과 행으로 이뤄져있음<h4 id="sql">SQL</h4>
</li>
</ul>
</li>
<li><p>표준SQL : 국제표준화기구에서 표준을 정해서 발표함 </p>
</li>
<li><p>그러나 표준을 준수하면서 각 자신의 제품의 특성을 반영한 SQL을 사용함</p>
</li>
</ul>
<h3 id="mysql-설치">MySQL 설치</h3>
<p>_ 이전에 설치한것이 8.0이라 그대로 사용_</p>
<ul>
<li>교육용이나 개인용은 무료로 제공</li>
<li>상용목적일 경우 비용지불해야함</li>
<li>비밀번호는 간단한걸로 할것</li>
<li>SQL 워크벤치 맛보기</li>
</ul>
<blockquote>
<p>SHOW DATABASE
<img src="https://velog.velcdn.com/images/study_record/post/e2f8f4d0-3a80-43b2-bedb-1a85817f16a7/image.png" alt=""></p>
</blockquote>
<h3 id="📚확인문제">📚확인문제</h3>
<h4 id="p33">P.33</h4>
<p>1번 데이터베이스 관련용어 맞추기</p>
<p>1) 데이터의 저장소 또는 데이터의 집합을 말한다. 약자로 DB
   → <strong>데이터베이스</strong>
2) 국제표준화기구에서 지정하고 RDBMS에서 사용되는 언어
   → <strong>표준SQL</strong>
3) 대표적인 DBMS로 데이터를 구축, 관리하기위해 SQL을 사용
   → <strong>MySQL</strong>
4) 표 형태로 구성되어 있고 열과 행으로 이루어져 있음
   → <strong>테이블</strong></p>
<p>2번 다음중 DBMS가 아닌것은? <strong>(2)번</strong></p>
<p>1) MySQL  2)Excel  3)Oracle  4)SQL Server  5)Maria DB</p>
<p>3번 빈칸에 들어갈 내용을 써라</p>
<blockquote>
<p>국제표준화 기구에서 지정한(1)을 대부분의 DBMS회사에서 지키고 있지만 자신의 특성을 반영한 변형된 SQL을 사용중이다.  이를 오라클은 (2), SQL Swever는(3), MySQL은(4)라고 부름</p>
</blockquote>
<p><strong>(1) 표준SQL</strong>
<strong>(2) PL/SQL</strong>
<strong>(3) T-SQL</strong>
<strong>(4) SQL</strong></p>
<h4 id="p53-확인문제">P.53 확인문제</h4>
<p>1번 MySQL8.0을 설치할수있는 운영체제 
** 정답: Windows 10(또는11)(64bits)**</p>
<p>2번 MySQL 워크벤치에서 작업할수있는것이 아닌것은? <strong>정답 (3)</strong></p>
<p>1) SQL 실행
2) MySQL Server에 접속
3) MySQL 기능의 추가 설치 및 MySQL Server의 설치 제거
4) 실행한 SQL 결과 확인
5) SQL이 틀린 경우 빨간색 아이콘 표시</p>
<p>3번 MySQL 서버의 데이터베이스 목록을 출력하는 SQL을 작성하라
<strong>정답 SHOW DATABASES</strong>
<strong>결과</strong>
<img src="https://velog.velcdn.com/images/study_record/post/f2c6db14-3abb-451d-ba35-49161c8c4d1f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_마무리]11기 혼공단 회고]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B4%EB%A7%88%EB%AC%B4%EB%A6%AC11%EA%B8%B0-%ED%98%BC%EA%B3%B5%EB%8B%A8-%ED%9A%8C%EA%B3%A0</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B4%EB%A7%88%EB%AC%B4%EB%A6%AC11%EA%B8%B0-%ED%98%BC%EA%B3%B5%EB%8B%A8-%ED%9A%8C%EA%B3%A0</guid>
            <pubDate>Wed, 07 Feb 2024 08:44:15 GMT</pubDate>
            <description><![CDATA[<p>생각의 흐름대로 쓰는 11기 혼공단 회고</p>
<ul>
<li><p>혼자공부하는 컴퓨터구조+운영체제 책을 구입하고 일년동안 책장에 잘 모셔두었는데 우연히 혼공단모집을 봤고 참가 하게되었다</p>
</li>
<li><p>2024년 1월 2일부터 스터디를 싲가해서 2월 12일에 15개의 챕터를 한번씩 공부했다. 양이 많은 챕터도 있었고 쉽게 이해안되는 챕터 있었지만 한 번 끝까지 공부했다는것에 만족한다. </p>
</li>
<li><p>이번 스터디로 공부했을때 이해가 잘안되거나 기억이 안나는 부분은 두번째 볼때 좀더 잘 이해될거라고 생각한다. </p>
</li>
<li><p>처음에는 글 부분만 정리했는데 이책의 장점인 그림을 그냥 보기만 하는게 아까워서 직접 그려보면서 공부했다. 그리는데 시간을 오래걸렸지만 하고나면 이해가 잘되서 챕터6부터는 쭉 그림을 그리면서 공부했다. </p>
</li>
<li><p>그림 그리는데 이용한 곳은 여기 <a href="https://app.diagrams.net/">https://app.diagrams.net/</a>
개발자들이 코드 순서도 그릴때 사용하는 곳으로 알게 되었는데 이번에 공부하면서 유용하게 사용했다. 이미 정해진 있는색을 쓸때도 있고 내가 색을 정할때도 있다. 중요한것을 눈에 잘보이는 색으로 선택하거나 연관되는것은 비슷색상으로 고르고 글씨는 검은색으로 통일하려고 노력했다.
그림그리는 시간은 한 챕터 당 대략 2-3시간 걸렸다. </p>
</li>
<li><p>공부하기 싫을때 검색해서 찾은 마리오 음악을 깔아두고 했다.  뿅뿅거리는 소리가 마음에 들었다.<br><a href="https://youtu.be/FDUk0Kcte9A?si=ECEqfW-7EI8xMFdM">https://youtu.be/FDUk0Kcte9A?si=ECEqfW-7EI8xMFdM</a></p>
</li>
<li><p>족장님이 간식으로 보내주는것 잘먹었습니다. 간식 사진찍고 디스코드에 올리려했는데 항상 먹고나면 생각나서 인증을 못했네요😂</p>
</li>
<li><p>벨로그 검색하면서 많이 보기만 했지 사용한것은 처음이었는데 이번기회로 사용하게 되어서 좋았다</p>
</li>
<li><p>12기 까지 페이스북 계정에 문제가 안생긴다면 혼공SQL로 참여하고 싶다. 몇번 계정 무결성문제로 차단당했는데 언제 또 차단당할지 모르겠다😥 </p>
</li>
<li><p>재미있게 사람이 아닌지라 벨로그 글도 하나도 재미 없음에도 불구하고 매주 즐거운 댓글 달아주신 족장님 감사합니다!  </p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_6주]chapter15 파일 시스템]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B46%EC%A3%BCchapter15-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B46%EC%A3%BCchapter15-%ED%8C%8C%EC%9D%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C</guid>
            <pubDate>Tue, 06 Feb 2024 03:12:41 GMT</pubDate>
            <description><![CDATA[<h3 id="파일">파일</h3>
<ul>
<li>파일 : 하드디스크, 보조기억장치에 저장된 관련 정보의 집합</li>
<li>파일은 이름과 부가정보(속성, 메타데이터)로 이루어져있음</li>
<li>파일속성의 종류 <ul>
<li>유형 : 운영체제가 인지하는 파일의 종류</li>
<li>크기 : 현재크기와 허영가능한 최대 크기</li>
<li>보호 : 어떠 사용자가 파일을 읽고, 쓰고, 실행했는가 </li>
<li>생성날짜 </li>
<li>마지막 접근 날짜</li>
<li>마지막 수정 날짜</li>
<li>생성자</li>
<li>소유자</li>
<li>위치 : 보조기억장치상 현재위치</li>
</ul>
</li>
<li>파일 유형 <ul>
<li>운영체제가 인식하는 파일 종류</li>
<li>확장자를 붙여서 이용함</li>
<li>실행파일 : exe,com,bin</li>
<li>목적파일 : obj,o</li>
<li>소스코드파일 : c,cpp,cc,java,py</li>
<li>워드 파일 : xml,doc</li>
<li>라이브러리파일 : lib,a,so,dll</li>
<li>백업보관파일 :rar,zip</li>
</ul>
</li>
<li>파일 연산을 위한 시스템 호출 : 파일을 조작하는것은 운영체제에 의해 조작되는데 이를위헤 시스템호출을 제공함</li>
</ul>
<h3 id="디렉터리">디렉터리</h3>
<ul>
<li>파일을 일목요연하게 관리하기 위해서 디렉터리를 사용함</li>
<li>윈도우체제에서 디렉터리=파일</li>
<li>1단계 디렉터리 : 옛날 운영체제의 방법. 하나의 디렉터리에 모든 파일이 있음</li>
<li>트리 구족 디렉터리 : 여러계층을 가진 구조. 최상위 디렉터리아래 서브 디렉터리가있음. 최상위 디렉터리(루트디렉터리)는 슬래시로 표시</li>
<li>경로 <ul>
<li>절대 경로 : 모든 파일을 루트디렉터리에 자기까지의 고유 경로</li>
<li>상대 경로 : 현재 디렉터리부터 시작하는 경로</li>
</ul>
</li>
<li>디렉터리 연산을 위한 시스템 호출 : 운영체제는 디렉터리 연산을 위한 시스템 호출을 가지고 있음</li>
</ul>
<h3 id="디렉터리-엔트리">디렉터리 엔트리</h3>
<ul>
<li>대부분의 운옃체제에서 디렉터리를 특별한 형태의 파일로 간주함</li>
<li>디렉터리는 내부에 해당 디렉터리 대상과 연관된 정보를 표 형식으로 가지고 있다 → 보조기억장치에 테이블 형태의 정보를 가지고 있음</li>
<li>디렉터리에 포함된 대상의 이름, 보조기억장치에 저장된 위치 정보를 가지고 있음</li>
</ul>
<h3 id="상대경로-나타내는-방법">상대경로 나타내는 방법</h3>
<ul>
<li>&quot;.&quot; 현재작업 디렉터리 </li>
<li>&quot;..&quot; 현재작업 디렉터리의 상위 디렉터리</li>
<li>루트 디렉터리의 &quot;..&quot;은 자기 자신을 의미함</li>
</ul>
<h3 id="파티셔닝과-포매팅">파티셔닝과 포매팅</h3>
<ul>
<li>파티셔닝(partitioning) : 저장장치의 논리적인 영역을 구획하는 작업</li>
<li>파티션(partition) : 파티셔닝 작업을 통해 나누어진 영역 하나<ul>
<li>파티션마다 다른 파일시스템을 사용할수 있음</li>
</ul>
</li>
<li>포매팅 : 파일시스템을 설정하여 어떤 방식으로 파일을 저장하고 관리할지 정하고 새로운 데이터르 쓸 준비를 하는작업<ul>
<li>저수준 포매팅 : 저장장치 생성시 공장에서 수행되는 물리적인 포매팅</li>
<li>논리적 포매팅 : 파일시스템을 생성하는 포매팅</li>
</ul>
</li>
</ul>
<h3 id="파일-할당-방법">파일 할당 방법</h3>
<ul>
<li>블록 : 운영체제가 파일과 디렉터리를 읽고 쓰는 단위</li>
<li>운영체제는 섹터(하드디스크 가장 작은 단위)를 블록으로 묶은후 블럭 단위로 파일과 디렉터리를 관리함</li>
<li>보조기억장치의 파일 할당 방법<ul>
<li>연속 할당</li>
<li>불연속 할당<ul>
<li>연결 할당</li>
<li>색인 할당</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3 id="연속-할당">연속 할당</h3>
<ul>
<li>연속적인 블록에 파일을 할당하는 압법</li>
<li>연속 할당에서 파일에 접근할때는 첫번째 블록 주소와 블록단위 길이로 접근한다</li>
<li>디렉터리 엔트리에 파일 이름, 첫번째 블록 주소, 블록 단위 길이 정보가 있음</li>
<li>장점은 구현이 단순함</li>
<li>단점은 외부단편화가 발생됨 </li>
</ul>
<h3 id="연결-할당">연결 할당</h3>
<ul>
<li>블록 일부에 다음 블록의 주소를 저장하여 다음 블록을 알려주는 방법</li>
<li>디렉터리 엔트리에 파일이음, 첫번째 블록주소, 블록 단위 길이 정보가 있음</li>
<li>마지막 블록에는 다음블록이 없다는 표시자를 기록함</li>
<li>단점<ul>
<li>반드시 첫번째 블록부터 하나씩 읽어야 함<ul>
<li>임의접근속도(파일내 임의의 위치에 접근하는 속도)가 매우 느려서 비효율적이다</li>
</ul>
</li>
<li>하드웨어고장, 오류발생시 해당블록 이후 블록 접근을 할수 없다</li>
</ul>
</li>
</ul>
<h3 id="색인-할당">색인 할당</h3>
<ul>
<li>파일의 모든 블록 주소를 색인 블록이라는 하나의 블록에 모아서 관리하는 방식</li>
<li>파일내 임의의 위치에 접근하기 쉽다</li>
<li>색인블록만 알면 해당 파일데이터에 접근할 수 있다</li>
<li>디렉터리 엔트리에 파일이름, 색인블록 주소 정보가 있음</li>
<li>유닉스의 파일 시스템</li>
</ul>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center">연속 할당</th>
<th align="center">연결 할당</th>
<th align="center">색인 할당</th>
</tr>
</thead>
<tbody><tr>
<td align="center">장점</td>
<td align="center">구현이 단순</td>
<td align="center">외부 단편화를 해결함</td>
<td align="center">파일내 임의의 위치에 접근하기 쉽다</td>
</tr>
<tr>
<td align="center">단점</td>
<td align="center">외부단편화가 발생함</td>
<td align="center">반드시 첫번째 블록부터 하나씩 읽어야 함</td>
<td align="center"></td>
</tr>
<tr>
<td align="center"></td>
<td align="center"></td>
<td align="center">오류발생시 다음 블록으로 이동할수 없다</td>
<td align="center"></td>
</tr>
<tr>
<td align="center">디렉터리 엔트리</td>
<td align="center">파일이름, 첫번째 블록주소, 길이</td>
<td align="center">파일이름, 첫번째 블록주소, 길이</td>
<td align="center">파일이름, 색인 블록</td>
</tr>
</tbody></table>
<h3 id="fat-파일-시스템">FAT 파일 시스템</h3>
<ul>
<li><p>저용량 장치(USB메모리, SD카드)에 사용되는 파일 시스템</p>
</li>
<li><p>연결 할당의 단점을 보완한 파일 시스템</p>
</li>
<li><p>파일 할당 테이블(FAT:File Allocation Table) : 다음블록의 주소를 모아서 테이블 형태로 만든것</p>
</li>
<li><p>디렉터리 엔트리에 파일이름과 첫번째 블록 주소 정보, 파일속성 정보가 있음</p>
</li>
<li><p>FAT12,FAT16,FAT32버전이 있음(숫자는 비트수를 의미함)</p>
</li>
<li><p>FAT 파일 시스템 파티션 구성
<img src="https://velog.velcdn.com/images/study_record/post/b772ab2e-35b3-4d45-989f-9dedb0aed1c7/image.png" alt=""></p>
</li>
<li><p>FAT 파일시스템 디렉터리 엔트리 중 파일 속성 정보
<img src="https://velog.velcdn.com/images/study_record/post/db5458b7-b963-4cdb-af57-2d6065a2a83f/image.png" alt=""></p>
</li>
<li><p>FAT 파일 시스템에서 파일을 읽는 과정
→ /home/minchul/a.sh파일을 FAT시스템에서 읽는 방법
<img src="https://velog.velcdn.com/images/study_record/post/643eb850-e5d0-4406-8ed3-4a4d97a745eb/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/19e6633b-9029-482e-8e28-3937d1209323/image.png" alt=""></p>
<p> 1) 루트디렉터리에서 home디렉터리 블록 찾기
 2) 3번의 home디렉터리에서 minchul디렉러터리 블록 찾기
 3) 15번 minchul디렉터리에서 a.sh파일 블록 찾기
 4) FAT에서 a.sh첫번째 파일 주소를 찾아서 접근</p>
</li>
</ul>
<h3 id="유닉스-파일-시스템">유닉스 파일 시스템</h3>
<ul>
<li>색인 할당 기반의 시스템</li>
<li>유닉스 파일시스템의 i-node = 색인할당 시스템의 색인블록 </li>
<li>i-node에 파일속성, 15개의 블록 주소가 저장됨</li>
<li>유닉스 파일 시스템 파티션
<img src="https://velog.velcdn.com/images/study_record/post/501c57e6-7543-45e6-921d-89d60d9c2344/image.png" alt=""></li>
<li>블록주소가 15개 이상인 경우의 해결 방법<ol>
<li>직접 블록 방법 사용 
저장할수 있는 15개의 블록주소중 12개에는 직접적으로 블럭 주소를 저장함</li>
<li>단일 간접 블록 방법 사용 
12개로 모두다 저장 못할때 13번째 블록주소에 단일 간접 블록의 주소를 저장함</li>
<li>이중 간접 블록 
13개의 블록주소로 모든 주소블록을 저장하지 못하면 14번째 블록주소는 이중 간접블록의 주소를 저장함</li>
<li>삼중 간섭 블럭 
14개의 블록 주소로 모든 주소블록을 저장 못하면15번째 블록주소는 삼중 간섭 블록의 주소를 저장함. 대부분 크기의 파일을 저장할수 있다</li>
</ol>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/b3e4bc97-0d50-4b54-a3ff-c1a86f3641f4/image.png" alt=""></p>
<ul>
<li>유닉스 파일 시스템에서 파일을 읽는 과정
<img src="https://velog.velcdn.com/images/study_record/post/643eb850-e5d0-4406-8ed3-4a4d97a745eb/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/1cfff1a4-1b97-4db9-9642-2bbee513b21b/image.png" alt="">1) 루트 i-node 루트리렉터리 위치 찾기
2) home의 i-node영역에서 home디렉터리 블록 찾기
3) minchul의 i-node에서 minchul디렉터리 블록 찾기
4) a.sh파일의 i-node에 접근해서 파일 접근</li>
</ul>
<h3 id="다른-파일-시스템">다른 파일 시스템</h3>
<ul>
<li>NT 파일 시스템(NTFS) : 윈도우에서 사용함</li>
<li>ext 파일 시스템 : 리눅스에서 사용함</li>
</ul>
<h3 id="저널링-파일-시스템">저널링 파일 시스템</h3>
<ul>
<li>작업 로그를 통해서 시스템 크래시(오류로 컴퓨터를 강제 종료하는 상황)가 발생했을때 빠르게 복귀하는 방법</li>
<li>파일 시스템 전체를 검사하지 않고 로그영역의 로그만 검사한다</li>
<li>저널링 파일 시스템 순서<ol>
<li>작업 직전 파티션 로그 영역에 수행하는 작업에대한 로그를 남긴다</li>
<li>로그를 남긴 후 작업을 수행한다</li>
<li>작업이 끝났으면 로그를 삭제한다</li>
</ol>
</li>
</ul>
<h3 id="마운트">마운트</h3>
<ul>
<li>저장장치를 마운트 한다 : 저장장치 파일시스템에서 다른 저장장치 파일시스템에 접근할수 있도록 파일 시스템을 편입시키는 작업을 의미함</li>
</ul>
<h3 id="📚마무리문제">📚마무리문제</h3>
<h4 id="p450-451">P.450-451</h4>
<p>1번 파일과 관련한 설명으로 옳지 않은 것을 골라라 <strong>(4)번</strong></p>
<p>1) 파일은 보조기억장치에 저장된 관련정보의 집합을 의미함
2) 모든 파일에서 교유한 절대 경로가 있다
3) 운영체제는 파일을 다루기 위한 시스템 호출을 제공한다
4) <del>확장자</del>는 파일이 마지막으로 수정된 날짜를 나타내기 위한 정보이다</p>
<p>2번 다음을 참고하여 질문에 답하라
<img src="https://velog.velcdn.com/images/study_record/post/fd33b493-23bc-4088-ac01-04b08a99e8cb/image.png" alt=""></p>
<p>1) 현재 작업 디렉터리가 /home일때 c.tar의 상대경로는 무엇인가? <strong>minchul/c.tar</strong>
2) 현재 작업 디렉터리가 /home일때 c.tar의 절대경로는 무엇인가? <strong>/home/minchul/c.tar</strong></p>
<p>3번 디렉터리에 관한 설명중 옳지 않은것은? <strong>(1)번</strong></p>
<p>1) 디렉터리는 보조기억장치에 저장되어 <del>있지 않다</del>
2) 디렉터리 엔트리에는 해당 디렉터리에 저장된 대상들에 대한 정보가 담긴다
3) 운영체제는 디렉터리를 다루는 다양한 시스템 호출을 제공한다
4) 최상위 디렉터리를 루트 티렉터라고 한다</p>
<h4 id="p478-479">P.478-479</h4>
<p>1번 파일할당 방법에 대한 설명중 틀린것은? <strong>(2)번</strong></p>
<p>1) 연속 할당은 외부단편화가 발생할수 있다
2) 연결 할당은 파일에 보조기억장치 내에 파일을 <del>연속적인 블록으로</del> 할당하는 방식이다
3) 색인 할당은 파일의 모든 블록 주소를 색인 블록에 모아 관리하는 방식이다
4) 파일 시스템은 블록 단위로 파일을 읽고 쓴다</p>
<p>2번 FAT파일 시스템설명으로 틀린것은?<strong>(4)번</strong></p>
<p>1) 연결 할당 기반 파일 시스템이다
2) FAT를 사용하는 파일 시스템이다
3) 파일의 속성은 디렉터리 엔트리에 명시된다
4) <del>블록마다 다음 블록의 주소를 저장한다</del></p>
<p>3번 유닉스 파일 시스템에 대한 설명으로 틀린것은? <strong>(1)번</strong></p>
<p>1) <del>연속 할당</del> 기반 파일 시스템이다
2) i-node는 파일의 데이터 블록 주소를 저장한다
3) 파일읠 크기가 크면 i-node는 단일 간접 블록, 이중 간접 블록, 삼중 간접 블록을 가리킨다
4) 파일의 속성은 i-node에 명시된다</p>
<p>4번 파티셔닝과 포매팅에 대한 설명을 틀린것은? <strong>(1)번</strong></p>
<p>1) 파티셔닝과 포매팅 작업을 거치지 <del>않고도</del> 파일 시스템을 이용할수 있다
2) 파티셔닝은 보조기억장치에 논리적인 영역을 구획하는 작입입다
3) 포매팅 작업을 거치면 파일 시스템이 결정된다
4) 파티션마다 각기 다른 파일 시스템을 이용할수 있다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_6주]chapter14 가상 메모리]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B46%EC%A3%BCchapter14-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B46%EC%A3%BCchapter14-%EA%B0%80%EC%83%81-%EB%A9%94%EB%AA%A8%EB%A6%AC</guid>
            <pubDate>Thu, 01 Feb 2024 15:42:52 GMT</pubDate>
            <description><![CDATA[<h3 id="연속-메모리-할당">연속 메모리 할당</h3>
<ul>
<li>메모리내 프로세스를 연속적으로 할당하는 방식</li>
</ul>
<h3 id="스와핑">스와핑</h3>
<ul>
<li>스와핑(swapping) : 메모리에 적재된 프로세스가 사용되지 않을때 보조기억장치영역으로 내보내고 생긴 메모리공간에 다른프로세스를 적재하여 실행하는 방식</li>
<li>스왑영역(swap space) : 프로세스를 내보내는 보조기억 장치 영역</li>
<li>스왑아웃(swap-out) : 현재 실행되지 않는 프로세스가 메모리에서 스왑영역으로 옮겨지는 것</li>
<li>스왑인(swap-in) : 스왑영역에 있던 프로세스가 다시 메모리로 옯겨지는 것(물리 주소는 바뀔수 있음)</li>
<li>스와핑을 이용하면 실제 메모리 공간 보다 프로세스가 요구하는 메모리 공간이 큰 경우에도 프로세스들을 동시에 실행 할수 있다</li>
</ul>
<h3 id="메모리-할당">메모리 할당</h3>
<ul>
<li>메모리 빈공간이 여러개 있을때 할당하는 방법<ol>
<li>최초 적합</li>
<li>최적 적힙</li>
<li>최악 적합</li>
</ol>
</li>
</ul>
<ol>
<li>최초 적합(first fit)<ul>
<li>운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재가능한 공간을 발견하면 바로 배치하는 방법</li>
<li>검색을 최소한으로 할 수있어서 빠른 적재가 가능함</li>
</ul>
</li>
<li>최적 적합(best fit)<ul>
<li>운영체제가 빈공간을 모두 검색해본 후 프로세스가 적재될수 있는 가장 작은 공간에 배치하는 방법</li>
</ul>
</li>
<li>최악 적합(worst fit)<ul>
<li>운영체제가 빈공간을 모두 검색해본 후 프로세스가 적재될수 있는 공간중 가장 큰 공간에 배치하는 방법</li>
</ul>
</li>
</ol>
<h3 id="외부단편화extranal-fragmentation">외부단편화(extranal Fragmentation)</h3>
<ul>
<li>연속적 메모리 할당 환경에서 메모리 사이에 작은 공간이 생김</li>
<li>빈 공간은 하난의 프로세스를 할당하기 어려울 만큼 작아서 메모리가 낭비되는 현상을 외부단편화라고 함</li>
</ul>
<h3 id="압축compacting">압축(compacting)</h3>
<ul>
<li>외부단편화를 해결하는 방법</li>
<li>메모리내에 흩어져있는 프로세스를 재배치 시켜서 작은 공간을 큰 공간으로 만드는 과정</li>
<li>단점 <ul>
<li>압축하는 동안 시스템이 하는일이 중지됨</li>
<li>오버해드 야기(메모리내용을 옯기기 떄문에)</li>
<li>어떤 프로세스를 옮겨야하는지 명확한 방법을 정하기 어려움</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/e4b4792d-d6f3-4bf8-9c70-a2e86ea11483/image.png" alt=""></p>
<h3 id="가상메모리">가상메모리</h3>
<ul>
<li>가상메모리 : 실행하고자하는 프로그램의 일부만 메모리에 적재해서 실제 물리 메모리크기보다 더 큰 프로세스를 실행할수 있는 기술</li>
<li>가장메모리 관리기법<ul>
<li>페이징 : 현재 대부분 운영체제가 사용하는 기법</li>
<li>세그멘테이션</li>
</ul>
</li>
</ul>
<h3 id="페이징">페이징</h3>
<ul>
<li>프로세스의 논리 주소공간을 페이지 단위로 자르고  메모리공간을 같은 페이지 단위로 나눠서 페이지를 프레임에 할당하는 방법</li>
<li>페이지(page) : 프로세스를 자르는 일정 단위</li>
<li>프레임(frame): 메모리 물리 주소공간을 같은 페이지 단위로 나눈 것</li>
<li>페이징 시스템에서 스와핑을 사용할 수 있음<ul>
<li>페이지 단위로 페이지아웃, 페이지인 된다</li>
<li>하나의 프로세스를 실행하는데 전체 프로세스가 메모리에  적재되지 않아도 되기 때문에 스와핑을 사용할 수 있음</li>
</ul>
</li>
</ul>
<h3 id="페이지-테이블">페이지 테이블</h3>
<ul>
<li>프로세스가 불연속적으로 배치 되어있으면 CPU가 다음에 실행할 명령어 위치를 찾기 어려워짐</li>
<li>페이지 테이블(page table) : <ul>
<li>현재 어떤 페이지가 어떤 프레임에 할당되었는지 알려주는 표</li>
<li>프로세스가 물리주소는 불연속 배치일때 논리주소는 연속적으로 배치되도록 이용하는 것 </li>
<li>메모리에 적재되어 있음</li>
</ul>
</li>
<li>페이지 테이블 베이스 레지스터(PTBR:Page Table Base Register) : 프로세스의 페이지 테이블이 적재된 주소를 가지고 있음</li>
</ul>
<h3 id="tbltranslation-lookside-buffer">TBL(Translation Lookside Buffer)</h3>
<ul>
<li>CPU가 메모리에 두번접근(페이지 테이블, 프레임)하는 문제를 해결하기 위해 TBL을 사용함</li>
<li>페이지 테이블 캐시메모리 역할을 하며 일부 내용을 저장함</li>
<li>최근에 사용된 페이지 위주로 가져와 저장함</li>
<li>TBL히트(TBL hit) : CPU가 발생한 논리주소에 대한 페이지 번호가 TBL에 있는 경우. 메모리 접근은 한번만 하면 됨</li>
<li>TBL미스(TBL miss) :  CPU가 발생한 논리주소에 대한 페이지 번호가 TBL에 없는 경우.</li>
</ul>
<h3 id="내부단편화">내부단편화</h3>
<ul>
<li>페이징이 내부단편화 문제를 발생할수 있음</li>
<li>프로세스가 모두 페이지단위로 자를수 없어서 생기는 메모리 낭비현상</li>
<li>내부단편화를 발생하지 않고 너무 크기않은 페이지 크기를 정하는것이 중요함</li>
</ul>
<h3 id="페이징의-주소변환">페이징의 주소변환</h3>
<ul>
<li>페이징 시스템에서는 논리주소가 페이지번호와 변위로 이루어져 있음</li>
<li>페이지번호 : 접근하려는 페이지 번호</li>
<li>변위 : 접근하려는 주소가 프레임의 시작에서 얼마나 떨어져 있는지에 대한 정보</li>
<li>논리주소/페이지번호/변위 → 물리주소/프레임번호/변위</li>
</ul>
<h3 id="페이지-테이블-엔트리pte--page-table-entry">페이지 테이블 엔트리(PTE : Page Table Entry)</h3>
<ul>
<li>페이지테이블의 행의 의미함</li>
<li>페이지테이블의 유효한 정보<ol>
<li>유효비트</li>
<li>보호비트</li>
<li>참조비트</li>
<li>수정비트</li>
</ol>
</li>
</ul>
<ol>
<li><p>유효비트(vaild bit)</p>
<ul>
<li>현재 해당 페이지에 접근이 가능한지 알 수 있음</li>
<li>현재 페이지가 메모리에 적재되어 있는지 보조기억장치에 적재되어있는지 알려줌</li>
<li>1이면 메모리에 적재되어있음. 0이면 메모리에 없음</li>
<li>페이지 폴트(page fault) : 유효비트가 0일때 페이지에 접근하기 위해서 발생시키는 예외</li>
</ul>
</li>
<li><p>보호비트(protection bit) </p>
<ul>
<li>보호비트를 통해서 페이지가 읽기쓰기가가 가능한가, 읽기만 가능한가 알 수 있음</li>
<li>1이면 읽고쓰기가 가능. 0이면 읽기만 가능</li>
<li>3개 분류로 구현가능<ul>
<li>읽기 r(Read), 쓰기 w(Write), 실행 x(eXecute)</li>
<li>1이면 가능 0이면 불가능</li>
</ul>
</li>
</ul>
</li>
<li><p>참조비트(reference bit)</p>
<ul>
<li>CPU가 페이지에 접근한적이 있는지 알려 줌</li>
<li>1이면 CPU가 읽거나 쓴 페이지. 0이면 읽고 쓴적이 없는 페이지</li>
</ul>
</li>
<li><p>수정비트(modified bit)</p>
<ul>
<li>해당 페이지에 데이터를 쓴적이 있는지 없는지 수정여부를 알려줌</li>
<li>1이면 수정된적이 있는 페이지. 0이면 수정된적없는 페이지</li>
<li>페이지가 메모리에서 사라질때 보조기억장치에 쓰기작업이 필요가 있는지 없는지 판단하기 위해 필요함</li>
</ul>
</li>
</ol>
<p><img src="https://velog.velcdn.com/images/study_record/post/9ccfa786-5765-4bc2-a919-7ff07195c043/image.png" alt=""></p>
<h3 id="페이징-이점">페이징 이점</h3>
<ul>
<li>페이징을 사용하면  프로세스간에 페이지를 공유할 수 있다</li>
<li>쓰기 시 복사(Copy on Write) <ul>
<li>부모프로세스와 같은 자식프로세스를 생성하고 둘 중 하나가 페이지에 쓰기 작업을 하는 순간 페이지 복사본이 생성됨</li>
</ul>
</li>
</ul>
<h3 id="계층적-페이지">계층적 페이지</h3>
<ul>
<li>프로세스를 이루는 모든 페이지 테이블 엔트리를 항상 메모리에 유지 하지 않는 방법</li>
<li>페이지 테이블을 여러개로 나누고 outer 테이블(나눠진 테이블을 가리키는 테이블)두는 방식</li>
<li>논리주소의 형태<ul>
<li>바깥 페이지 번호</li>
<li>안쪽 페이지 번호</li>
<li>변위</li>
</ul>
</li>
<li>바깥 페이지 번호를 통해서 페이지 테이블의 페이지 찾기
 → 페이지 테이블의 페이지를 통해서 프레임번호를 찾기
 → 변위로 찾기 
 → 물리주소 얻기</li>
</ul>
<h3 id="요구페이징">요구페이징</h3>
<ul>
<li>요구페이징 :  프로세스를 메모리에 적재할때 모든 페이지를 적재하지 않고 필요한 페이지만 적재하는 기법</li>
<li>페이지교체와 프레임할당을 사용해서 요구페이징을 수행함</li>
</ul>
<h3 id="페이지교체-알고리즘">페이지교체 알고리즘</h3>
<ul>
<li>메모리에서 당장 필요하지 않는 페이지를 내보낼때 어떤 페이지를 교체할지 결정하는 알고리즘</li>
<li>페이지폴트 횟수<ul>
<li>페이지 폴트 횟수는 페이지 참조열로 알 수 있음</li>
<li>페이지 폴트 횟수가 적은것이 좋은 페이지교체 알고리즘</li>
</ul>
</li>
<li>페이지교체 알고리즘 종류<ol>
<li>FIFO 페이지교체 알고리즘</li>
<li>최적 페이지교체 알고리즘</li>
<li>LRU 페이지교체 알고리즘</li>
</ol>
</li>
</ul>
<p>1.FIFO(first-in frist-out) 페이지교체 알고리즘</p>
<ul>
<li>메모리에 가장 먼저 알로아노 페이지부터 내보냄</li>
<li>초기에 적재된 페이지는 계속 사용될수도 있기때문에 처음 들어왔다고 내보내는것이 항상 맞지는 않</li>
</ul>
<p>2.최적 페이지교체 알고리즘</p>
<ul>
<li>CPU에의해 참조되는 횟수를 고려하는 페이지교체 알고리즘</li>
<li>앞으로 사용빈도가 가장 낮은 페이지를 교체한다</li>
<li>폴트 발생 빈도가 낮은 알고리즘</li>
<li>앞으로 오랫동안 사용하지 않을 페이지를 예측하기 힘들어서 구현이 어려움 → 다른 페이지교체 알고리즘을 평가할때 사용됨</li>
</ul>
<p>3.LRU 페이지교체 알고리즘</p>
<ul>
<li>오랫동안 사용하지 않은 페이지를 교체하는 알고리즘</li>
<li>최근사용하지 않은 페이지는 앞으로도 사용되지 않을것이라고 생각하고 만든 알고리즘<h3 id="멀티프로그래밍-정도">멀티프로그래밍 정도</h3>
<img src="https://velog.velcdn.com/images/study_record/post/22be63d2-6e8c-456c-afb9-0c7ae17befbf/image.png" alt=""></li>
</ul>
<h3 id="스래싱">스래싱</h3>
<ul>
<li>페이지 폴트가 발생하는 이유<ul>
<li>페이지를 교체할 때</li>
<li>프로세스가 사용할수 있는 프레임이 적을 때</li>
</ul>
</li>
<li>스래싱(thrashing) : 프로세스가 실행되는 시간보다 페이징에 시간을 더 많이 사용해서 성능이 저해되는 문제를 의미함</li>
<li>스래싱 발생 원인은 각 프로세스가 필요로 하는 최소한의 프레임수가 보장되지 않음 → 적절한 프레임할당이 중요함</li>
</ul>
<h3 id="프레임-할당-방식">프레임 할당 방식</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/06df9a44-1f95-4236-a4fc-19c8ece7b665/image.png" alt=""></p>
<ul>
<li>균등 할당 방식<ul>
<li>프로세스의 크기가 다른데 모두 같은 수의 프레임을 할당하는것을 비효율적인 방법</li>
</ul>
</li>
<li>비례 할당 방식<ul>
<li>프로세스 크기가 크면 프레임을 더 많이 할당하는 방법</li>
</ul>
</li>
<li>작업 집합 모델<ul>
<li>작업집합(working set) : 실행중인 프로세스가 일정 시간동안 참조한 페이지의 집합</li>
<li>일정 시간동안 참조한 페이지수 만큼 프레임을 할당함</li>
</ul>
</li>
<li>페이지 폴트 빈도(PFF:Page-Fault Frequency)<ul>
<li>가정<ul>
<li>페이지폴트율이 높으면 프로세스는 적은 프레임을 가지고있다</li>
<li>페이지폴트율이 낮으면 프로세스는 많은 프레임을 가지고있다</li>
</ul>
</li>
<li>페이지 폴트율의 상한선과 하한선을 정하고 그 범위 안에서 프레임을 할당하는 방법
<img src="https://velog.velcdn.com/images/study_record/post/388f279a-a6b6-4189-a415-8558307975dd/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="📚마무리문제">📚마무리문제</h3>
<h4 id="p400-401">P.400-401</h4>
<p>1번 메모리 할당방식에 대한 올바은 것을 찾아쓰기📌<strong>기본미션</strong>
<strong>(1)최초 적합 (2)최악 적합 (3)최적 적합</strong></p>
<ul>
<li><strong>(1)</strong>최초로발견한 적재 가능한 빈 공간에 프로세스를 배치하는 방식</li>
<li><strong>(2)</strong>프로세스가 적재될수 있는 가장 큰 공간에 프로세스를 배치하는 방식</li>
<li><strong>(3)</strong>프로세스가 적재될수 있는 가장 작은 공간에 프로세스를 배치하는 방식</li>
</ul>
<p>2번 외부단편화에대한 설명으로 틀린것은? <strong>(4)번</strong></p>
<p>1) 외부단편화가 발생하면 메모리가 낭비된다
2) 가상메모리 기법중 페이징을 사용하면 외부단편화를 해결할 수 있다
3) 메모리 압축을 통해 외부 단편화를 해결할 수 있다
4) 외부 단편화가 발생한 공간에 <del>모든 프로세스를 배채할 수 있다</del></p>
<p>3번 메모리 스와핑에 대한 설명으로 옳은것은? <strong>(4)번</strong></p>
<p>1) 메모리에서 보조기억장치로 프로세스를 내쫓는것을 <del>스왑인</del>이라고 한다
2) 보조기억장치에서 메모리로 프로세스를 적재하는것을 <del>스왑아웃</del>이라고 한다
3) <del>CPU</del>를 관리하는 기법인다
4) 메모리에서 사용되지 않는 일부 프로세스를 보조기억장치로 내보내고 실행할 프로세스를 메모리에 적재하는 방식</p>
<p>4번 연속메모리할당에 대한 설명으로 틀린것은? <strong>(1)번</strong></p>
<p>1) 외부단편화가 <del>발생하지 않는다</del>
2) 프로세스를 메모리에 연속적으로 할당하는 방법이다
3) 메모리 스와핑을 이용할수 있다
4) 최초적합, 최적적합, 최악적합 방식으로 프로세스를 적재할수 있다</p>
<h4 id="p422-423">P.422-423</h4>
<p>1번 페이징에 대한 설명중 틀린것은? <strong>(4)번</strong></p>
<p>1) 페이징은 가상 메모리 관리 기법이다
2) 페이징을 이용하면 물리 메모리보다 큰 프로세스도 실행할수 있다
3) PTBR은 각 프로세스가 적재된 페이지 테이블을 가리킨다
4) TLB히트가 발생하면 CPU는 메모리에 <del>두번 접근해야 한다</del></p>
<p>2번 그림에 대한 설명중 틀린것을 골라라 <strong>(3)번</strong>
<img src="https://velog.velcdn.com/images/study_record/post/105d82cd-36e6-4351-b736-1721dbad92d9/image.png" alt=""></p>
<p>1) 2번 페이지는 수정된 적이 있다
2) 2번 페이지는 CPU가 읽고 쓰고 실행할수 있다
3) 2번 페이지는 메모리에 적재되어 <del>있지 않다</del>
4) 2번 페이지는 CPU에의해 참조된 적이 없다</p>
<p>3번 페이지 테이블과 관련한 설명중 틀린것을 골라라 <strong>(2)번</strong></p>
<p>1) 프로세스마다 페이지 테이블을 가지고 있다
2) 페이지테이블을 사용하는 컴퓨터는 페이징 기법을 <del>사용하지 못한다</del>
3) PTBR은 각 프로세스의 페이지 테이블을 가리킨다
4) 페이지테이블은 특정 페이지가 어떠한 프레임에 적재되어있는지 알려준다</p>
<p>4번 TLB와 관련한 설명으로 옳은것을 골라라 <strong>(1)번</strong></p>
<p>1) 페이지 테이블의 캐시 메모리이다
2) TLB히트가 일어나면 메모리를 <del>두번</del> 참조해야 한다 <strong>한번만</strong>
3) TLB미스가 일어나면  메모리를 <del>한번만</del> 참조해도 된다 <strong>두번만</strong>
4) TLB는 <del>입출력장치의 일종이다</del></p>
<h4 id="p-437">P. 437</h4>
<p>1번 프로세스가 사용할수 있는 프레임 3개, 페이지 참조열을 아래와 같을때 LRU페이지 교체 알고리즘으로 아래 페이지를 참조한다면 몇번의 페이지 폴트가 발생하는가? <strong>3번</strong> <strong>📌선택 미션</strong>
<img src="https://velog.velcdn.com/images/study_record/post/b73fc55b-f489-47b6-a1ac-72fde19ecffd/image.png" alt=""></p>
<p>2번 프레임 할당의 설명으로 틀린것은? <strong>(4)번</strong></p>
<p>1) 균등 할당은 모든 프로세스에 동일한 프레임을 배분하능 방법이다
2) 비례 할당은 프로세스 크기의 따라 프레임을 배분하는 방법이다
3) 작업 집합 모델 기반 프레임할당은 작업집합의 크기만큼만 프레임을 할당하는 방식이다
4) 페이지폴트 기반 프레임 할당은 페이지 폴트의 상한선과 <del>무관하게</del> 프레임을 할당하는 방식이다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_5주]chapter13 교착 상태]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B45%EC%A3%BCchapter13-%EA%B5%90%EC%B0%A9-%EC%83%81%ED%83%9C</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B45%EC%A3%BCchapter13-%EA%B5%90%EC%B0%A9-%EC%83%81%ED%83%9C</guid>
            <pubDate>Thu, 01 Feb 2024 06:49:53 GMT</pubDate>
            <description><![CDATA[<h3 id="교착상태deadlock">교착상태(Deadlock)</h3>
<ul>
<li><p>일어나지 않을 사건을 기다리며 진행이 멈추는 현상</p>
</li>
<li><p>식사하는 철학자 문제 : 교착상태 설명해주는 상황</p>
<ul>
<li><p>원탁에 다섯명의 철학자가 앉아 있고 철학자 사이에 포크가 있으며 포크를 두개를 사용해야만 음식을 먹을수 있음 
→ 다섯명이 동시에 왼쪽 포크를 사용하면 누구도 식사 불가능
→ &quot;교착상태&quot;에 빠졌다</p>
</li>
<li><p>철학자 = 프로세스 or 스레드
포크 = 자원
생각하는 것 = 자원을 기다리는 것
포크는 한번에 하나의 스레드에 접근 = 임계구역
<img src="https://velog.velcdn.com/images/study_record/post/47c14016-94a6-4be0-83c8-7596481396a7/image.png" alt=""></p>
</li>
</ul>
</li>
<li><p>교착 상태를 해결하는 방법</p>
<ul>
<li>교착상태가 발생했을때 상황을 표현하기</li>
<li>교착상태가 생기는 근본적인 원인 파악 하기<h3 id="자원-할당-그래프resource-allocation-graph">자원 할당 그래프(Resource allocation graph)</h3>
</li>
</ul>
</li>
<li><p>어떤 프로세스가 어떤 자원을 활용하고 있는지, 프로세스가 어떤 자원을 기다리고 있는지 표현하는 그래프</p>
</li>
<li><p>자원 할당 그래프를 그리는 규칙</p>
<ul>
<li>프로세스는 원, 자원종류는 사각형으로 그리기</li>
<li>사용할수 있는 자원의 개수는 사각형내 점으로 표시하기</li>
<li>프로세스가 자원을 할당받아 사용중이면 화살표로 표시하기 (예시) 하드디스크 → 프로세스A</li>
<li>프로세스가 자원을 기다리고 있으면 화살표로 표시하기
(예시) 하드디스크 ← 프로세스A</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/74e962bc-265f-4f1b-a095-5fca183c6f62/image.png" alt=""></p>
<h3 id="교착상태-발생조건">교착상태 발생조건</h3>
<ul>
<li><p>교착상태 발생 조건</p>
<ul>
<li>하나라도 만족하지 않으면 교착상태 발생 하지 않음</li>
<li>모두 만족되면 교착상태 발생 가능성이 생김</li>
</ul>
<ol>
<li>상호배제</li>
<li>점유와 대기</li>
<li>비선점</li>
<li>원형 대기</li>
</ol>
<table>
<thead>
<tr>
<th align="center">조건</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">상호배제(mutual exclusion)</td>
<td align="center">자원 이용이 한번에 하나의 프로세스만 가능하기 때문에 교착상태가 발생</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">프로세스가 사용하는 자원을 다른 프로세스가 사용할수 없어서 교착상태가 발생</td>
</tr>
<tr>
<td align="center">--------------------------------------</td>
<td align="center">-----------------------------------------------------------------------------------------</td>
</tr>
<tr>
<td align="center">점유와 대기(hold and wait)</td>
<td align="center">자원을 할당받은 상태에서 다른 자원을 할당 받기를 기다릴때 교착상태 발생</td>
</tr>
<tr>
<td align="center">---------------------------------------</td>
<td align="center">-----------------------------------------------------------------------------------------</td>
</tr>
<tr>
<td align="center">비선점(nonpreemptive)</td>
<td align="center">프로세스가 자원을 비선점 하고있어서 교착상태가 발생</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">어떤 프로세스고 강제로 자원을 뺏지못해서 교착상태가 발생</td>
</tr>
<tr>
<td align="center">----------------------------------------</td>
<td align="center">---------------------------------------------------------------------------------------</td>
</tr>
<tr>
<td align="center">원형 대기(circular wait)</td>
<td align="center">프로세스들과 자원이 원의 형태일 때 발생할 수 있음</td>
</tr>
</tbody></table>
</li>
</ul>
<h3 id="교착상태-해결방법">교착상태 해결방법</h3>
<ul>
<li>교착상태 예방(사전 방법)<ul>
<li>교착상태 발생 조건에 부합하지 않게 자원을 분배하는 방법</li>
</ul>
</li>
<li>교착상태 회피(사전 방법)<ul>
<li>교착상태 위험이 있을시 자원을 할당하지 않는 방법</li>
</ul>
</li>
<li>교착상태 회복(사후 방법)<ul>
<li>제약없이 자원을 할당하다가 교착상태가 검출될때 교착상태를 회복하는 방법</li>
</ul>
</li>
</ul>
<h3 id="교착상태-예방">교착상태 예방</h3>
<ul>
<li>교착상태 발생 필요조건을 충족하지 못하게 하는 방법</li>
</ul>
<ol>
<li>상호배제 제거하기<ul>
<li>모든 자원을 공유가능하게 만든다 </li>
<li>이 방법은 현실적으로 사용하기는 어렵다</li>
</ul>
</li>
<li>점유와 대기 제거하기<ul>
<li>운영체제가 특정프로세스에 자원을 모두 할당하거나 전혀 할당하지 않는 방식</li>
<li>자원의 활용률이 낮아짐(대기가 길어짐)</li>
<li>많은 자원을 활용하는 프로세스가 자원을 사용할 타이밍을 잡기가 어려워 진다</li>
</ul>
</li>
<li>비선점 제거하기<ul>
<li>프로세스가 이용중인 자원을 빼앗아 오는 방법</li>
<li>일부자원을 사용할때는 효과가 있으나 모든 자원에 적용할수 없음 (CPU자원을 가능하나 프린터 자원은 어렵다)</li>
</ul>
</li>
<li>원형대기 제거하기<ul>
<li>모든 자원에 번호를 붙이고 오름차순으로 자원할당 하는 방법</li>
<li>상호배제, 점유와 대기, 비선점 제거방법보다 현실적임</li>
<li>수많은 자원에 번호를 붙이는것은 어려움. 번호를 붙이는 방법에 따라서 자원활용률이 떨어짐</li>
</ul>
</li>
</ol>
<h3 id="교착상태-회피">교착상태 회피</h3>
<ul>
<li><p>교착상태가 발생하지 않을 정도로만 자원을 할당하는 방식 </p>
</li>
<li><p>전제 조건: 자원에 많으면 교착상태가 발생하지 않는다 = 한정된 자원의 무분별한 할당으로 교착상태가 발생</p>
</li>
<li><p>교착상태 회피관련 용어</p>
<ul>
<li>안전순서열(safe sequence) : 교착상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서</li>
<li>안전 상태(safe state) <ul>
<li>교착상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될수 있는 상태 </li>
<li>안전순서열대로 프로세스에 자원을 배분한 상태</li>
</ul>
</li>
<li>불안전 상태(unsafe state) <ul>
<li>교착상태가 발생할 수 있는 상황</li>
<li>안전 순서열이 없는 상황 </li>
</ul>
</li>
</ul>
</li>
<li><p>안전 상태 일때 </p>
<ul>
<li>자원사용 방법 : 운영체제에 자원 요청 → 운영체제에게 자원 할당 받음 → 자원사용이 끝나면 자원을 반환
<img src="https://velog.velcdn.com/images/study_record/post/bdb33f12-c688-4994-aae9-9260531a0232/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/ffc1db4f-0bb5-49fa-bd59-baa8b063af52/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/9fc11a21-08de-4721-9d5d-b4f8bc823cea/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/964f2b5f-311a-458a-8d24-eee7b8f936dc/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/788f2ba4-4c7c-4331-a2bd-9b48ece69036/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/83d4bd4d-c541-4b9f-ac5e-c14152725a37/image.png" alt=""></li>
</ul>
</li>
<li><p>불안전 상태 일때
<img src="https://velog.velcdn.com/images/study_record/post/8ced99bc-7f1a-4216-a582-e76c213227c4/image.png" alt=""></p>
<ul>
<li>P3에 자원 하나를 줌 
<img src="https://velog.velcdn.com/images/study_record/post/aec4983c-5e56-4db9-8d47-c663a76c8bb6/image.png" alt=""><br><img src="https://velog.velcdn.com/images/study_record/post/63838131-6ddb-4a29-a7eb-f0dde4d2f447/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/8b424c19-dee0-4ec1-b1bd-443f267c40f3/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="교착상태-검출-후-회복">교착상태 검출 후 회복</h3>
<ul>
<li>교착상태 검출 후 회복 : 교착상태를 인정하고 사후조치하는 방식</li>
<li>선점을 통한 회복<ul>
<li>교착상태가 해결될 때 까지 다른 프로세로부터 자원을 강제로 빼앗아 다른 프로세스에게 자원을 할당하는 방법 </li>
</ul>
</li>
<li>프로세스 강제 종료를 통한 회복<ul>
<li>교착상태에 놓인 프로세스를 모두 강제종료 함 
→ 여러프로세스의 작업 내용을 잃음</li>
<li>교착상태가 없어 질때 까지 한 프로세스를 강제종료 함
→ 교착상태가 없어지는지 계속 확인해야 해서 오버해드가 발생됨<h3 id="교착상태-무시">교착상태 무시</h3>
</li>
</ul>
</li>
<li>타조 알고리즘<ul>
<li>교착상태를 무시하는 방법</li>
<li>가끔생기는 문제로 무시한다 </li>
</ul>
</li>
</ul>
<h3 id="마무리-문제📚">마무리 문제📚</h3>
<h4 id="p374-375">P.374-375</h4>
<p>1번 교착상태설명으로 틀린것 고르기 <strong>(4)번</strong></p>
<p>1) 교착 상태는 다양한 상황에서 발생할수 있다
2) 교착 상태는 자원 할당 그래프로 표현 할수 있다
3) 교착 상태는 일어나지 않을 사건을 기다리며 무한히 대기하는 현상을 의미한다
4) 식사하는 철학자 문제에서 단 한명의 철학자가 식사해도 <del>교착상태가 발생한다</del></p>
<p>2번 교착상태가 발생할수 있는 네가지 조건
*<em>정답 : 상호배제, 원형 대기, 비선점, 점유와 대기 *</em></p>
<p>3번 두가지중 교착 상태가 발생할 위험이 있는 그래프는? <strong>(2)번</strong>
1)<img src="https://velog.velcdn.com/images/study_record/post/d7f0bcaf-dc01-4593-93e3-180fd79aa102/image.png" alt="">
2)<img src="https://velog.velcdn.com/images/study_record/post/1041c4d2-e328-4877-b5a3-d172cf6cfa46/image.png" alt=""></p>
<h4 id="p386-387">P.386-387</h4>
<p>1번 교착상태를 회복하는 방법에대해 틀린것은? <strong>(2)번</strong></p>
<p>1) 교착상태가 발생하는 조건 중 하나를 충족하지 않게하면 교착상태를 예방할수 있다
2) 교착상태가 발생했으면 <del>이를 회복할수 없다</del>
3) 안전상태를 유지할수 있는 경우에만 자원을 할당하면 교착상태를 회피할수 있다
4) 교착상태의 검출 및 회피방식에서 운영체제는 주기적으로 교착상태발생 여부를 검사한다</p>
<p>2번 다음과 같은 상황에서 프로세느 P2에 자원 두개를 나누어 줬다고 가장한다. 프로세스P2가 실행을 올바르게 종료한 뒤 자원을 반납하면 남는 자원은 몇개인가? <strong>5개</strong></p>
<table>
<thead>
<tr>
<th align="center">프로세스</th>
<th align="center">요구량</th>
<th align="center">현재사용량</th>
</tr>
</thead>
<tbody><tr>
<td align="center">P1</td>
<td align="center">10</td>
<td align="center">5</td>
</tr>
<tr>
<td align="center">P2</td>
<td align="center">4</td>
<td align="center">2</td>
</tr>
<tr>
<td align="center">P3</td>
<td align="center">9</td>
<td align="center">2</td>
</tr>
</tbody></table>
<table>
<thead>
<tr>
<th align="center">할당가능 자원</th>
<th align="center">할당한 자원</th>
<th align="center">남은자원</th>
</tr>
</thead>
<tbody><tr>
<td align="center">12</td>
<td align="center">9</td>
<td align="center">3</td>
</tr>
</tbody></table>
<p>3번 교착상태에 대한 대처방법중 타조 알고리즘에대한 설명은?<strong>(2)번</strong></p>
<p>1) 교착상태를 회피하는 방법
2) 교차상태를 무시하는 방법
3) 교착상태를 검출하고 회복하는 방법
4) 교착상태를 예방하는 방법</p>
<p>4번 교착상태 예방에 대한 설명을 틀린것은? <strong>(4)번</strong></p>
<p>1) 상호배제 조건을 없애므로써 교착상태를 예방할 수 있다
2) 점유와 대기 조건을 없앰으로써 교착 상태를 예방할 수 있다
3) 비선점 조건을 없앰으로써 교착상태를 예방할 수 있다
4) 원형대기 조건을 <del>추가함으로써</del> 교착상태를 예방할 수 있다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_5주]chapter12 프로세스동기화]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B45%EC%A3%BCchapter12-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%8F%99%EA%B8%B0%ED%99%94</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B45%EC%A3%BCchapter12-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%8F%99%EA%B8%B0%ED%99%94</guid>
            <pubDate>Mon, 29 Jan 2024 06:17:44 GMT</pubDate>
            <description><![CDATA[<h3 id="프로세스-동기화">프로세스 동기화</h3>
<ul>
<li>프로세스 동기화 :  프로세스 사이의 수행시기를 맞추는 것</li>
<li>동기화의 종류<ul>
<li>실행 순서 제어 : 프로세스를 올바른 순서대로 실행하기</li>
<li>상호배제 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기</li>
</ul>
</li>
</ul>
<ol>
<li>실행 순서 제어 동기화<ul>
<li>동시에 실행되는 프로세스를 올바른 순서대로 실행하는 것
ex) writer프로세스와 reader프로세스가 있을때 writer프로세스가 먼저 실행되고 reader프로세서 순으로 실행되어야 한다.
 왜냐하면 아무쓴것이 없는데 reader프로세스가 실행될수 없으니깐</li>
<li>특정 조건을 만족해야 실행이 가능한 상황에서 사용하는 동기화</li>
</ul>
</li>
<li>상호 배제(mutual exclusion) 동기화<ul>
<li>공유가 불가능한 자원의 동시 사용을 피하기 위해서 사용하는 알고리즘</li>
</ul>
</li>
</ol>
<h3 id="생산자와-소비자-문제">생산자와 소비자 문제</h3>
<ul>
<li>생산자 : 물건을 계속 생산</li>
<li>소비자 : 물건을 계속 소비</li>
<li>생산자와 소비자는 &lt;총합&gt;을 공유하고 있음</li>
<li>버퍼 : 생산자는 물건을 넣고 총합에서 1을 증가/ 소비자는 물건을 뺴고 총합에서 1을 뺌</li>
<li>생산자와 소비자가 각각의 작업을 완료하기 전에 총합을 수정하면 이상한 결과를 가져온다 </li>
</ul>
<h3 id="공유자원-임계구역-📌선택-미션">공유자원, 임계구역 📌선택 미션</h3>
<ul>
<li>공유자원 : 공동의 자원 ex)파일, 입출력장치, 보조기억장치</li>
<li>임계구역(critical section) : 동시에 실행하면 문제가 발생하는 자원에 접근하는 코드 영역을 의미함<ul>
<li>두개 이상의 프로세스가 임계구역이 진입하려 할수 없고 대기 해야함</li>
</ul>
</li>
<li>레이스 컨디션(race condition) : 잘못된 실행으로 여러 프로세스가 동시다발적으로 임계구역의 코드를 실행시켜 문제가 발생하는 현상    <ul>
<li>데이터의 일관성을 깨트리는 문제가 발생함</li>
<li>고급언어를 저급언어로 변환하고 저급언어의 문맥교환에서 발생 한다</li>
</ul>
</li>
</ul>
<h3 id="임계구역-문제-해결-방법-📌선택-미션">임계구역 문제 해결 방법 📌선택 미션</h3>
<ul>
<li>임계구역 문제 해결방법 = 상호 배제를 위한 동기화 방법</li>
</ul>
<ol>
<li>상호배제(mutual exclusion) 
: 한 프로세스가 임계구역에 진입했을때 다른 프로세스는 임계구역에 들어갈수 없다</li>
<li>진행(progress)
: 임계 구역에 어떤 프로세스도 진입하지 않았으면 임계구역에 진입하려는 프로세는 들어갈수 있다</li>
<li>유한대기(bounded waiting)
: 한 프로세스가 임계구역에 진입하고 싶다면 언젠가는 그 프로세스는 임계구역에 들어가야 한다(무한 대기가  없어야함)</li>
</ol>
<h3 id="동기화-도구">동기화 도구</h3>
<ol>
<li>뮤텍스 락</li>
<li>세마포</li>
<li>모니터</li>
</ol>
<h4 id="1-뮤텍스-락mutex-lockmutual-exclusion-lock">1. 뮤텍스 락(Mutex Lock:Mutual EXclusion lock)</h4>
<ul>
<li><p>동시에 접근하면 안되는 자원을 동시접근하지 못하도록 만든 도구</p>
</li>
<li><p>상호배제를 위한 도구</p>
</li>
<li><p>뮤텍스락 구현 방법</p>
<ul>
<li>자물쇠 역할 : 프로세스들이 공유하는 전역변수 lock</li>
<li>임계구역을 잠그는 역할 : acqurie 함수</li>
<li>임계구역의 잠금을 해제하는 역할 : release 함수</li>
</ul>
<ul>
<li><table>
<thead>
<tr>
<th align="center">구분</th>
<th align="center">acqurie 함수</th>
<th align="center">release 함수</th>
</tr>
</thead>
<tbody><tr>
<td align="center">정의</td>
<td align="center">프로세스가 임계구역에 진입하기 전에 호출하는 함수</td>
<td align="center">임계구역에서 작입이 끝나고 호출하는 함수</td>
</tr>
<tr>
<td align="center">----</td>
<td align="center">----------------------------------------------------------------------</td>
<td align="center">---------------------------------------------------------</td>
</tr>
<tr>
<td align="center">역할</td>
<td align="center">임계구역이 잠겨있으면 열리는것을 확인(lock → false 확인)</td>
<td align="center">잠겨있는 임계구역을 열어주는 함수(lock → false 변환)</td>
</tr>
<tr>
<td align="center"></td>
<td align="center">임계구역이 열려있으면 임계구역을 잠그는 함수(lock → true 변환)</td>
<td align="center"></td>
</tr>
</tbody></table>
</li>
<li>바쁜대기(busy wait) : 임계구역이 락인지 아닌지 끊임없이 확인하는 대기방식을 의미함<ul>
<li>락을 얻지못하면 대기 함</li>
<li>락을 획득하면 임계구역을 잠그고 임계구역에서 작업 함 </li>
<li>임계구역에서 빠져나올때는 락을 해제 <h4 id="2-세마포semaphone">2. 세마포(semaphone)</h4>
</li>
</ul>
</li>
</ul>
</li>
<li><p>공유자원이 여러개 있는 상황의 동기화 도구 </p>
</li>
<li><p>프로세스는 신호를 받고 대기와 임계구역 진입을 한다</p>
</li>
<li><p>세마포 구현 방법</p>
<ul>
<li>임계구역에 진입할수 있는 프로세스 개수 : 전역 변수 S</li>
<li>임계구역의 진입, 대기를 알려주는 신호 : wait 함수</li>
<li>대기하는 프로세스에 임계구역진입을 알려주는 신호 : signal 함수</li>
</ul>
</li>
<li><p>세마포를 이용하여 상호 배제 동기화 방식</p>
<ul>
<li>사용할수 있는 공유자원이 없는 상황 
→ wait함수가 해당 프로세스를 대기 상태로 만듦 
→ 프로세스의 PCB를 대기큐(세마포 대기 큐)에 넣음 
→ 임계구역의 있던 프로세스의 작업이 종료 됨 
→ signal함수를 호출 
→ 대기 큐에 있던 프로세스를 제거하고 프로세스를 준비상태로 변경 
→ 프로세스를 준비 큐로 이동</li>
</ul>
</li>
<li><p>세마포를 이용한 프로세스 순서 제어 방식</p>
<ul>
<li>변수 S를 0으로 지정</li>
<li>먼저 실행 할 프로세스 뒤 signal함수 붙이기</li>
<li>다음에 실행 할 프로세스 앞 wait함수 붙이기<h4 id="3-모니터">3. 모니터</h4>
</li>
</ul>
</li>
<li><p>공유자원과 인터페이스(공유자원 접근 통로)를 한번에 관리힐수 있는 동기화 도구</p>
</li>
<li><p>프로세스는 꼭 인터페이스를 통해서만 공유자원에 접근할 수 있음</p>
</li>
<li><p>프로세스의 큐를 생성해 모니터에 들어갈수 있게 관리함</p>
</li>
<li><p>조건변수 : 특정 조건을 바탕으로 프로세스를 실행하고 중단하기위한 변수로 실행순서를 제어한다</p>
<ul>
<li>wait, signal 연산을 수행</li>
<li>특정 프로세스가 실행조건이 되지 않았을때 wait을 통해 실행을 중단함</li>
<li>특정 프로세스가 실행될 조건이 충족되었을때 signal을 통해서 실행을 재개함
<img src="https://velog.velcdn.com/images/study_record/post/2133fb37-53ef-4126-a20d-b3b069399b23/image.png" alt=""></li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/55870490-00d2-4357-87cb-445d8813b2d2/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/1020f64b-39db-4553-895b-6bcdda540e67/image.png" alt=""></p>
<h3 id="📚마무리-문제">📚마무리 문제</h3>
<h4 id="p349">P.349</h4>
<p>1번 빈칸에 알맞은 단어 넣기 <strong>(1)실행 순저 제어</strong> <strong>(2)상호배제</strong></p>
<ul>
<li>(1)를 위한 동기화 : 프로세스를 올바른 순서대로 실해하기</li>
<li>(2)를 위한 동기화 : 동시에 접근해서는 안되는 자원에 하나의 프로세스만 접근하게 하기</li>
</ul>
<p>2번 임계 구역의 설명으로 틀린것을 골라라 *<em>(1)번 *</em></p>
<p>1) 임계 구역에서 여러개의 프로세스가 동시에 실행되도 <del>무방하다</del>
2) 임계 구역에서 여러 프로세스가 동시에 실행할 경우 레이스 컨디션이 발생한다
3) 임계구역에서 실행회는 프로세스가 잇아면 다른 프로세스는 기다려야 한다
4) 운영체제느 임계구역을 관리한다</p>
<h4 id="p363">P.363</h4>
<p>1번 뮤텍스, 세마포에대한 설명으로 틀린것은? <strong>(4)번</strong> 📌<strong>기본미션</strong></p>
<p>1) 뮤텍스란 임계구역을 잠근뒤 임계구역에 진입함으로써 상호배제를 위한 동기화를 이룬다
2) 세마포는 공유자원이 여러개있는 상황에서도 사용할수 있다
3) 세마포를 이용해 프로세스 실행순서제어를 위한 동기화를 이룰수 있다
4) 세마포를 이용하면 <del>반드시</del> 바쁜 대리를 해야한다</p>
<p>2번 조건변수 X,Y가 있다고 가정하자. 스레드A는 실행과정에서 X.wait를 호출하고 스레드B는 Y.wait를 호출했다. 스레드C가 y.signal을 호출했을때 스레드A와 스레드B중 실행이 재개되는 스레드는??? 
<strong>정답 - 스레드B</strong></p>
<p>3번 (1),(2)에 들어갈 단어는? <strong>(1)상호 배제 (2)실행 순서 제어</strong></p>
<blockquote>
<p>세마포를 이용하면 동시에 실행되는 프로세스 혹은 스레드 간에 <strong>(1)</strong>를 위한 동기화와 <strong>(2)</strong>를 위한 동기화를 할 수 있다</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_번외]파본교환 후기]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B4%EB%B2%88%EC%99%B8%ED%8C%8C%EB%B3%B8%EA%B5%90%ED%99%98-%ED%9B%84%EA%B8%B0</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B4%EB%B2%88%EC%99%B8%ED%8C%8C%EB%B3%B8%EA%B5%90%ED%99%98-%ED%9B%84%EA%B8%B0</guid>
            <pubDate>Sat, 27 Jan 2024 08:56:01 GMT</pubDate>
            <description><![CDATA[<p>혼공단시작한지 벌써 4주차
4주차 커리큘럼인 챕터10을 읽으려고 펴보니 책이<img src="https://velog.velcdn.com/images/study_record/post/e97be6d6-1d69-4389-8ced-fbf5799767a7/image.jpg" alt="">
뒤쪽도
<img src="https://velog.velcdn.com/images/study_record/post/86283172-bd32-42a6-9be7-8a3b749115f3/image.jpg" alt=""></p>
<p>일부페이지가 찢어져 있는 파본이었다.
단순히 찢어진거면 테이프로 붙여서 봤겠지만 인쇄도 잘못되서 내용 파악이 잘 안되는 상태였다.</p>
<p>일단 구입처에서 파본교환이나 가능한지 알아보니 최대 3개월 이내에 반품신청이 가능하다.
<img src="https://velog.velcdn.com/images/study_record/post/b3719d6f-0e97-4fdd-8d83-f253918fc90a/image.png" alt=""></p>
<p>내가 혼공컴운책을 구입한 날짜는 22년 12월!!!
<img src="https://velog.velcdn.com/images/study_record/post/1077a0ed-213d-4fc2-90c0-a1e3e42b27a7/image.png" alt=""></p>
<p>혼공단 11기는 2024년 1월 2일부터 시작!!!!! 파본 발견도 2024년 1월 어느날!!!! 
<img src="https://velog.velcdn.com/images/study_record/post/cb6d641e-0a77-40ba-bce5-7fa110b2957e/image.png" alt=""></p>
<h3 id="따라서-구입처에서-교환이나-반품불가"><strong>따라서 구입처에서 교환이나 반품불가!!!!</strong></h3>
<p>구입처에서 반품이나 교환가능 기간은 이미 한참 지났고 
구입기간아 너무 오래되어서 출한사도 교환은 안될것 같았다.<br>4주자 공부를 위해서 찢어진부분의 내용만 알 수 없을까 하고 한빛출판네트워크에 문의했다. 찢어진부분의 내용을 알고싶다는 요청과 파본사진, 구입내역을 같이 첨부하였다.</p>
<p>다음날 매우 빠르게 출판사에서 답장이 왔고 찢어진부분의 내용을 알려 준다는 답이 아닌 교환 상품을 보내준다는 답을 받았다!!! 
저부분 내용만 알 수 있으면 다행이라고 생각했는데 새책을 보낸준다고 해서 너무 감사했다.</p>
<p>책은 이틀만에 도착했고 4주차 혼공컴운학습도 무사히 끝냈다.</p>
<h3 id="교환여부는-여러가지-조건구입날짜-파본-상태등에-따라서-안될-수도-있다">교환여부는 여러가지 조건(구입날짜, 파본 상태등)에 따라서 <strong>안될 수도 있다!!</strong></h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_4주]Chapter11 CPU스케줄링]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B44%EC%A3%BCchapter11-CPU%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%A7%81</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B44%EC%A3%BCchapter11-CPU%EC%8A%A4%EC%BC%80%EC%A5%B4%EB%A7%81</guid>
            <pubDate>Thu, 25 Jan 2024 09:00:56 GMT</pubDate>
            <description><![CDATA[<h3 id="프로세스의-우선순위">프로세스의 우선순위</h3>
<ul>
<li>프로세스마다 우선순위가 다르기 떄문에 우선순위가 높은것을 먼저 처리해야함 </li>
<li>프로세스의 종류 : 입출력 집중 프로세스, CPU 집중 프로세스</li>
<li><table>
<thead>
<tr>
<th align="left">입출력 집중 프로세스</th>
<th align="left">CPU 집중 프로세스</th>
</tr>
</thead>
<tbody><tr>
<td align="left">입출력 작업이 많은 프로세스들</td>
<td align="left">CPU작업이 많은 프로세스들</td>
</tr>
<tr>
<td align="left">비디오재생, 디스크 백업작업</td>
<td align="left">복잡한 수학연산, 컴파일, 그래픽 작업</td>
</tr>
<tr>
<td align="left">대기상태가 길다</td>
<td align="left">실행상태가 길다</td>
</tr>
<tr>
<td align="left">입출력버스트가 많은 프로세스</td>
<td align="left">CPU버스트 많은 프로세스</td>
</tr>
<tr>
<td align="left">⇒ 두가지  프로세스를 동일한 빈도로 CPU를 이용하게 하는것은 비효율적인 작업 방식임</td>
<td align="left"></td>
</tr>
<tr>
<td align="left">⇒ 입출력 집중 프로세스를 계속 작동하고 다음에 CPU 집중 프로세스 작동시키는 것이 효율적이다</td>
<td align="left"></td>
</tr>
</tbody></table>
</li>
<li>프로세스의 중요도에 맞춰서 CPU를 이용할수 있게 하기 위해서 운영체제가 프로세스에 우선순위를 부여함<ul>
<li>PCB에 우선순위를 적음</li>
<li>우선순위가 높은것이 더 빨리, 자주 실행됨</li>
</ul>
</li>
<li>프로세는 일반적으로 CPU 버스트와 입출력 버스트를 반복하면서 실행된다<ul>
<li>CPU 버스트(CPU Burst) : CPU를 이용하는 작업</li>
<li>입출력 버스(I/O Burst)  : 입출력장치를 기다리는 작업<h3 id="스케줄링-큐">스케줄링 큐</h3>
</li>
</ul>
</li>
<li>스케줄링 큐 : 메모리, CPU, 입출력 장치등 사용하려는 프로세스를 줄세우는 기법</li>
<li>운영체제가 관리하는 자원은 큐를 활용하고 여러 종류가 있음</li>
<li>준비 큐(ready queue) : CPU를 이용하고 싶은 프로세스들이 서는 줄</li>
<li>대기 큐(waiting queue) : 입출력장치를 이용하기 위해 대기상태에 들어간 프로세스가 서는 줄
<img src="https://velog.velcdn.com/images/study_record/post/cb384248-16e1-43b6-9d1c-1b0507dfbb77/image.png" alt=""></li>
</ul>
<h3 id="선점형-스케줄링과-비선점형-스케줄링">선점형 스케줄링과 비선점형 스케줄링</h3>
<ul>
<li><p>급하게 프로세스가 CPU를 사용해야할때 사용하는 방법 두가지</p>
<ul>
<li>선점형 스케줄링</li>
<li>비선점형 스케줄링</li>
</ul>
</li>
<li><p>선점형 스케줄링(preempitve scheduling)</p>
<ul>
<li>프로세스가 자원을 사용중이어도 운영체제가 강제로 뺏어서 다른 프로세스에 할당하는 방법</li>
<li>정해진 시간만큼 CPU사용 → 타이머인터럽트 발생 → 운영체제가 해당 프로세스의 CPU자원을 가져옴</li>
<li>현재 대부분의 운영체제에서 사용중</li>
</ul>
</li>
<li><p>비선점형 스케줄링(Non-preempitve scheduling)</p>
<ul>
<li>하나의 프로세스가 자원을 사용하고 있으면 프로세스가 종료 또는 대기상태가 되기 전에는 다른 프로세스가 끼어들지 못하고 기다리는 방법</li>
<li>하나의 프로세스가 자원 사용을 독점하는 방식</li>
</ul>
</li>
<li><p>선점형/비선점형 스케줄링 장점과 단점 </p>
<ul>
<li><table>
<thead>
<tr>
<th>구분</th>
<th>장점</th>
<th>단점</th>
</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>
</tbody></table>
</li>
</ul>
</li>
</ul>
<h3 id="cpu-스케줄링-알고리즘">CPU 스케줄링 알고리즘</h3>
<ul>
<li>CPU스케줄링 방식은 다양하고 운영체제마다 다른 알고리즘을 사용함</li>
<li>CPU 스케줄링 알고리즘 대표적인것<ul>
<li>선입 선처리 스케줄링</li>
<li>최단 작업 우선 스케줄링</li>
<li>라운드 로빈 스케줄링</li>
<li>최소 잔여 시간 우선 스케줄링</li>
<li>우선순위 스케줄링</li>
<li>다단계 큐 스케줄링 </li>
<li>다단계 피드백 큐 스케줄링</li>
</ul>
</li>
</ul>
<table>
<thead>
<tr>
<th>알고리즘</th>
<th>방법</th>
<th>장점</th>
<th>단점</th>
</tr>
</thead>
<tbody><tr>
<td>선입 선처리 스케줄링</td>
<td>준비큐에 삽입된 순서대로 프로세스들을 처리</td>
<td></td>
<td>호위효과 발생</td>
</tr>
<tr>
<td>최단 작업 우선 스케줄링</td>
<td>큐에 삽입된 프로세스중 CPU이용시간이 가장 작은 프로세스를 먼저 실행</td>
<td>호위효과 방지가능</td>
<td></td>
</tr>
<tr>
<td>라운드 로빈 스케줄링</td>
<td>정해진 타임 슬라이스만큼 CPU를 돌아가며 사용하는 방법</td>
<td></td>
<td>타임슬라이스 시간 결정이 중요함</td>
</tr>
<tr>
<td>최소잔여시간 우선 스케줄링</td>
<td>작업시간이 가장 작은 프로세스부터 처리하며 타임슬라이스 만큼 CPU를 사용</td>
<td></td>
<td></td>
</tr>
<tr>
<td>우선순위 스케줄링</td>
<td>프로세스들에 우선순위를 부여하고 가장 높은 우선순위부터 실행하는 방법</td>
<td></td>
<td>기아현상 발생할 수 있음</td>
</tr>
<tr>
<td>다단계 큐 스케줄링</td>
<td>큐를 여러개를 사용하면서 큐에 우선순위를 부여 해 높은 우선순위부터 처리함</td>
<td>큐마다 다른 스케줄링 알고리즘을 사용</td>
<td>프로세스의 큐 이동이 불가</td>
</tr>
<tr>
<td>다단계 피드백 큐 스케줄링</td>
<td>프로세스가 큐사이를 이동하며 기아현상을 방지하는 방법</td>
<td>프로세스의 큐 이동이 가능</td>
<td></td>
</tr>
</tbody></table>
<ol>
<li><p>선입 선처리 스케줄링(FCFS 스케줄링:First Come First Served Scheduling)</p>
<ul>
<li>준비큐에 삽입된 순서대로 프로세스들을 처리하는 비선점형 스케줄링방식 </li>
<li>먼저 CPU할당을 요청한 프로세스에게 CPU를 할당해줌</li>
<li>프로세스의 대기시간이 많이 늘어날 수 있음</li>
<li>호위효과(convoy effect) : 작은 실행 시간을 가진 프로세스가 오래 기다리는 현상</li>
</ul>
</li>
<li><p>최단 작업 우선 스케줄링(SJF 스케줄링:Shortest Job First Scheduling)</p>
<ul>
<li>큐에 삽입된 프로세스중 CPU이용시간이 가장 작은 프로세스를 먼저 실행하는 방식</li>
<li>기본적으로 비선점형 스케줄링 알고리즘으로 분류함</li>
<li>호위효과를 방지 할 수 있음</li>
<li>선점형 스케줄링 알고리즘으로도 구현이 가능하다 ⇒ 선점형 최단 작업 우선 스케줄링</li>
</ul>
</li>
<li><p>라운드 로빈 스케줄링(Round Robin Scheduling)</p>
<ul>
<li>정해진 타임 슬라이스만큼의 시간동안 돌아가면서 CPU를 이용하는 선점형 스케줄링</li>
<li>정해진 시간내에 완료를 못하면 큐 맨뒤에 다시 삽입함 </li>
<li>선입 선처리 스케줄링 개념 + 타임 슬라이스 개념</li>
<li>타임슬라이스 : 각 프로세스가 CPU를 사용할수 있는 정해진 시간</li>
<li>타임 슬라이스 시간을 결정하는것이 중요하다<ul>
<li>타임 슬라이스가 크면 호위효과가 발생</li>
<li>타임 슬라이스가 작으면 문맥교환의 비용이 커져 전환하는데 더 집중하게 됨</li>
</ul>
</li>
</ul>
</li>
</ol>
<ol start="4">
<li>최소잔여시간 우선 스케줄링(SRT 스케줄링:Shortest Remanining Time)<ul>
<li>작업시간이 가장 작은 프로세스부터 처리하면서 타임슬라이스를 만큼 돌아가면서 CPU를 사용함</li>
<li>최단 작업 우선 스케줄링 알고리즘 + 라운드 로빈 알고리즘</li>
</ul>
</li>
</ol>
<ol start="5">
<li>우선순위 스케줄링(Priority Scheduling)<ul>
<li>프로세스들에 우선순위를 판단해서 부여하고 그 중 가장 높은 우선순위부터 실행하는 방법</li>
<li>기아현상(Starvation) : 준비큐에 먼저 삽입된 우선순위가 낮은 프로세스는 우선순위가 높은 프로세스에 의해서 실행이 계속 연기되는 현상 </li>
<li>에이징 :기아현상 방지 기법. 오랜시간 대기한 프로세스의 우선순위를 높여서 실행할수 있게 함</li>
</ul>
</li>
</ol>
<ol start="6">
<li>다단계 큐 스케줄링(Multilevel Queue Scheduling)<ul>
<li>우선순위별의 큐를 여러개를 사용하는 방법. 우선순위가 높은 큐부터 실행함</li>
<li>우선순위 스케줄링의 발전된 형태</li>
<li>큐마다 다른 스케줄링 알고리즘을 사용할 수 있음</li>
<li>프로세스들이 큐 사이를 이동할 수 없어서 기아현상이 발생할 수 있음</li>
</ul>
</li>
</ol>
<ol start="7">
<li>다단계 피드백 큐 스케줄링(Multilevel Feedback Queue Scheduling)<ul>
<li>가장일반적인 CPU스케줄링 알고리즘</li>
<li>프로세스의 CPU 이용시간이 길면 낮은 우선순위 큐로 이동시키고 낮은 우선순위 큐에서 프로세스가 오래기다면 높은 우선순위로 이동시킨다</li>
<li>프로세스가 큐사이의 이동이 가능하게 하여 기아현상을 방지하는 방법</li>
</ul>
</li>
</ol>
<h3 id="📚마무리-문제">📚마무리 문제</h3>
<h4 id="p326-327">P.326-327</h4>
<p>1번 스케줄링설명중 틀린것은? <strong>(4)번</strong></p>
<p>1) 운영체제는 우선순위를 토대로 프로세스들을 스케줄링 한다
2) 운영체제는 스케줄링 큐를 사용해서 스케줄링할 프로세스들을 관리한다
3) 준비 큐에는 준비상태인 프로세스들, 대기큐에는 대기상태인 프로세스가 삽입된다
4) 선점형 스케줄링은 프로세스가 이용중인 자원을 빼앗을수 <del>없는</del> 방식이다</p>
<p>2번 <strong>(1) 준비 큐</strong>  <strong>(2) 대기 큐</strong>
<img src="https://velog.velcdn.com/images/study_record/post/c1c2ebe6-e437-4eaa-9ed9-cf5963782bcb/image.png" alt=""></p>
<p>3번 선점형 스케줄링과 비선점형 스케줄링 설명에 대해 틀린것은? <strong>(2)번</strong></p>
<p>1) 선점형 스케줄링은 어느 한 프로세스가 자원을 독점할 수 없는 스케줄링 방식이다
2) 선점형 스케줄링은 문맥교환 과정의 오버헤드가 비선점형 스케줄링에 비해 <del>적다</del>
3) 비점형 스케줄링은 어느 한 프로세스가 자원을 독점할 수 있는 스케줄링 방식이다
4) 비선점형 스케줄링은 문맥교환 과정의 오버헤드가 선점형 스케줄링에 비해 적다</p>
<h4 id="p337">P.337</h4>
<p>1번 📌 <strong>선택미션</strong>
준비큐에 프로세스 A, B, C, D순으로 삽입되었다고 가정 했을때 선입처리 스케줄링 알고리즘을 적용한다면 어떤 프로세스 순서대로 CPU를 할당 받는가?   <strong>(3)번 A-B-C-D 순</strong></p>
<p>1) A-D-B-C
2) B-C-A-D
3) A-B-C-D
4) D-C-B-A</p>
<p>2번 단어 찾아 쓰기</p>
<ul>
<li>우선순위가 낮아 실행이 계속 연기되는 문제는? <strong>기아 현상</strong></li>
<li>우선순위가 낮아 실행이 계속 연기되는 문제를 해결하기 위해서 우선순위를 점차 높이는 방법은? <strong>에이징 기법</strong></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_4주]Chapter10 프로세스와 스레드]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B44%EC%A3%BCchapter10-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B44%EC%A3%BCchapter10-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C</guid>
            <pubDate>Tue, 23 Jan 2024 15:06:45 GMT</pubDate>
            <description><![CDATA[<h3 id="프로세스">프로세스</h3>
<ul>
<li>프로그램이 실행되기전은 보조기억장치에 저장된 데이터일 뿐임</li>
<li>보조기억장치에 저장된 프로그램을 메모리에 적재하고 실행 프로그램이 실행 된후(= &quot;프로세스를 실행한다&quot;) → 프로세스 </li>
<li>포그라운드 프로세스(Foreground process) : 포그라운드 프로세스</li>
<li>백그라운 프로세스(Background process) : 사용자가 보지못하는 뒤편에서 실행되는 프로세스</li>
<li>서비스(윈도우), 데몬(유닉스) : 사용자와 상호작용하지 않고 수행하는 백그라운드 프로세스<blockquote>
<p>파본이라니!! 구입한지 일년이 넘은 책인데!!😱
<a href="https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B4%EB%B2%88%EC%99%B8%ED%8C%8C%EB%B3%B8%EA%B5%90%ED%99%98-%ED%9B%84%EA%B8%B0">https://velog.io/@study_record/혼공컴운번외파본교환-후기</a></p>
</blockquote>
</li>
</ul>
<h3 id="프로세스-제어-블록-pcb-process-control-block">프로세스 제어 블록 (PCB: Process Control Block)</h3>
<ul>
<li><p>프로세스 실행순서를 관리하고 CPU자원을 배분해주는것</p>
</li>
<li><p>프로세스와 관련된 정보를 저장하는 자료구조</p>
</li>
<li><p>커널 영역에 생성됨</p>
</li>
<li><p>프로세서 생성시 만들어지고 실행이 끝나면 폐기됨 </p>
</li>
<li><p>새로운 프로세스가 생생되었다 = 운영체제가 PCB를 생성했다
프로세스가 종료되었다 = 운영제체가 해당 PCB를 폐기했다</p>
</li>
<li><p>PCB에 담겨있는 정보</p>
<ul>
<li>프로세스 ID(PID)</li>
<li>레지스터 값</li>
<li>프로세스 상태</li>
<li>CPU 스케쥴링 정보</li>
<li>메모리 관리 정보</li>
<li>사용한 파일과 입출력장치 목록</li>
</ul>
<ol>
<li>프로세스 ID(PID)<ul>
<li>특정 프로세스를 식별하기 위해 부여하는 고유번호</li>
<li>같은 프로그램이어도 두번 실행하면 PID가 다름</li>
</ul>
</li>
<li>레지스터 값<ul>
<li>해당 프로세스가 실행하며 사용한 레지스터 값이있음</li>
</ul>
</li>
<li>프로세스 상태</li>
<li>CPU 스케쥴링 정보<ul>
<li>프로세스가 언제, 어떤 순서로 CPU를 할당받을지에 대한 정보</li>
</ul>
</li>
<li>메모리 관리 정보<ul>
<li>프로세스가 어느주소에 저장되어 있는지에 대한 정보가 있어야 함</li>
<li>베이스 레지스터, 한계 레지스터 값, 테이블정보</li>
</ul>
</li>
</ol>
</li>
</ul>
<ol start="6">
<li>사용한 파일과 입출력장치 목록</li>
</ol>
<h3 id="문맥교환">문맥교환</h3>
<ul>
<li>문맥(context) : 프로세스 수행을 다시하기 위해 기억해야할 정보</li>
<li>프로세스의 문맥은 프로세스의 PCB에 기록되어 있음</li>
<li>문맥교환 : 기존 프로세스의 문맥을 PCB에 백업하고 새로운 프로세스를 실행하기 위해 문맥을 PCB로 부터 복구하여 새로운 프로세스를 실행하는 과정</li>
<li>문맥교교환을 자주하면 오버헤드가 발생함</li>
</ul>
<h3 id="프로세스의-메모리-영역">프로세스의 메모리 영역</h3>
<ul>
<li>프로세스의 사용자 영역의 구분<ul>
<li>코드 영역</li>
<li>데이터 영역</li>
<li>힙 영역</li>
<li>스택 영역</li>
</ul>
</li>
</ul>
<ol>
<li>코드 영역(텍스트 영역)<ul>
<li>기계어로 이루어진 명령어가 저장됨</li>
<li>CPU가 실행할 명령어가 담겨 있음 → 쓰기 금지 → 읽기 전용 공간</li>
</ul>
</li>
<li>데이터 영역<ul>
<li>잠깐 쓰는 데이터가 아닌 프로그램이 실행되는 동안 유지할 데이터가 저장되는 공간</li>
<li>대표적으로 전역변수 데이터가 저장됨</li>
</ul>
</li>
<li>힙 영역<ul>
<li>프로그래머가 직접 할당 할수 있는 저장 공간</li>
<li>메모리공간을 할당받으면 반환도 해줘야 함</li>
<li>메모리 누수 : 메모리 공간을 반환하지않고 할당한 공간을 메모리내에 남겨서 낭비하고 있는 문제 </li>
<li>메모리의 낮은주소에서 높은 주소로 할당 됨</li>
</ul>
</li>
<li>스택 영역 <ul>
<li>데이터를 일시적으로 저장하는 공간</li>
<li>잠시 쓰는 말의 값이 저장됨</li>
<li>대표적으로 매개변수, 지역변수가 저장됨</li>
<li>저장할떄는 PUSH, 이동할때는 POP</li>
<li>메모리의 높은영역에서 낮은 주소로 할당 됨</li>
</ul>
</li>
</ol>
<ul>
<li>코드 영역, 데이터 영역 → 크기가 고정된 영역 → 정적 할당 영역</li>
<li>힙 영역, 스택 영역 → 실시간으로 크기가 변할 수 있는 영역 → 동적 할당 영역</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/9f15f7b4-c6b5-449d-ad65-9fd32fae81c3/image.png" alt=""></p>
<blockquote>
<p>타이머 인터럽트(타임아웃 인터럽트) : 클럭신호를 발생시키는 장치에 의해 주기적으로 발생하는 하드웨어 인터럽트</p>
</blockquote>
<h3 id="프로세스상태">프로세스상태</h3>
<ul>
<li>프로세스의 대표적인 상태<ul>
<li>생성 상태</li>
<li>준비 상태</li>
<li>실행 상태</li>
<li>대기 상태</li>
<li>종료 상태</li>
</ul>
</li>
</ul>
<ol>
<li>생성 상태<ul>
<li>프로세서를 생성중인 상태</li>
<li>메모리에 적재되어 PCB를 할수 있는 상태</li>
</ul>
</li>
<li>준비상태<ul>
<li>바로 CPU를 할당받아 실행이가능하지만 순서가 아니어서 기다리는 상태</li>
<li>티스패치 : 준비상태에서 실행상태로 전환되는것</li>
</ul>
</li>
<li>실행상태 <ul>
<li>CPU를 할당받아 실행중인 상태</li>
<li>할당된 시간동안만 CPU를 사용할수 있음</li>
<li>할당된 시간을 다 사용하면(타이머 인터트럽이 발생) 준비상태가 됨</li>
<li>실행도중 입출력장치를 사용하여 입출력장치의 작업이 끝날때 까지 기다림</li>
</ul>
</li>
<li>대기 상태<ul>
<li>입출력장치의 작업을 기다리는 상태</li>
<li>프로세스 실행도중 입출력장치를 사용 → 입출력 작업 프로세스는 입출력이 끝날때 까지 대기 → 입출력 작업이 완료되면 프로세스는 준비상태로 감</li>
</ul>
</li>
<li>종료 상태<ul>
<li>프로세스가 종료된 상태</li>
<li>운영체제는 PCB와 프로세스가 사용한 메모리를 정리함 </li>
</ul>
</li>
</ol>
<ul>
<li>프로세스 상태 다이어그램
<img src="https://velog.velcdn.com/images/study_record/post/bfe1ccf1-e32e-4e58-a899-f50a5ffc348f/image.png" alt=""></li>
</ul>
<h3 id="프로세스-계층-구조">프로세스 계층 구조</h3>
<ul>
<li>프로세스는 실행도중 시스템호출을 통해서 다른 프로세스를 생성할 수 있음 <ul>
<li>부모프로세스 : 새 프로세스를 생성한 프로세스</li>
<li>자식프로세스 : 부모스포세스에 의해서 새로생성된 프로세스</li>
</ul>
</li>
<li>자식프로세스와 부모프로세스는 다른 PID를 가짐</li>
<li>일부운영체제의 경우 자식프로세스 PCB에 PPID(부모 프로세스 PID:Parent PID)가 기록됨</li>
<li>프로세스 계층 구조 : 자식프로세는 또 다른 자식프로세스생성이 가능하여 트리구조가 가능함 </li>
<li>최초의 프로세스<ul>
<li>PID가 항상 1번이고 모든프로세스의 최상단에 있는 부모프로세스</li>
<li>유닉스 init, 리눅스 systemd, 맥 launchd</li>
</ul>
</li>
</ul>
<h3 id="프로세스-생성-기법">프로세스 생성 기법</h3>
<ul>
<li><p>fork, exex → 시스템 호출</p>
</li>
<li><p>fork : 프로세스가 자신의 프로세스 복사본을 만드는 시스템 호출</p>
<ul>
<li><table>
<thead>
<tr>
<th align="center">fork된 자식프로세스</th>
<th align="center">복사되는것</th>
<th align="center">안되는것</th>
</tr>
</thead>
<tbody><tr>
<td align="center">자식프로세스</td>
<td align="center">부모프로세스의 자원(메모리 내용, 열린파일목록 등) 상속</td>
<td align="center">PIV값, 저장된 메모리 위치는 다름</td>
</tr>
</tbody></table>
</li>
</ul>
</li>
<li><p>exec : 자신의 메모리공간을 새로운 프로그램으로 전환하여 실행하는 시스템 호출</p>
<ul>
<li><table>
<thead>
<tr>
<th align="center">exec된 자식프로세스</th>
<th align="center">코드영역, 데이터영역</th>
<th align="center">나머지 영역(힙,스택영역)</th>
</tr>
</thead>
<tbody><tr>
<td align="center">자식프로세스</td>
<td align="center">실행할 프로그램 내용으로 변경</td>
<td align="center">초기화</td>
</tr>
</tbody></table>
</li>
</ul>
</li>
<li><p>프로세스 계층구조는 fork와 exce가 반복되는 과정</p>
</li>
</ul>
<h3 id="스레드">스레드</h3>
<ul>
<li>스레드 : 프로세스를 구성하는 실행단위 </li>
<li>단일 스레드 프로세스 : 하나의 실행 흐름을 가지고 있는 프로세스
→ 스레드 개념이 생기면서 프로세스가 여러가지 일을 동시에 처리할 수 있게 됨</li>
<li>스레드 구성 : 스레드ID, 프로그램 카운터 값, 스택
→ 각 스레드마다 값이 다르기 때문에 각자의 다른 코드 실행이 가능하다</li>
<li>스레드는 실행에 필요한 최소한의 정보로만 가지고 프로세스자원을 공유하면서 실행된다 <ul>
<li>최소한의 정보 : 프로그램 카운터를 포함한 레지스터, 스택</li>
</ul>
</li>
<li>리눅수 운영체제는 프로세스와 스레드를 명확히 구분하지 않는다<ul>
<li>프로세스, 스레드를 태스크로 부름</li>
</ul>
</li>
</ul>
<h3 id="멀티프로세스와-멀티스레드">멀티프로세스와 멀티스레드</h3>
<ul>
<li>멀티프로세스 : 여러 프로세스를 동시에 실행하는 것</li>
<li>멀티스레드 : 여러 스레드로 프로세스를 동시에 실행하는 것</li>
<li>같은 작업의 프로세스가 여러개 vs 하나의 프로세스에 여러개 스레드</li>
</ul>
<table>
<thead>
<tr>
<th>멀티 프로세스</th>
<th>멀티 스레드</th>
</tr>
</thead>
<tbody><tr>
<td>자원(코드 영역, 데이터 영역, 힙 영역 등)이 복제되어 메모리 각각 적재됨 → 메모리 낭비</td>
<td>스레드는 서로 다른 스레드ID, 프로그램 카운터, 스택을 가지고 있음</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>
</tbody></table>
<h3 id="프로세스-간-통신ipc-inter-process-communcation">프로세스 간 통신(IPC, Inter-Process Communcation)</h3>
<ul>
<li>기본적으로 프로세스간 자원은 공유하지 않는다</li>
<li>프로세스 간 통신 : 프로세스끼리 자원을 공유하고 데이터를 주고받는 것</li>
<li>공유메모리 : 프로세스들이 공유하는 메모리영역. 데이터를 주고 받음</li>
</ul>
<h3 id="파이썬으로-프로세스-확인하기">파이썬으로 프로세스 확인하기</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/19cedfc4-8af4-484b-a4ed-412c5cea3b5b/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/study_record/post/eb839926-f198-45dc-8048-cf76880cb7b2/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/8f380e67-3160-41db-9206-20f83e1f444d/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/5e74c426-f0cc-4287-92c4-d11b5a5c5af3/image.png" alt=""></p>
<h3 id="파이썬으로-스레드-확인하기">파이썬으로 스레드 확인하기</h3>
<p><img src="https://velog.velcdn.com/images/study_record/post/c7305ad5-d122-4308-9b48-456e0078be45/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/7a80f4f2-8e60-4965-a8e2-6aa6f06f915e/image.png" alt="">
<img src="https://velog.velcdn.com/images/study_record/post/7f7cc91c-136e-444b-8e0c-26f36fdf03cc/image.png" alt=""></p>
<h3 id="📚마무리-문제">📚마무리 문제</h3>
<h4 id="p293">P.293</h4>
<p>1번 프로세스 설명으로 틀린것은? <strong>(4)번</strong></p>
<p>1) 실행되는 프로그램을 프로세스라고 한다
2) 프로세스가 생성되면 커널 영역에 PCB가 생성된다
3) 프로세스들은 문맥교환을 통해 번갈아가면 수행된다
4) 프로세스는 <del>반드시</del> 사용자와 상호작용 할수 있어야 한다</p>
<p>2번 문맥교환 설명중 틀린것은? <strong>(1)번</strong></p>
<p>1) 문맥교환은 <del>빠르게 수행될수록 좋다</del>
2) 문맥교환 과정에서 직전에 수행되던 프로세스의 문맥이 백업된다
3) 문맥교환 과정에서 다음에 수행할 프로세스의 문맥이 복구된다
4) 문맥은 PCB에 기록된다</p>
<h4 id="p304-305">P.304-305</h4>
<p>1번 1~5번을 채워라 📌<strong>기본 미션</strong>
<strong>(1) 생성 상태</strong>
<strong>(2) 준비 상태</strong>
<strong>(3) 실행 상태</strong>
<strong>(4) 종료 상태</strong>
<strong>(5) 대기 상태</strong>
<img src="https://velog.velcdn.com/images/study_record/post/47e4641e-d806-4ef7-9fb7-1955e0c068a8/image.png" alt="">
2번 최초프로세스가 로그인 프로세스를 생성, 로그인프로세는 bash프로세스, bash프로세는 Vim프로세스를 생성했다</p>
<ul>
<li>bash프로세스의 부모프로세스는? <strong>(1) 로그인 프로세스</strong></li>
<li>bash프로세스의 자식 프로세스는? <strong>(2) Vim 프로세스</strong></li>
<li>Vim프로세스의 부모 프로세는? <strong>(3) bash 프로세스</strong></li>
</ul>
<p>3번 fork와 exec에 틀린 설명은?  <strong>(1)번</strong></p>
<p>1) fork 시스템 호출을 하면 <del>새로운 폴더가 생성된다</del>
2) fork 시스템 호출을 하면 부모 프로세스 복제본이 자식프로세스로서 생성된다
3) exec 시스템 호출을 하면 프로세스의 메모리 공간이 다른 프로세스의 내용으로 변경된다
4) 많은 운영체제는 fork와 exec을 통해 프로세스 계층구조를 형성한다</p>
<p>4번 프로세스 상태에 대한 설명중 옳은것은? <strong>(4)번</strong></p>
<p>1) <del>생성상태는</del> 프로세스가 입출력 장치의 작업을 기다리는 상태이다 <em>대기상태</em>
2) <del>실행상태는</del> 프로세스가 종료되는 상태이다  <em>종료상태</em>
3) <del>종료상태는</del> 프로세스가 이제 막 생성된 상태이다 <em>셍상상태</em>
4) 준비상태는 CPU를 할당받기를 기다리고 있는 상태</p>
<h4 id="p313">P.313</h4>
<p>1번 스레드의 설명으로 틀린것은? <strong>(2)번</strong></p>
<p>1) 스레드는 프로세스 내의 실행의 흐름 단위
2) 프로세스 내의 스레드들은 각기 <del>다른</del> 코드/데이터/힙 영역을 가지고 있다
3) 프로세스 내의 스레드들은 각긱 다른 프로그램 카운터를 가지고 있다
4) 프로세스 내의 스레드들은 각기 다른 스택을 가지고 있다</p>
<p>2번 </p>
<blockquote>
<p>프로세스끼리는 기본적으로 자원을(<strong>공유하지 않지만</strong>, <del>공유하지만</del>), 프로세스내의 스레드끼리는 같은 프로세스 내의 자원을 (<del>공유하지 않습니다</del>, <strong>공유합니다</strong>).</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_4주]Chapter9 운영체제 시작하기]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B44%EC%A3%BCchapter4-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B44%EC%A3%BCchapter4-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 23 Jan 2024 07:42:01 GMT</pubDate>
            <description><![CDATA[<h3 id="운영체제란">운영체제란</h3>
<ul>
<li>시스템자원(자원) : 프로그램 실행에 마땅히 필요한 요소    <ul>
<li>CPU,메모리, 보조기억장치등 컴퓨터의 모든 부품을 의미함</li>
</ul>
</li>
<li>운영체제 : 실행할 프로그램자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램</li>
<li>커널영역 : 운영체제는 컴퓨터가 부팅될때 메모리내 커널영역에 적재되더 실행됨</li>
<li>사용자영역 : 커널영역을 제외한 나머지 영역을 의미함. 응용프로그램이 적제되는 영역</li>
<li>응용프로그램 : 사용자가 특정목적을 위해 사용하는 일반적인 프로그램을 의미함<blockquote>
<p>운영체제는 커널영역에 적제되어 사용자영역에 적재된 프로그램들에 자원을 할당하고 이를 올바르게 실행되도록 돕습니다. </p>
</blockquote>
</li>
<li>역할 <ul>
<li>메모리에 프로그램을 적재함</li>
<li>더이상 실행되지 않는 프로그램을 메모리에서 삭제함</li>
<li>여러프로그램에 CPU자원을 할당함</li>
</ul>
</li>
<li>운영체제를 이해하면 코드가 어떻게 실행되는지 하드웨어에 어떤 문제가 있는지 알수있어서 문제를 해결할수 있음</li>
<li>운영체제를 공부하면 오류메세지를 이해할 수 있다
<img src="https://velog.velcdn.com/images/study_record/post/c10d970c-7f66-4482-b0d9-f0d322d1cd9e/image.png" alt=""></li>
</ul>
<h3 id="커널">커널</h3>
<ul>
<li>커널 : 운영체제의 핵심서비스를 담당하는 부분</li>
<li>사용자 인터페이스 : 사용자와 컴퓨터가 상호작용하는 통로. 커널에 포함되지 않음 <ul>
<li>그래픽 유저 인터페이스 : 그래픽을 기반으로 컴퓨터와 상호작용하는 인터페이스 ex) 바탕화면</li>
<li>커맨드 라인 인터페이스 : 명령어를 기반으로 상호작용하는 인터페이스<h3 id="이중모드dual-mode">이중모드(Dual Mode)</h3>
</li>
</ul>
</li>
<li>CPU가 명령어를 실행하는 모드를 사용자모드와 커널모드로 구분하는 방식</li>
<li>사용자모드<ul>
<li>운영체제 서비스를 제공받을 수 없는 실행모드</li>
<li>일반적인 응용프로그램은 기본 사용자모드로 실행됨</li>
<li>사용자모드로 실행되는 일반적인 응용프로그램은 자원 접근할수 없음</li>
</ul>
</li>
<li>커널모드<ul>
<li>운영체제 서비스를 제공받을 수 있는 실행모드</li>
<li>운영체제는 커널모드로 실행되기 떄문에 자원에 접근할수 있음</li>
</ul>
</li>
<li>사용자모드와 커널모드 판단은 슈퍼바이저 플래그로 확인함</li>
<li>시스템호출(system call) : 운영체제 서비스를 제공받기위한 요청<ul>
<li>사용자 모드로 실행되는 프로그램은 시스템 호출을 통해서 커널모드로 전환하고 운영체제 서비스를 제공받음</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/f1b0cdee-2095-4442-9ae3-d2ecf1b5b42c/image.png" alt=""></p>
<ul>
<li>소프트웨어 인터럽트 : 특정 명령어에 의해 발생된 인터럽트. 시스템호출도 소프트웨어 인터럽트중 하나.</li>
</ul>
<h3 id="운영체제의-서비스">운영체제의 서비스</h3>
<ul>
<li>운영체제 핵심서비스 <ul>
<li>프로세스 관리</li>
<li>자원 접근 및 할당</li>
<li>파일 시스템 관리</li>
</ul>
</li>
</ul>
<h3 id="프로세스관리--→-10장-주제">프로세스관리  → 10장 주제</h3>
<ul>
<li>프로세스 : 실행중인 프로그램</li>
<li>CPU는 한번에 한 프로세스만 실행할수 있기 때문에 프로세스 실행을 전환을 반복함</li>
<li>운영체제는 프로세스 특징에 맞춰서 관리하고 실행해야함</li>
<li>프로세스 동기화 : 여러프로세스가 동시에 일어나는 완경에 필수</li>
<li>교착상태 : 프로세스가 더이상 실행되지 못하는 상태</li>
</ul>
<h3 id="자원-접근-및-할당">자원 접근 및 할당</h3>
<ul>
<li>CPU → 11장 <ul>
<li>CPU 스케쥴링: 운영체제 프로세스에 CPU를 공정하게 할당하고 얼마나 오래 사용할지 결정하는것 </li>
</ul>
</li>
<li>메모리 : 같은 프로세스여도 실행할때마다 주소가 달라지고 적재를 못하는 상황일때 어떻게 메모리에 할당하는지 → 14장 주제 </li>
<li>입출력 장치 : 인터럽트 서비스 루틴을 제공하면 입출력 작업을 실행함</li>
</ul>
<h3 id="파일-시스템-관리--→-15장-주제">파일 시스템 관리  → 15장 주제</h3>
<ul>
<li>파일시스템 : 파일 열기, 삭제, 생성에 관련한 시스템</li>
<li>운영체제가 보조기억장치 속 데이터를 어떻게 파일과 디렉터리로 관리하는가</li>
</ul>
<h3 id="가상머신과-이중모드">가상머신과 이중모드</h3>
<ul>
<li>가상머신 : 소프트웨어적으로 만든 가상 컴퓨터. 새로운 운영체제와 응용프로램을 실행할 수 있음</li>
<li>운영체제에 가상머신을 설치하면 사용자모드로 작동 </li>
<li>하이퍼바이저 모드 : 가상머신을 지원하는  CPU에서 가상머신을 위해 만든 모드. 가상머신상에서 작동하는 프로그램은 하이퍼바이저 모드로 운영체제 서비스를 받음.</li>
</ul>
<h3 id="시스템-호출의-종류">시스템 호출의 종류</h3>
<ul>
<li><p>시스템 호출은 운영체제 서비스를 제공받기 위한 방법 → 이것만 잘 이해해도  운영체제를 잘 이해할 수 있음</p>
</li>
<li><p>프로그래밍 언어는 시스템 호출을 통해서 실행됨 </p>
</li>
<li><table>
<thead>
<tr>
<th align="center">프로세스 관리</th>
<th align="center">시스템 호출</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">프로세스 관리</td>
<td align="center">fork()</td>
<td align="center">새 자식 프로세스 생성</td>
</tr>
<tr>
<td align="center">프로세스 관리</td>
<td align="center">execve()</td>
<td align="center">프로세스 실행</td>
</tr>
<tr>
<td align="center">프로세스 관리</td>
<td align="center">exit()</td>
<td align="center">프로세스 종료</td>
</tr>
<tr>
<td align="center">프로세스 관리</td>
<td align="center">waitpid()</td>
<td align="center">자식 프로세스 종료까지 대기</td>
</tr>
</tbody></table>
</li>
</ul>
<ul>
<li><table>
<thead>
<tr>
<th align="center">파일 관리</th>
<th align="center">시스템 호출</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">파일 관리</td>
<td align="center">open()</td>
<td align="center">파일 열기</td>
</tr>
<tr>
<td align="center">파일 관리</td>
<td align="center">close()</td>
<td align="center">파일 닫기</td>
</tr>
<tr>
<td align="center">파일 관리</td>
<td align="center">read()</td>
<td align="center">파일 읽기</td>
</tr>
<tr>
<td align="center">파일 관리</td>
<td align="center">write()</td>
<td align="center">파일 쓰기</td>
</tr>
<tr>
<td align="center">파일 관리</td>
<td align="center">state()</td>
<td align="center">파일 정보 획득</td>
</tr>
</tbody></table>
</li>
</ul>
<ul>
<li><table>
<thead>
<tr>
<th align="center">디렉터리 관리</th>
<th align="center">시스템 호출</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">디렉터리 관리</td>
<td align="center">chdir()</td>
<td align="center">작업 디렉터리 변경</td>
</tr>
<tr>
<td align="center">디렉터리 관리</td>
<td align="center">mkdir()</td>
<td align="center">디렉터리 생성</td>
</tr>
<tr>
<td align="center">디렉터리 관리</td>
<td align="center">rmdir()</td>
<td align="center">비어있는 디렉터리 삭제</td>
</tr>
</tbody></table>
</li>
</ul>
<ul>
<li><table>
<thead>
<tr>
<th align="center">파일시스템 관리</th>
<th align="center">시스템 호출</th>
<th align="center">설명</th>
</tr>
</thead>
<tbody><tr>
<td align="center">파일시스템 관리</td>
<td align="center">mount()</td>
<td align="center">파일시스템 마운트</td>
</tr>
<tr>
<td align="center">파일시스템 관리</td>
<td align="center">umount()</td>
<td align="center">파일시스템 마운트 해제</td>
</tr>
</tbody></table>
</li>
</ul>
<h3 id="📚마무리문제">📚마무리문제</h3>
<h4 id="p267">P.267</h4>
<p>1번 빈칸채우기  <strong>(자원)</strong></p>
<ul>
<li>운영제체는 실행할 프로그램에 (   )을 할당하고 프로그램이 올바르게 실행되도록 돕는 프로그램입니다.</li>
</ul>
<p>2번 운영체제 설명으로 틀린것은? <strong>(2)번</strong></p>
<p>1) 운영체제를 이해하면 하드웨어와 프로그램을 더 깊이 이해할수 있다
2) 운영체제는 <del>사용자 영역</del>에 적재된다
3) 운영체제는 시스템 자원을 관리하는 프로그램이다
4) 운영체제는 시용자가 실행하는 프그램이 올바르게 실행되도록 돕는다.</p>
<h4 id="p281">P.281</h4>
<p>1번 빈킨 채우기 <strong>(커널)</strong></p>
<ul>
<li>(  )은 운영체제의 핵심기능을 담당하는 부분을 의미한다</li>
</ul>
<p>2번 이중모드와 시스템호출 설명에 대해 틀린것은? <strong>(4)번</strong></p>
<p>1) 운영체제의 핵심서비스는 커널 모드로 실행됩니다.
2) 일반적인 응용프로그램은 사용자 모드로 실행됩니다. 
3) 시스템 호출을 통해 사용자 모드에서 커널모드로 전환될수 있다
4) 시스템호출은 인터럽트와 <del>연관없다</del>.</p>
<p>3번 운영체제 핵심서비스가 아닌것은? <strong>(3)번</strong></p>
<p>1) 프로세스 관리
2) 자원접근 및 할당
3) <del>사용자 인터페이스 제공</del>
4) 파일시스템 관리</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_3주]Chapter8 입출력장치]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B43%EC%A3%BCchapter8-%EC%9E%85%EC%B6%9C%EB%A0%A5%EC%9E%A5%EC%B9%98</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B43%EC%A3%BCchapter8-%EC%9E%85%EC%B6%9C%EB%A0%A5%EC%9E%A5%EC%B9%98</guid>
            <pubDate>Fri, 19 Jan 2024 05:48:43 GMT</pubDate>
            <description><![CDATA[<h3 id="장치컨트롤러device-controller">장치컨트롤러(Device controller)</h3>
<ul>
<li>입출력장치를 다루는것은 어렵다 <ul>
<li>이유1 입출력장치의 종류가 많다 → 정보를 주고받는 방식의 규격화가 어렵다</li>
<li>이유2 입출력장치의 데이터 전송률은 낮다 (일반적으로 CPU와 메모리의 데이터 전송률은 높음)<br>전송률이란 데이터를 얼마나 빨리 교환하는지 나타내는 지표</li>
</ul>
</li>
<li>위와같은 이유로 컴퓨터에 직접연결하지않고 <strong>장치컨트롤러</strong>라는 하드웨어를 통해 연결함</li>
<li>입출력 제어기(I/O controller), 입출력 모듈(I/O module)과 같은 의미</li>
<li>입출력장치 연결을 위한 하드웨어적인 통로</li>
<li>장치컨트롤러의 기능<ul>
<li>CPU와 입출력장치 간의 통신 중개</li>
<li>오류검출</li>
<li>데이터 버퍼링<ul>
<li>버퍼링: 전송률이 높은 장치와 낮은 장치사이에 주고받는 데이터를 버퍼라는 임시저장공간에 저장하여 전송률을 비슷하게 맞추는 방법</li>
<li>버퍼에 데이터를 모았다가 한꺼번에 내보내거나 조금씩 내보내는 방법</li>
</ul>
</li>
</ul>
</li>
<li>장치컨트롤러 구조<ul>
<li>데이터 레지스터 : CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터. 버퍼의 역할을 함</li>
<li>상태 레지스터 : 입출력장치가 작업을 할 준비가 되었는지, 작업이 완료가 되었는지, 오류가 없는지등 상태정보를 저장함</li>
<li>제어 레지스터 : 입출력장치가 수행할 내용에 대한 제어정보와 명령을 저장</li>
</ul>
</li>
</ul>
<h3 id="장치드라이버">장치드라이버</h3>
<ul>
<li>장치 컨트롤러의 동작을 감지하고 제어함으로써 장치 컨트롤러가 컴퓨터내부와 정보를 주고받을수 있게 하는 프로그램</li>
<li>메모리에 저장되어있음</li>
<li>입출력장치 연결을 위한 소프트웨어적인 통로</li>
<li>장치드라이버를 인식, 실행하는 주체는 운영체제임</li>
</ul>
<h3 id="장치컨트롤러와-cpu가-정보를-주고-받는-방법">장치컨트롤러와 CPU가 정보를 주고 받는 방법</h3>
<ul>
<li>프로그램 입출력</li>
<li>인터럽트 기반 입출력</li>
<li>DMA 입출력</li>
</ul>
<h3 id="1-프로그램-입출력">1. 프로그램 입출력</h3>
<ul>
<li>기본적으로 프로그램 속 명령어로 입출력장치를 제어하는 방법</li>
<li>CPU가 명령어를 실행하는 과정에서 입출력 명령어를 만나면 CPU는 입는 입출력장치에 연락된 장치컨트롤로와 작업을 수행함</li>
<li>CPU가 장치 컨트롤러의 레지스터 값을 읽고 쓰면서 이루어짐</li>
<li>과정
1) CPU는 하드디스크 컨트롤러의 제어 레지스터에 쓰기 명령을 보냄
&#39;메모리에 저장된 정보를 하드디스크에 백업한다&#39; = &#39;하드디스크에 새로운 정보를 쓴다&#39;
2) 하드디스크는 디스크 상태를 확인하고 준비된 상태면 상태레지스터에 준비되었다고 표시함
3) CPU는 상태 레지스터를 주기적으로 읽으며 하드디스크의 준비여부 확인함 
4) 하드디스크가 준비되었으면 백업할 메모리 정보를 데이터레지스터 씀
5) 백업작업(쓰기작업)이 끝나지 않으면 1번부터 반복
<img src="https://velog.velcdn.com/images/study_record/post/71a721f1-4612-4142-ad5d-b24abc66233a/image.png" alt=""></li>
</ul>
<ul>
<li>명령어 표현 방법과 메모리 저장 방법 두가지<ul>
<li>메모리 맵 입출력 <ul>
<li>메모리에 접근하기위한 주소공간과 입출력장치를 위한 주소공간을 <strong>하나의 주소공간</strong>으로 간주하는 방법</li>
<li>CPU는 메모리의 주소와 장치 컨트롤러의 레지스터들을 똑같이 메모리 주소와 같은 취급을 한다</li>
</ul>
</li>
<li>고립형 입출력(isolated I/O)<ul>
<li>메모리를 위한 주소공간과 입출력장치를 위한 <strong>주소공간을 분리하는</strong> 방법</li>
<li>CPU는 메모리접근과는 다른 입출력명령어를 사용함</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li><table>
<thead>
<tr>
<th align="center">구분</th>
<th align="center">메모리 맵 입출력</th>
<th align="center">고립형 입출력</th>
</tr>
</thead>
<tbody><tr>
<td align="center">메모리와 입출력장치</td>
<td align="center">같은 주소공간</td>
<td align="center">분리된 주소공간</td>
</tr>
<tr>
<td align="center">메모리의 주소공간</td>
<td align="center">축소됨</td>
<td align="center">축소되지 않음</td>
</tr>
<tr>
<td align="center">메모리와 입출력장치 명령어</td>
<td align="center">같음</td>
<td align="center">다름(입출력장치 전용 명령어)</td>
</tr>
</tbody></table>
</li>
</ul>
<h3 id="2인터럽트-기반-입출력">2.인터럽트 기반 입출력</h3>
<blockquote>
<p>폴링이란 </p>
<ul>
<li>인터럽트와 비교되는 개념중  하나</li>
<li>입출력장치의 상태는 어떤지, 처리할 데이터가 있는지 주기적으로 확인하는 방식</li>
<li>인터럽트 방식보다 CPU에 부담이 크다</li>
</ul>
</blockquote>
<ul>
<li>장치컨트롤러에 의해 발생하는 인터럽트 기반 입출력</li>
<li>여러입출력 장치에서 인터럽트가 동시발생할 경우에 인터럽트의 우선순위가 높은것부터 처리한다<ul>
<li>플래그 레지스터속 인터럽트 비트가 활성화된경우 먼저처리</li>
<li>인터럽트 비트는 비활성이지만 NMI(무시할수 없는 인터럽트/가장 놓은 우선순위)가 발생한 경우 먼저처리</li>
</ul>
</li>
<li>프로그래머블 인터럽트 컨트롤러(PIC Programmable Interrupt Controller) <ul>
<li>우선순위를 반영해 다중 인터럽트를 처리하는 방법 중 하나</li>
<li>하드웨어 인터럽트 요청의 우선순위를 판별해 지금 처리해야 하는 인터럽트를 알려줌</li>
<li>여러 장치컨트롤러에 연결되어 있는 하드웨어</li>
<li>NMI의 우선순위를 판별하지 않음</li>
<li>하드웨어인터럽트의 우선 순위를 조정함</li>
<li>PIC를 두개 이상 계층으로 구성함(훨씬 많은 하드웨이 인터럽트 관리를 위해서)</li>
</ul>
</li>
<li>다중인터럽트 처리과정
1) PIC가 장치컨트롤러에서 인터트럽 요청신호를 받아들임
2) PIC는 인터럽트 우선순위를 판단하고 CPU에 먼처처리해야할 인터트럽요청신호를 보냄
3) CPU는 PIC에 인터럽트 확인신호를 보냄
4) PIC는 데이터버스를 통해서 CPU에 인터럽트 백터를 보냄
5) CPU는 인터럽트백터를 통해서 인터럽트 요청 주체를 확인하고 인터럽스 서비스 루틴을 실행함
<img src="https://velog.velcdn.com/images/study_record/post/5d012a80-291e-4c13-b3ff-77e43e5cc580/image.png" alt=""></li>
</ul>
<h3 id="3-dmadirect-memory-access-입출력">3. DMA(Direct Memory Access) 입출력</h3>
<ul>
<li>입출력장치와 메모리가 CPU를 거치지 않고 상호작용 할 수 있는 입출력방식</li>
<li>시스템 버스에 연결된 DMA컨트롤러 하드웨어가 있어야 사용할 수 있음</li>
<li>CPU는 입출력의 시작과 끝에만 관여함</li>
<li>시스템 버스는 동시사용이 불가하기 때문에 CPU가 시스템버스를 사용하지 않을때 사용하거나 허락을 구하고 사용함</li>
<li>사이클링 스탈링 : DMA의 시스템버스 이용방법을 의미함 (CPU입장에서 도둑맞는 기분)</li>
<li>DMA입출력 과정 
<img src="https://velog.velcdn.com/images/study_record/post/3a8b26d8-be8e-4522-bdce-7c1d98845357/image.png" alt="">
1) CPU는 DMA컨트롤러에 정보(입출려장치 주소, 수행연산, 읽거나 쓸 메모리 주소)로 입출력 작업을 명령함
2) DMA컨트롤러는 메모리와 상호작용하면서 백업할 정보를 가져옴
3) DAM컨트롤러는 장치컨트롤러와 상호작용하면서 입출력 작업을 수행함
3) 입출력 작업이 끝나면 DMA컨트롤러는 CPU에 인터럽를 걸어서 작업이 끝난것을 알림</li>
<li>DMA컨트롤러와 입출력버스<ul>
<li>시스템버스에 자주 접근하는것을 줄이기 위해서 입출력버스와 DMA컨트롤러를 연결함</li>
<li>장치컨트롤러가 데이터를 전송할때 입출력버스를 이용하여 시스템버스 사용빈도를 줄임</li>
<li>종류 : PCI버스, PCI Express(PCIe)버스</li>
<li>PCIe슬로 : 여러입출력장치를 PCIe버스와 연결하는 통로</li>
</ul>
</li>
</ul>
<h3 id="📚마무리문제">📚마무리문제</h3>
<h4 id="p238239">P.238~239</h4>
<p>1번 장치컨트롤러를 사용하는 이유로 옳은것은? <strong>(1)번, (3)번</strong></p>
<p>1) 입출력장치는 종류가 많아 주고받는 정보의 규격화가 어렵다
2) CPU는 모든 입출력장치가 사용하는 데이터 형식등을 알고있기 떄문이다
3) 일반적으로 입출력장치와 CPU간에 전송률의 차이가 크기 떄문이다
4) CPU와 입출력장치 사이에는 중개자가 필요하지 않기 떄문이다 </p>
<p>2번 장치컨트롤럴의 기능으로 틀린것은? <strong>(2)번</strong></p>
<p>1) CPU 또는 입출력장치간의 통신을 중개한다
2) <del>전원이 꺼져도 대용량의 데이터를 저장한다</del>
3) 입출력장치의 오류를 검출한다
4) 데이터 버퍼링을 통해 전송률 차이를 완화한다</p>
<p>3번 빈칸넣기
장치드라이버는 <strong>(1)장치컨트롤러</strong>가 컴퓨터 내부와 정보를 주고받을수 있게하는 <strong>(2)프로그램</strong>입니다</p>
<p>4번 장치드라이버의 설명중 옳은것은? <strong>(2)번</strong></p>
<p>1) 운영체제가 기본적으로 제공하는 장치드라이버는 <del>없음</del>
2) 컴퓨터가 장치드라이버를 인식하고 실행할 수 있으면 해당 입출력장치의 사용이 가능함
3) 컴퓨터가 장치드라이버를 인식하고 <del>실행할수 없어도</del> 해당 입출력장치의 사용이 가능함
4) 장치드라이버는 <del>하드웨어</del>이다</p>
<h4 id="p255256">P.255~256</h4>
<p>1번 메모리 맵 입출력과 고립형 입출력방식의 설명중 틀린것 <strong>(2)번</strong></p>
<p>1) 메모리 맵 입출력은 메모리를 위한 주소공간과 입출력장치에 접근하기 위한 주소공간을 하나의 주고송가능로 간주하는 방법다
2) 고립형 입출력방식은 메모리주소 공간을 <del>축소시키는 방법이다</del>
3) 메모리 맵 입출력방식은 메모리와 입출력장치에 동일한명령어로써 접근한다
4) 고립형 입출력은 분리된 주소공간으로 메모리와 입출력장치를 관리하는 방식이다</p>
<p>2번 빈칸채우기</p>
<blockquote>
<p>인터럽트A의 인터럽드 서비스 루틴을 실행하던 도중 우선순위가 더 높은 인터럽트B가 발생했을때 CPU는 인터럽트 (1)의 인터럽트 서비스 루틴을 잠시멈추고, 인터럽트(2)의 인터럽트 서비스 루틴을 실행한다</p>
</blockquote>
<p><strong>(1)A  (2)B</strong></p>
<p>3번 DMA의 설명중 틀린것은?<strong>(3)번</strong></p>
<p>1) DMA작업이 완료되면 DMA컨트롤러는 CPU에 인터럽트 요청을 보낸다
2) DMA컨트롤러와 CPU는 시스템버스를 동시에 사용할수 없다
3) DMA컨트롤러는 <del>CPU를 거치고</del> 메모리와 입출력장치 간의 데이터를 주고받는다
4) DMA는 프로그램 입출력보다 CPU의 입출력 부담이 적다(?) 어디나온건지 찾아보기</p>
<p>4번 <strong>메모리 맵 입출력</strong></p>
<blockquote>
<p>메모리에 접근하기 위한 주소공간과 입출력장치에 접근하려는 주소공간을 하나로 간주하는 방식은?</p>
</blockquote>
<p>5번 <strong>고립형 입출력</strong></p>
<blockquote>
<p>메모리에 접근하기위한 주소공간과 입출력장치에 접근하려는 주소공간을 별도의 주소공간으로 분리하는 방식은?</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[[혼공컴운_3주]Chapter7 보조기억장치]]></title>
            <link>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B43%EC%A3%BCchapter7-%EB%B3%B4%EC%A1%B0%EA%B8%B0%EC%96%B5%EC%9E%A5%EC%B9%98</link>
            <guid>https://velog.io/@study_record/%ED%98%BC%EA%B3%B5%EC%BB%B4%EC%9A%B43%EC%A3%BCchapter7-%EB%B3%B4%EC%A1%B0%EA%B8%B0%EC%96%B5%EC%9E%A5%EC%B9%98</guid>
            <pubDate>Thu, 18 Jan 2024 12:44:19 GMT</pubDate>
            <description><![CDATA[<h3 id="하드디스크">하드디스크</h3>
<ul>
<li>자기방식으로 데이터를 저장함(자기디스크의 일종)</li>
<li>플래터(Platter) : 실질적으로 데이터가 저장되는 곳. 자기물질로 덮여있어 N극과 S극을 저장함. 여러겹을 겹처서 사용가능 함.</li>
<li>스핀들(Spindle) : 플래터를 회전시키는 구성요소</li>
<li>RPM(Revolution Per Minute) : 스핀들이 플래터를 돌리는 속도. 분당회전수를 나타냄
  ex) RPM 15000  → 1분에 15000바퀴를 회전하는 하드디스크</li>
<li>헤드(Head) : 플래터를 대상으로 데이터를 읽고쓰는 구성요소. 플래터위에 미세하기 떠있는 바늘같은 부품.<ul>
<li>다중 헤드 디스크 = 고정 헤드 디스크 : 헤드가 트랙별로 여러개 달려있음. 탐색시간이 들지 않음(탐색시간이  0 임)</li>
<li>단일 헤드 디스크 = 이정 헤드 디스크 : 헤드가 플래터 한면에 한개 달려있음. 헤드가 데이터가 있는 곳까지 움직임</li>
</ul>
</li>
<li>디스크암(Disk Arm) : 헤드를 원하는 위치에 이동시키는 부품</li>
</ul>
<h3 id="플래터에-데이터-저장-방법">플래터에 데이터 저장 방법</h3>
<ul>
<li>플래터는 트랙(Track)과 섹터(Sector)라는 단위로 데이터를 저장함</li>
<li>트랙(Track) : 하나의 원. 플래터를 동심원으로 나눈공간</li>
<li>섹터(Sector) : 트랙을 여러조각으로 나눴을때 한 조각. 하드디스크의 가장 작은 전송단위</li>
<li>블록(Block) : 하나이상의 섹터를 묶을때 부르는 이름</li>
<li>실린더(Cylinder) : 여러겹의 플래터 상에서 같은 트랙이 위치한곳을 모아 연결한 논리적 단위. 플래터를 같은 트랙끼리 연결한 원통모양 공간. </li>
<li>연속된 정보는 하나의 실린더에 기록됨 → 이유는 디스크암을 움직이 지 않고 바로 데이터에 접근하기 위해서
<img src="https://velog.velcdn.com/images/study_record/post/9066f4dd-d715-4160-a87a-10469fe60fb7/image.png" alt=""></li>
</ul>
<h3 id="하드디스크에-저장된-데이터-접근-과정">하드디스크에 저장된 데이터 접근 과정</h3>
<ul>
<li>데이터에 접근하는 시간 : 탐색시간, 회전지연, 전송시간</li>
<li>탐색시간(Seek time)<ul>
<li>접근하려는 데이터가 저장된 트랙까지 헤드를 이동시키는 시간</li>
</ul>
</li>
<li>회전지연(Rotationl latency)<ul>
<li>헤드가 있는곳으로 플래터를 회전시키는 시간 </li>
</ul>
</li>
<li>전송시간(Transfer time)<ul>
<li>하드디스크 컴퓨터간에 데이터가 전송하는 시간</li>
</ul>
</li>
<li><a href="https://youtu.be/wtdnatmVdIg?si=Sk5fC7osrstjd2Rj">관련 유투브영상</a></li>
</ul>
<h3 id="플래시메모리">플래시메모리</h3>
<ul>
<li>플래시메모리기반의 보조기억장치를 많이 사용함 예)SSD, SD카드등</li>
<li>전기적으로 데이터를 읽고 쓸수있는 반도체기반의 저장장치</li>
<li>ROM, 사용하는 거의 모든 전자 제품에 내장되어 있음</li>
<li>일정횟수이상 데이터를 쓰고 지우면 더이상 데이터를 저장할수 없음</li>
<li>종류<ul>
<li>NAND 플래시 메모리 <ul>
<li>NAND 연산을 수행하는 회로를 기반으로 만들어짐. </li>
<li>대용량 저장자치로 많이 사용됨</li>
</ul>
</li>
<li>NOR 플래시 메모리<ul>
<li>NOR 연산을 수행하는 회로를 기반으로 만들어짐</li>
</ul>
</li>
</ul>
</li>
<li>셀(Cell) : 플래시메모리에서 데이터를 저장하는 가장 작은 단위<ul>
<li>SLC(Single Level Cell) : 한 셀에 1비트를 저장할수 있는 플래시 메모리</li>
<li>MLC(Multiple Level Cell) : 한 셀에 2비트를 저장할수 있는 플래시 메모리</li>
<li>TLC(Triple Level Cell) : 한 셀에 3비트를 저장할수 있는 플래시 메모리</li>
<li>QLC(Quad Level Cell) : 한 셀에 4비트를 저장할수 있는 플래시 메모리</li>
</ul>
</li>
<li>페이지(Page) : 셀이 모여서 만들어진 단위. <strong>읽기과 쓰기의 단위</strong></li>
<li>블록(Block) : 페이지가 모여서 만들어진 단위. <strong>삭제의 단위</strong></li>
<li>플레인(Plane) : 블록이 모여서 만들어진 단위</li>
<li>다이(Die) : 플레인이 모여서 만드어진 단위</li>
<li>셀→페이지→블록→플레인→다이</li>
</ul>
<h3 id="slcsingle-level-cell">SLC(Single Level Cell)</h3>
<ul>
<li>한 셀로 두개의 정보를 표현할수 있음</li>
<li>MLC, TLC에 비해서 비트의 빠른 입출력이 가능함</li>
<li>수명이 길음 (수십만번 까지 데이터를 쓰고 지우는것이 가능함)</li>
<li>용량대비 가격이 높음</li>
<li>기업에서 데이터를 많이 읽고쓰며 고성능장치가 필요한곳에 사용함</li>
</ul>
<h3 id="mlcmultiple-level-cell">MLC(Multiple Level Cell)</h3>
<ul>
<li>한 셀로 네개의 정보표현이 가능함</li>
<li>SLC보다 속도와 수명이 떨어짐</li>
<li>SLC보다 대용량화가 유리함</li>
<li>SLC보다 용량대비 가격이 저렴함</li>
<li>시중에 사용되는 많은 플래시메모리느 MLC, TLC로 만들어짐</li>
</ul>
<h3 id="tlc타입">TLC타입</h3>
<ul>
<li><p>한 셀로 여덟개의 정보 표현이 가능함</p>
</li>
<li><p>대용량화에 유리함</p>
</li>
<li><p>SLC, MLC보다 수명과 속도가 떨어짐</p>
</li>
<li><p>SLC, MLC보다 용량대비 가격이 저렴함</p>
</li>
<li><table>
<thead>
<tr>
<th align="center">구분</th>
<th align="center">SLC</th>
<th align="center">MLC</th>
<th align="center">TLC</th>
</tr>
</thead>
<tbody><tr>
<td align="center">셀당 bit</td>
<td align="center">1bit</td>
<td align="center">2bit</td>
<td align="center">3bit</td>
</tr>
<tr>
<td align="center">수명</td>
<td align="center">길음</td>
<td align="center">보통</td>
<td align="center">짧음</td>
</tr>
<tr>
<td align="center">읽기/쓰기 속도</td>
<td align="center">빠름</td>
<td align="center">보통</td>
<td align="center">느림</td>
</tr>
<tr>
<td align="center">용량대비 가격</td>
<td align="center">높음</td>
<td align="center">보통</td>
<td align="center">낮음</td>
</tr>
</tbody></table>
</li>
</ul>
<h3 id="페이지의-상태">페이지의 상태</h3>
<ul>
<li>세가지의 상태를 가질수 있음 → Free, valid, Invalid</li>
<li>Free 상태 : 어떠한 데이터도 저장하지않아서 새로운 데이터를 저장할수 있는 상태</li>
<li>Vaild 상태 : 유효한 데이터를 저장하고 있는 상태</li>
<li>Invaild 상태 : 유효하지 않은 데이터(쓰레기값)를 저장하고 있는 상태</li>
<li>플래시메모리는 덮여쓰기가 불가능해 vaild상태에서 새데이터를 저장할수 없음</li>
<li>가비지컬렉션(Grabage collection) : invalild 상태인 페이지를 정리하위해 나온기능<ul>
<li>유효한 페이지들만 새로운 블록에 복사하고 기존블록을 삭제한다</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/study_record/post/ebd91e54-32ad-4ed9-a17e-b75f9078666c/image.png" alt=""></p>
<h3 id="raidredundant-array-of-independent-disks-📌선택미션">RAID(Redundant Array of Independent Disks) 📌선택미션</h3>
<ul>
<li>하드디스크와 SSD를 사용하는 기술</li>
<li>데이터의 안전성 혹은 높은 성능을 위해 여러개의 물리적 보조기억장치를 하나의 논리적 보조기억장치처럼 사용하는 기술</li>
<li>종류 : RAID레벨(RAID구성방법)으로 나눠짐<ul>
<li>RAID0, RAID1, RAID2, RAID3, RAID4, RAID5, RAID6, RAID10, RAID50의 종류가 있음</li>
<li>RAID0, RAID1, RAID5, RAID6이 대중적임</li>
</ul>
</li>
</ul>
<h3 id="raid-0-📌선택미션">RAID 0 📌선택미션</h3>
<ul>
<li>여러개의 보조기억장치에 데이터를 단순히 나누어 저장하는 구성방식</li>
<li>데이터를 저장할때 각 하드디스크를 번갈아가면서 데이터를 저장함 → 저장되는 데이터가 하드디스크 개수만큼 나눠서 저장됨</li>
<li>스트라입(stripe) : 분산되어 저장된 데이터를 말함</li>
<li>스트라핑(striping) : 분산하여 저장하는 것</li>
<li>스트라핑으로 저장되면 읽고쓰는 속도가 빨라짐(동시에 읽고쓸수 있어서)</li>
<li>저장된 정보가 안전하지 않음 → 하나의 디스크에 문제가 생기면 모든 하드디스크의 정보를 읽지 못함
<img src="https://velog.velcdn.com/images/study_record/post/92faf021-fd84-4d31-87dd-be2ceba779ca/image.png" alt=""></li>
</ul>
<h3 id="raid-1-📌선택미션">RAID 1 📌선택미션</h3>
<ul>
<li>원본과 복사본을 만드는 방식(=미러링)</li>
<li>쓰기속고가 RAID 0 보다 늦음</li>
<li>복구방식이 간단함(복사본이 잇어서)</li>
<li>하드디스크 개수가 한정되어있을때 사용가능한 용량이 줄어든다</li>
<li>많은 양의 하드디스크가 필요함 → 비용증가
<img src="https://velog.velcdn.com/images/study_record/post/9e81749c-df56-4bf5-bdcd-5fac6c02bd4b/image.png" alt=""></li>
</ul>
<h3 id="raid-4-📌선택미션">RAID 4 📌선택미션</h3>
<ul>
<li>패리티비트를 저장장치에 두는 방식</li>
<li>패리티 비트 : 오류를 검출하고 복구하기 위한 정보<ul>
<li>원래 패리티비트는 오류검출만 가능함 <strong>But</strong> RAID에서 패리티값으로 검출과 수정이 가능함</li>
</ul>
</li>
<li>RAID보다 적은 하드디스로 데이터를 안전하게 보관가능함</li>
<li>패리티저장 장치에 병목현상 발생함 <ul>
<li>새로운 데이터가 저장 될때마사 패리티를 저장하는 디스크에 데이터를 쓰기 때문에
<img src="https://velog.velcdn.com/images/study_record/post/ee23c4c3-76fd-4c6f-a6ae-038314f95b25/image.png" alt=""></li>
</ul>
</li>
</ul>
<h3 id="raid-5-📌선택미션">RAID 5 📌선택미션</h3>
<ul>
<li>패리티 정보를 분산하여 저장하는 방식</li>
<li>병목현상을 해소함
<img src="https://velog.velcdn.com/images/study_record/post/044ed940-153a-4759-b7b5-3bf5a94241ee/image.png" alt=""></li>
</ul>
<h3 id="raid-6-📌선택미션">RAID 6 📌선택미션</h3>
<ul>
<li>구성은 RAID5와 같음</li>
<li>두개의 패리티를 가짐 → 오류를 검출하고 복구하는 수단이 두개가 됨</li>
<li>RAID 4, RAID 5보다 안전함 → 데이터를 안전하게 보관하고 싶을때 사용함</li>
<li>쓰기속도는 RAID 5보다 느림
<img src="https://velog.velcdn.com/images/study_record/post/865933df-b81c-461c-a506-33b34393ff08/image.png" alt=""></li>
</ul>
<blockquote>
<p>Nested RAId란? 여러 RAID레벨을 혼합한 방식</p>
</blockquote>
<h3 id="📚마무리문제">📚마무리문제</h3>
<h4 id="p219">P.219</h4>
<p>1번</p>
<blockquote>
<p>하드디스크에 데이터는 어디에 저장되나? <strong>(1)플래터</strong>
하드디스크에 플래터를 돌리는 구성요소는? <strong>(2)디스크암</strong>
하드디스크에 저장된 데이터를 읽고쓰는 구성요소는? <strong>(3)헤드</strong></p>
</blockquote>
<p>2번 SLC, MLC, TLC에 대해 틀리것 <strong>(2)번</strong></p>
<p>1) SLC타입은 MLC타입보다 일고 쓰는 속도가 빠르가
2) TLC타입은 MLC타입보다 읽고 쓰는 <del>속도가 빠르다</del>
3) MLC타입은 SLC타입보다 가격이 저렴하다
4) TLC타입은 MLC타입보다 가격이 저렴하다</p>
<h4 id="p228229">P.228~229</h4>
<p>1번 RAID 에 대한 옳지 않은 설명 고르기 <strong>(2)번</strong></p>
<p>1) RAID는 여러보조기억장치들을 하나의 장치처럼 사용하는기술
2) RAID는 구성하지 않아도 보조기억장치는 <del>영구히 사용가능</del>
3) RAID를 통해 보조기억장치들의 성능을 높일수 있음
4) RAID를 통해 데이터를 안전하게 보관할수 있음</p>
<p>2번 RAID 0과 관련한 올은 설명고르기 <strong>(3)번</strong></p>
<p>1) RAID 0은 <del>하나의</del> 물리적인 보조기억장치만 사용하는 방식
2) RAID 0은 <del>안전한 백업</del>이 가능한 RAID 구성방식
3) RAID 0은 데이터를 단순히 병렬적으로 분산사여 저장하는 방식
4) RAID 0은 <del>CPU 구성방식</del></p>
<p>3번 아래처럼 구성되는 RAID 레벨은? <strong>RAID 6</strong>
<img src="https://velog.velcdn.com/images/study_record/post/791be4fd-acc0-46cd-be00-976729e36d9b/image.png" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>