<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Bonglog - 기록과 정리의 공간</title>
    <link>https://devbksheen.tistory.com/</link>
    <description>기록과 정리의 공간</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 08:09:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Beekei</managingEditor>
    <image>
      <title>Bonglog - 기록과 정리의 공간</title>
      <url>https://tistory1.daumcdn.net/tistory/3466353/attach/c1c0c4ae6723425e98ea0e20c3081132</url>
      <link>https://devbksheen.tistory.com</link>
    </image>
    <item>
      <title>SQLD - 5. 관리구문</title>
      <link>https://devbksheen.tistory.com/entry/SQLD-5-%EA%B4%80%EB%A6%AC%EA%B5%AC%EB%AC%B8</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;DML(Data Manipulation Language)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블에 레코드를 추가, 변경, 삭제 등 데이터를 조작하는 작업을 수행하는 SQL 명령어&lt;/li&gt;
&lt;li&gt;DDL과 달리 자동커밋(AUTOCOMMIT)되지 않고 명시적으로 커밋(COMMIT)을 실행&lt;/li&gt;
&lt;li&gt;커밋 전에는 롤백(ROLLBACK)이 가능하며 해당 데이터를 조회할 때는 변경 사항이 보이지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;INSERT&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블에 레코드를 추가하는 명령어&lt;/li&gt;
&lt;li&gt;테이블의 칼럼 목록을 기입 없이 &lt;span style=&quot;color: #ee2323;&quot;&gt;VALUES만으로 행을 추가할 때는 테이블의 칼럼 수와 VALUES 인수의 개수가 같아야 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;INSERT INTO 테이블 칼럼1, 칼럼2, 칼럼3 ... VALUES(데이터1, 데이터2, 데이터3 ...);
INSERT INTO 테이블 VALUES(데이터1, 데이터2, 데이터3 ...);&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UPDATE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존의 레코드를 수정하는 명령어&lt;/li&gt;
&lt;li&gt;WHERE절은&amp;nbsp;생략&amp;nbsp;가능하지만&amp;nbsp;전체&amp;nbsp;데이터를&amp;nbsp;대상으로&amp;nbsp;수정됨&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE 테이블 SET 칼럼1 = 데이터1, 컬럼2 = 데이터2 ... WHERE 조건&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DELETE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존의 레코드를 삭제하는 명령어&lt;/li&gt;
&lt;li&gt;TRUNCATE는 작업취소(UNDO)를 위한 데이터를 생성하지 않아 속도가 빠르고 디스크 공간을 릴리즈(Release)하여 재사용이 가능&lt;/li&gt;
&lt;li&gt;DELETE는 로그를 남기며 롤백이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;DELETE FROM 테이블 WHERE 조건 # WHERE절은 생략 가능하지만 전체 데이터가 삭제됨&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MERGE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블 단위로 데이터를 갱신하는 명령어&lt;/li&gt;
&lt;li&gt;두 테이블을 비교하여 특정 조건에 맞는 레코드에 대해서는 UPDATE문을 그렇지 않은 레코드는 INSERT문 실행&lt;/li&gt;
&lt;li&gt;테이블의 변경 사항을 백업 테이블에 반영하거나 개발을 위해 추가, 변경된 건을 운영 환경에 적용할 때 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;MERGE INTO 테이블1 USING 테이블2 # 테이블2의 변경사항을 테이블1에 반영
ON 조건
WHEN MATCHED THEN # ON절 조건에 만족하면
    UPDATE SET  테이블1.칼럼1 = 테이블2.칼럼1, 테이블1.칼럼2 = 테이블2.칼럼2, 테이블1.칼럼3 = 테이블2.칼럼3
    DELETE WHERE 테이블1.칼럼1 = 값1 # 해당 DELETE절은 위에서 UPDATE절에 의해 갱신된 데이터에만 적용(갱신된 데이터 기준)
WHEN NOT MATCHED THEN # ON절 조건에 만족하지 않으면
    INSERT (테이블1.칼럼1, 테이블1.칼럼2, 테이블1.칼럼3) VALUES (테이블2.칼럼1, 테이블2.칼럼2, 테이블2.칼럼3);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TCL(Transaction Control Language)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜잭션을 제어하는 SLQ 명령어&lt;/li&gt;
&lt;li&gt;INSERT, UPDATE, DELETE 등의 명령들을 하나의 트랜잭션으로 묶어서 처리하거나 취소할 수 있는 명령어를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트랜잭션의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;원자성(Atomicity)&lt;/b&gt;: 하나의 트랜잭션에 묶인 연산들은 모두 실행되든지 전혀 실행되지 않아야 함(All or Nothing)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;일관성(Consistency)&lt;/b&gt;: 트랜잭션의 결과는 DB 정합성을 깨지 않음, 트랜잭션 이전에 오류가 없다면 이후에도 오류가 없음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고립성(Isolation)&lt;/b&gt;: 트랜잭션은 독립적으로 수행되며 다른 트랜잭션이 중간에 간섭하거나 영향을 미치지 않음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;영속성(Durability)&lt;/b&gt;: 트랜잭션의 결과는 DB에 영구적으로 저장되고 유지됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;COMMIT&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;INSERT, UPDATE, DELETE와 같은 DML 명령들을 통한 변경사항을 DB에 영구적으로 반영하고 락을 해제하여 트랜잭션을 완료&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;BEGIN TRANSACTION;
INSERT ~
UPDATE ~
DELETE ~
COMMIT;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ROLLBACK&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이전의 커밋 이후 새로운 트랜잭션에 포함되는 전체 변경사항 또는 지정된 저장점(SAVEPOINT) 이후의 변경사항을 취소하고 복원&lt;span style=&quot;color: #ee2323;&quot;&gt;(커밋 후의 변경사항은 롤백 불가)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DDL 명령어는 자동커밋이 되므로 롤백이 불가&lt;/span&gt;하지만 INSERT, UPDATE, DELETE와 같은 DML 명령어는 자동커밋이 되지 않아 롤백이 가능(Oracle 기준)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;BEGIN TRANSACTION;
INSERT ~
UPDATE ~
DELETE ~
ROLLBACK;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SAVEPOINT&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;롤백을 위한 저장점을 지정&lt;/li&gt;
&lt;li&gt;트랜잭션에 포함되는 전체 변경사항이 취소되는 것이 아닌 저장점 이후에 해당하는 변경사항만 취소&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;# Oracle
SAVEPOINT 이름;
ROLLBACK TO 이름;

#SQL Server
SAVE TRANSACTION 이름;
ROLLBACK TRANSACTION 이름;
&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DDL(Data Definition Language)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스키마를 정의하고 관리하는 SQL 명령어&lt;/li&gt;
&lt;li&gt;ERD로 그려진 데이터 모델링은 논리적 모델링, DDL을 사용해서 DBMS에 적용하는 것은 물리적 모델링&lt;/li&gt;
&lt;li&gt;DDL에서 저장해야 할 요소
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블 이름: 테이블의 이름을 지정&lt;/li&gt;
&lt;li&gt;칼럼 이름: 테이블을 구성하는 칼럼 이름 지정&lt;/li&gt;
&lt;li&gt;칼럼 데이터 타입: 각 컬럼의 데이터 타입 지정&lt;/li&gt;
&lt;li&gt;칼럼 데이터 크기: 각 컬럼의 데이터 크기 지정&lt;/li&gt;
&lt;li&gt;제약조건(Constraints): PK, NOT NULL 등 칼럼이 가지는 제약조건 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CREATE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블을 생성하는 명령어&lt;/li&gt;
&lt;li&gt;테이블의 이름은 DB 내에서 고유, 칼럼 이름은 해당 테이블 내에서 고유&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;테이블의 이름은 담는 데이터의 성격에 맞는 이름으로, 칼럼의 이름은 통일성을 생각하여 지정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;테이블, 칼럼, 제약조건의 이름은 숫자로 시작될 수 없고 A-Z, a-z, 0-9, _, $, # 문자만 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;CREATE TABLE 테이블1 (
    칼럼1 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL, 
    칼럼2 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL,
    칼럼3 데이터타입(데이터크기), # DEFAULT, NULL / NOT NULL 생략 가능 (기본값은 NULL 값으로 설정)
    ... ,
    CONSTRAINT 이름1 PRIMARY KEY (칼럼1), # 제약조건 지정
    CONSTRAINT 이름2 FOREIGN KEY (칼럼2) REFERENCES 테이블2(칼럼4),
)&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;PRIMARY KEY&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PK 칼럼을 지정&lt;/li&gt;
&lt;li&gt;모든 행의 값이 고유(Unique)해야하고 NULL 값을 가질 수 없음&lt;/li&gt;
&lt;li&gt;자동으로 UNIQUE INDEX 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FOREIGN KEY&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FK(외래키) 칼럼을 지정&lt;/li&gt;
&lt;li&gt;다른 테이블의 PK로부터 가져온 칼럼을 지정&lt;/li&gt;
&lt;li&gt;논리적 모델링에서 정의한 관계(Relationship)를 표현&lt;/li&gt;
&lt;li&gt;참조 대상인 칼럼에 대해서 참조 무결성 제약조건을 지정 가능(일관성이 깨지는 것을 DBMS 차원에서 방지)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;DELETE/MODIFY ACTION&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;제약조건&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CASCADE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부모의 값 삭제 시 자식의 값도 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;SET NULL&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부모의 값 삭제 시 자식의 값은 NULL&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;SET DEFAULT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부모의 값 삭제 시 자식의 해당 컬럼은 기본값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RESTRICT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자식 테이블에 해당 데이터가 PK로 지정되지 않은 경우에만 부모 테이블에서 삭제 및 수정 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;NO ACTION&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;제약조건을 위배한 경우 동작이 실패하며 아무런 액션되 취하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;INSERT ACTION&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 150px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;b&gt;제약조건&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;b&gt;AUTOMATIC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;부모 테이블에 PK가 없는 경우 PK 생성 후 자식 테이블에 값 입력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;SET NULL&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부모 테이블에 PK가 없는 경우 자식 테이블에 NULL값 입력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;SET DEFAULT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부모 테이블에 PK가 없는 경우 자식 테이블에 기본값 입력&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DEPENDENT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부모 테이블에 PK가 존재할 때만 자식 테이블에 값 입력을 허용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 25px;&quot;&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;&lt;b&gt;NO ACTION&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 25px;&quot;&gt;제약조건을 위배한 경우 동작이 실패하며 아무런 액션되 취하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;UNIQUE KEY&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 값이 고유해야 하는 조건 지정&lt;/li&gt;
&lt;li&gt;PK와 달리 NULL값 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;NOT NULL&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NULL 값을 가질 수 없도록 지정&lt;/li&gt;
&lt;li&gt;NULL이 입력되는 경우 오류 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CHECK&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가질 수 있는 값을 특정 범위로 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748589022392&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CONSTRAINT CHK_GENDER CHECK(GENDER IN 'M', 'F')) # 성별값 제한&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ALTER&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;생성되어 있는 테이블의 스키마를 변경하는 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;칼럼 추가&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 칼럼들의 끝에 추가됨&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;ALTER TABLE 테이블 ADD 칼럼 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;칼럼 삭제&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ALTER로 삭제한 칼럼은 복구 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;ALTER TABLE 테이블 DROP COLUMN 칼럼;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;칼럼 변경&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 타입 변경 시 칼럼에 저장된 테이터가 없을 경우에만 수정 가능&lt;/li&gt;
&lt;li&gt;데이터 크기 감소 시 기존 데이터를 모두 담을 수 있는 경우에만 수정 가능&lt;/li&gt;
&lt;li&gt;DEFAULT 설정 시 변경 이후에 추가되는 레코드에만 적용&lt;/li&gt;
&lt;li&gt;NOT NULL 설정 시 현재 칼럼의 값 중에 NULL이 없는 경우에만 수정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;ALTER TABLE 테이블 MODIFY(
    칼럼1 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL,
    칼럼2 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL,
    ...
)

# SQL Server은 아래 명령어 형식을 따르며 여러 칼럼을 동시에 수정할 수 없음
ALTER TABLE 테이블 ALTER COLUMN 칼럼1 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL;
ALTER TABLE 테이블 ALTER COLUMN 칼럼2 데이터타입(데이터크기) DEFAULT 기본값 NULL / NOT NULL;
...&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;칼럼 이름 변경&lt;/h4&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;ALTER TABLE 테이블 RENAME COLUMN 칼럼1 TO 칼럼2;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;제약조건 추가&lt;/h4&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;ALTER TABLE 테이블 ADD CONSTRAINT 이름 제약조건(컬럼);
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테이블 삭제&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다른 테이블에서 삭제할 테이블을 참조하고 있는 경우 CASCADE CONSTRAINTS를 명시하지 않으면 오류가 발생해 삭제 불가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;DROP TABLE 테이블 CASCADE CONSTRAINTS;
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테이블 초기화&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블의 데이터만 초기화&lt;/li&gt;
&lt;li&gt;DELETE와 달리 롤백이 불가능하고 저장 공간이 릴리즈(Release)됨&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;TRUNCATE TABLE 테이블;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DROP, TRUNCATE, DELETE의 차이&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;DROP&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;TRUNCATE&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;DELETE&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;문법&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;DROP TABLE 테이블&lt;/td&gt;
&lt;td&gt;TRUNCATE TABLE 테이블&lt;/td&gt;
&lt;td&gt;DELETE FROM 테이블&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SQL 종류&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;DDL&lt;/td&gt;
&lt;td&gt;DDL&lt;/td&gt;
&lt;td&gt;DML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;동작&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;스키마까지 삭제&lt;/td&gt;
&lt;td&gt;테이블 생성 초기 상태로 초기화&lt;br /&gt;(데이터만&amp;nbsp;삭제)&lt;/td&gt;
&lt;td&gt;데이터만&amp;nbsp;삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;자동커밋 여부&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;⭕&lt;/td&gt;
&lt;td&gt;⭕&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;디스크 공간 릴리즈&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;⭕&lt;/td&gt;
&lt;td&gt;⭕&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;작업취소(UNDO)를 위한&lt;/b&gt;&lt;br /&gt;&lt;b&gt;로그&amp;nbsp;데이터&amp;nbsp;생성&amp;nbsp;여부&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;⭕&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DCL(Data Control Language)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자를 생성하고 권한을 부여하는 작업을 수행하는 SQL 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;USER 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB 생성 후 데이터를 읽고 쓰기 위해 계정(USER)를 생성하고 변경, 삭제하는 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;USER 생성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;같은 이름으로 생성된 계정이 존재할 경우 오류 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;CREATE USER 사용자 IDENTIFIED BY 패스워드;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;USER 변경&lt;/h4&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;ALTER USER 사용자 IDENTIFIED BY 패스워드;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;USER 삭제&lt;/h4&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;DROP USER 사용자;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;권한 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB에 대한 접근(읽기, 쓰기) 권한을 부여하는 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;GRANT&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권한을 부여하는 명령어&lt;/li&gt;
&lt;li&gt;특정 테이블에 대해서만 권한을 부여하려면 ON 옵션 지정&lt;/li&gt;
&lt;li&gt;WITH GRANT OPTION 지정 시 권한을 받은 사용자가 다른 사용자에게 자신의 권한 부여 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;GRANT 권한 ON 테이블 TO 사용자 WITH GRANT OPTION;

GRANT CREATE SESSION TO 사용자; # 데이터베이스 접속 권한 부여
GRANT ALTER SESSION TO 사용자; # 데이터베이스 접속 상태에서 환경 값 변경 권한 부여
GRANT CREATE USER TO 사용자; # 사용자 생성 권한 부여
GRANT ALTER USER TO 사용자; # 사용자 정보 변경 권한 부여
GRANT DROP USER TO 사용자; # 사용자 삭제 권한 부여
GRANT CREATE TABLE TO 사용자; # 테이블 생성 권한 부여
GRANT CREATE ANY TABLE TO 사용자; # 임의의 스키마 소유 테이블 생성 권한 부여
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;REVOKE&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권한을 회수하는 명령어&lt;/li&gt;
&lt;li&gt;특정 테이블에 대해서만 권한을 회수하려면 ON 옵션 지정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RESTRICT&lt;/b&gt;&lt;/span&gt;: 해당 권한을 회수할 때 &lt;span style=&quot;color: #ee2323;&quot;&gt;의존적인 다른 권한이 존재하는 경우 명령이 수행되지 않음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CASCADE&lt;/b&gt;&lt;/span&gt;: 해당 권한을 회수할 때 &lt;span style=&quot;color: #ee2323;&quot;&gt;의존적인 다른 권한까지 함께 회수&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;REVOKE 권한 ON 테이블 FROM 사용자 RESTRICT / CASCADE;

REVOKE CREATE SESSION FROM 사용자; # 데이터베이스 접속 권한 회수
REVOKE ALTER SESSION FROM 사용자; # 데이터베이스 접속 상태에서 환경 값 변경 권한 회수
REVOKE CREATE USER FROM 사용자; # 사용자 생성 권한 회수
REVOKE ALTER USER FROM 사용자; # 사용자 정보 변경 권한 회수
REVOKE DROP USER FROM 사용자; # 사용자 삭제 권한 회수
REVOKE CREATE TABLE FROM 사용자; # 테이블 생성 권한 회수
REVOKE CREATE ANY TABLE FROM 사용자; # 임의의 스키마 소유 테이블 생성 권한 회수
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ROLE 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;많은 권한들을 각각 따로 부여하지 않고, &lt;span style=&quot;color: #ee2323;&quot;&gt;몇 가지의 권한을 묶어서 패키지 형태(ROLE)로 부여&lt;/span&gt;하는 명령어&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;CREATE ROLE ROLE_MANAGER; # ROLE_MANAGER이라는 이름의 ROLE 생성
GRANT CREATE SESSION, CREATE TABLE, CREATE USER TO ROLE_MANAGER; # 생성된 ROLE_MANAGER에 여러가지 권한 부여
GRANT ROLE_MANAGER TO 사용자; # ROLE_MANAGER을 사용자에게 부여&lt;/code&gt;&lt;/pre&gt;</description>
      <category>자격증</category>
      <category>DCL</category>
      <category>DDL</category>
      <category>Delete</category>
      <category>dml</category>
      <category>Grant</category>
      <category>insert</category>
      <category>revoke</category>
      <category>Role</category>
      <category>SQLD</category>
      <category>Update</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/471</guid>
      <comments>https://devbksheen.tistory.com/entry/SQLD-5-%EA%B4%80%EB%A6%AC%EA%B5%AC%EB%AC%B8#entry471comment</comments>
      <pubDate>Fri, 30 May 2025 16:20:28 +0900</pubDate>
    </item>
    <item>
      <title>SQLD - 4. SQL 활용</title>
      <link>https://devbksheen.tistory.com/entry/SQLD-4-SQL-%ED%99%9C%EC%9A%A9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;서브쿼리(Subquery)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL문 내부에 함수가 들어갈 수 있는 위치에 또 다른 독립적인 SQL문을 넣는 것&lt;/li&gt;
&lt;li&gt;서브쿼리를 품고 있는 쿼리를 메인쿼리(Main Query)라고 부름&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;메인쿼리의 칼럼을 사용할 수 있으며(메인쿼리에서는 서브쿼리의 칼럼 사용 불가), ORDER BY절은 사용할 수 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;단일행 비교연산자를 사용할 경우 결과는 1건 이하, 2건 이상의 결과를 반환할때는 다중행 비교연산자를 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;메인쿼리 칼럼 사용 여부에 따라 &lt;b&gt;연관 서브쿼리&lt;/b&gt;, &lt;b&gt;비연관 서브쿼리&lt;/b&gt;로 구분&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;함수가 들어가는 위치에 따라 &lt;b&gt;스칼라 서브쿼리&lt;/b&gt;, &lt;b&gt;인라인 뷰&lt;/b&gt;, &lt;b&gt;중첩 서브쿼리&lt;/b&gt;로 구분&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스칼라 서브쿼리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SELECT문의 &lt;span style=&quot;color: #ee2323;&quot;&gt;칼럼이 입력되는 위치(SELECT, ORDER BY 등)에 들어가는 서브쿼리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;칼럼이 입력되는 위치에 삽입되므로 스칼라 서브쿼리의 &lt;span style=&quot;color: #ee2323;&quot;&gt;결과는 하나의 칼럼&lt;/span&gt;만을 가져야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인라인 뷰&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;FROM절의 테이블이 입력되는 위치에 들어가는 서브쿼리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;쿼리 실행 시 동적으로 생성되는 테이블&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;복잡한 쿼리를 단계적으로 작성&lt;/span&gt;할 수 있고 &lt;span style=&quot;color: #ee2323;&quot;&gt;전체가 아닌 테이블의 일부분만 불러와 비교 횟수를 줄일 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;SELECT절이 중첩되어 &lt;span style=&quot;color: #ee2323;&quot;&gt;쿼리가 복잡해지지만 별명(Alias) 사용해 가독성을 높일 수 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;중첩 서브쿼리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;WHERE절과 HAVING절에 쿼리가 중첩되어 들어가는 서브쿼리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;메인쿼리에서 참조하고 있는 테이블의 칼럼을 서브쿼리 내에서 다시 사용 가능&lt;/li&gt;
&lt;li&gt;스칼라 서브쿼리나 인라인 뷰와 달리 반환하는 값의 형태가 하나가 아닌 다양한 값 반환 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;단일행(Single Row)&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;1건 이하의 데이터&lt;/span&gt;를&amp;nbsp;반환, &lt;span style=&quot;color: #ee2323;&quot;&gt;단일행 비교연산자(=, &amp;gt;, &amp;lt; 등)의 연산 대상으로 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;다중행(Multi Row)&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;2건 이상의 데이터&lt;/span&gt;를 반환, &lt;span style=&quot;color: #ee2323;&quot;&gt;다중행 비교연산자(IN, ALL, EXIST 등)의 연산 대상으로 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중칼럼(Multi Column)&lt;/b&gt;: 여러 칼럼의 값을 반환(벡터), 여러 칼럼을 가진 테이블 형태&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;뷰(View)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;참조 시 동적으로 메모리 생성&lt;/span&gt;되는 임시 또는 가상 테이블&lt;/li&gt;
&lt;li&gt;CREATE VIEW로 시작되는 DDL 코드로 생성 가능&lt;/li&gt;
&lt;li&gt;복잡하고 긴 SELECT문을 만들어두고 사용할 수 있어 쿼리를 간결하고 단순하게 작성할 수 있지만 &lt;span style=&quot;color: #ee2323;&quot;&gt;삽입, 수정, 삭제에 대한 제한이 있고 인덱스를 가질 수 없는 단점 존재&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;집합연산자&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 테이블에 대한 집합 연산(합집합, 교집합 등)을 수행하는 연산자&lt;/li&gt;
&lt;li&gt;JOIN과 달리 특정한 기준키 없이 두 테이블의 레코드들에 대하여 연산을 수행하므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;두 테이블의 스키마가 동일해야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;스키마 구성은 동일하나 칼럼의 이름은 다를 수 있는데, 반환되는 칼럼의 이름은 첫 번째 테이블을 따름&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UNION ALL / UNION&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 테이블에 포함된 모든 레코드들을 모두 포함하는 합집합 연산을 수행&lt;/li&gt;
&lt;li&gt;두 테이블에 모두에 포함된 공통의 레코드(합집합)는 중복 레코드라도 함&lt;/li&gt;
&lt;li&gt;중복 레코드들을 &lt;span style=&quot;color: #ee2323;&quot;&gt;중복된 개수만큼 그대로 포함시키는 것은 UNION ALL&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;하나만 포함시키는 것은 UNION&lt;/span&gt;(한쪽 테이블 내에서의 중복까지 제거)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;INTERSECT&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 테이블에 &lt;span style=&quot;color: #ee2323;&quot;&gt;공통적으로 포함된 레코드만을 포함&lt;/span&gt;하는 교집합 연산을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MINUS / EXCEPT&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;왼쪽 테이블에서 두 테이블에 공통적으로 포함된 레코드들을 제외&lt;/span&gt;시킨 결과를 반환하는 차집합 연산을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eDgitl/btsOh4tEGAe/Lk0nsPDQhuHMdIFfT6mYR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eDgitl/btsOh4tEGAe/Lk0nsPDQhuHMdIFfT6mYR1/img.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;408&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eDgitl/btsOh4tEGAe/Lk0nsPDQhuHMdIFfT6mYR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeDgitl%2FbtsOh4tEGAe%2FLk0nsPDQhuHMdIFfT6mYR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chhhII/btsOhDiZXgQ/oh4sRmLNYUa7kaaLofv2Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chhhII/btsOhDiZXgQ/oh4sRmLNYUa7kaaLofv2Q0/img.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;408&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chhhII/btsOhDiZXgQ/oh4sRmLNYUa7kaaLofv2Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchhhII%2FbtsOhDiZXgQ%2Foh4sRmLNYUa7kaaLofv2Q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;왼쪽 UNION, 오른쪽 UNION ALL&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bm78FS/btsOhmA6UWk/tLsjAdnL4y8pqAPlMwaEJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bm78FS/btsOhmA6UWk/tLsjAdnL4y8pqAPlMwaEJK/img.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;408&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%; margin-right: 10px;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bm78FS/btsOhmA6UWk/tLsjAdnL4y8pqAPlMwaEJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbm78FS%2FbtsOhmA6UWk%2FtLsjAdnL4y8pqAPlMwaEJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lZWVz/btsOjgs8otX/0rHKNvJU6JFmYybAfITEt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lZWVz/btsOjgs8otX/0rHKNvJU6JFmYybAfITEt0/img.png&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;408&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4186%;&quot; data-widthpercent=&quot;50&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lZWVz/btsOjgs8otX/0rHKNvJU6JFmYybAfITEt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlZWVz%2FbtsOjgs8otX%2F0rHKNvJU6JFmYybAfITEt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;왼쪽 INTERSECT, 오른쪽 MINUS / EXCEPT&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;그룹함수&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUP BY절에 따른 결과에 대해서 그룹 별로 연산을 수행하는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ROLLUP&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUP BY절에 들어가는 &lt;span style=&quot;color: #ee2323;&quot;&gt;칼럼을 대상으로 하위 그룸핑을 수행&lt;/span&gt;하는 함수&lt;/li&gt;
&lt;li&gt;마지막 행(Row)에 전체를 하나로 묶은 그룹을 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748547026672&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 
    brand AS '브랜드',
    SUM(sales_count) AS '판매수'
FROM car 
GROUP BY ROLLUP(brand);
=&amp;gt;  브랜드      | 판매수   
    KG 모빌리티 | 290
    기아       | 642
    제네시스    | 725
    현대       | 728
    NULL      | 2385
   
SELECT 
    brand AS '브랜드',
    name AS '자동차명',
    SUM(sales_count) AS '판매수'
FROM car
GROUP BY ROLLUP(brand, name);
=&amp;gt;  브랜드       | 자동차명       | 판매수
    KG 모빌리티  | 렉스턴 스포츠 칸 | 140
    KG 모빌리티  | 코란도 투리스모  | 150
    KG 모빌리티  | NULL         | 290
    기아        | EV9          | 153
    기아        | K9           | 259
    기아        | 카니발         | 230
    기아        | NULL         | 642
    제네시스     | G90          | 395
    제네시스     | GV80         | 330
    제네시스     | NULL         | 725
    현대        | 싼타페         | 296
    현대        | 아이오닉N      | 122
    현대        | 팰리세이드      | 310
    현대        | NULL         | 728
    NULL       | NULL         | 2385&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CUBE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROLLUP과 비슷하지만 1차적인 하위 그룹핑만 수행하는데 반하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;조합 가능한 모든 경우로 그룹핑을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;인자가 1개인 경우 ROLLUP과 동일, 두 개 이상인 경우 결과는 다름&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748547429712&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 
    brand AS '브랜드',
    name AS '자동차명',
    SUM(sales_count) AS '판매수'
FROM car
GROUP BY CUBE(brand, name);
=&amp;gt; 브랜드       | 자동차명        | 판매수
   KG 모빌리티  | 렉스턴 스포츠 칸  | 140
   KG 모빌리티  | 코란도 투리스모   | 150
   KG 모빌리티  | NULL          | 290
   기아        | EV9           | 153
   기아        | K9            | 259
   기아        | 카니발          | 230
   기아        | NULL          | 642
   제네시스     | G90           | 395
   제네시스     | GV80          | 330
   제네시스     | NULL          | 725
   현대        | 싼타페          | 296
   현대        | 아이오닉N        | 122
   현대        | 팰리세이드       | 310
   현대        | NULL          | 728
   NULL       | 렉스턴 스포츠 칸  | 140
   NULL       | 코란도 투리스모   | 150
   NULL       | EV9           | 153
   NULL       | K9            | 259
   NULL       | 카니발          | 230
   NULL       | G90           | 395
   NULL       | GV80          | 330
   NULL       | 싼타페          | 296
   NULL       | 아이오닉N        | 122
   NULL       | 팰리세이드       | 310
   NULL       | NULL          | 2385&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GROUPING SETS&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹핑할 대상을 지정하는 함수&lt;/li&gt;
&lt;li&gt;ROLLUP, CUBE의 경우 소계, 총계 형태로 자동으로 그룹핑되지만 GROUPING SETS는 &lt;span style=&quot;color: #ee2323;&quot;&gt;입력된 인자에 대해서만 소계&lt;/span&gt;를 구할 때 사용&lt;/li&gt;
&lt;li&gt;인자에 ROLLUP이나 CUBE 함수를 넣을 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748547686646&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 
    brand AS '브랜드',
    name AS '자동차명',
    SUM(sales_count) AS '판매수'
FROM car
GROUP BY GROUPING SETS(brand, name);
=&amp;gt; 브랜드      | 자동차명         | 판매수
   KG 모빌리티  | NULL          | 290
   기아        | NULL          | 642
   제네시스     | NULL          | 725
   현대        | NULL          | 728
   NULL       | 렉스턴 스포츠 칸  | 140
   NULL       | 코란도 투리스모   | 150
   NULL       | EV9           | 153
   NULL       | K9            | 259
   NULL       | 카니발          | 230
   NULL       | G90           | 395
   NULL       | GV80          | 330
   NULL       | 싼타페          | 296
   NULL       | 아이오닉N       | 122
   NULL       | 팰리세이드       | 310&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GROUPING&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROLLUP, CUBE, GROUPING SETS과 함께 사용하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;소계에 해당하는 결과 행과 그렇지 않은 행을 구분&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;소계에 해당하는 결과 행에 경우 1, 그렇지 않은 경우 0을 반환, CASE문과 함께 사용하여 소계나 총계 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    CASE GROUPING(brand) WHEN 1 THEN '총계' ELSE brand END AS '브랜드',
    SUM(sales_count) AS '판매수'
FROM car
GROUP BY ROLLUP(brand);
=&amp;gt; 브랜드      | 판매수   
   KG 모빌리티  | 290
   기아        | 642
   제네시스     | 725
   현대        | 728
   총계        | 2385&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;윈도우함수&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;행과 행 간의 관계를 나타내는 연산을 쉽게 하기 위한 함수&lt;/li&gt;
&lt;li&gt;GROUP BY 연산과 비슷하지만 각 행을 대상으로 연산 수행 후 새로운 구성을 만드는 GROUP BY 연산과는 달리 새로운 행을 추가하거나 기존의 값을 변경&lt;/li&gt;
&lt;li&gt;모든 윈도우함수는 OVER 키워드와 함께 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;순위함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;순위를 구할 때 사용하는 함수&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RANK&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;동일 순위는 같은 순위값, 순위값은 앞 순위까지의 누적 개수 +1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DENSE_RANK&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;동일 순위는 같은 순위값, 순위값은 앞 순위의 +1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ROW_NUMBER&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;동일 순위라도 각각의 행이 고유 순위값을 가짐&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    student_name AS '학생명', 
    test_score AS '시험점수', 
    RANK() OVER(ORDER BY test_score DESC) AS 'RANK',
    DENSE_RANK() OVER(ORDER BY test_score DESC) AS 'DENSE_RANK',
    ROW_NUMBER() OVER(ORDER BY test_score DESC) AS 'ROW_NUMBER' 
FROM test_result;
=&amp;gt; 학생명 | 시험점수   | RANK | DENSE_RANK | ROW_NUMBER
   박철수 | 94       | 1    | 1          | 1
   김수현 | 91       | 2    | 2          | 2
   박지훈 | 91       | 2    | 2          | 3	
   이상진 | 84       | 4    | 3          | 4
   박정민 | 84       | 4    | 3          | 5
   오진아 | 70       | 6    | 4          | 6&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;집계함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OVER절을 사용하여 파티션 별로 집계하거나 누적 집계를 계산&lt;/li&gt;
&lt;li&gt;&lt;b&gt;COUNT&lt;/b&gt;: 값이 NULL인 행을 제외한 행의 개수를 파티션 별로 집계하거나 누적 집계를 계산하여 반환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SUM&lt;/b&gt;: 입력된 칼럼에 대해 파티션 별 합계를 구하거나 누적 합계를 계산하여 반환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AVG&lt;/b&gt;: 입력된 칼럼에 대해 파티션 별 평균을 구하거나 누적 평균을 계산하여 반환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MIN&lt;/b&gt;: 입력된 칼럼에 대해 파티션 별 최솟값을 반환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MAX&lt;/b&gt;: 입력된 칼럼에 대해 파티션 별 최댓값을 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    DISTINCT brand AS '브랜드', 
    COUNT(*) OVER(PARTITION BY brand) AS '차량수',
    SUM(price) OVER(PARTITION BY brand) AS '총 가격',
    AVG(price) OVER(PARTITION BY brand) AS '평균 가격',
    MIN(price) OVER(PARTITION BY brand) AS '최소 가격',
    MAX(price) OVER(PARTITION BY brand) AS '최대 가격'
FROM car;
=&amp;gt; 브랜드      | 차량수 | 총 가격      | 평균 가격       | 최소 가격  | 최대 가격
   KG 모빌리티  | 2    | 79690000   | 39845000.0000 | 35000000 | 44690000
   기아        | 3    | 253410000  | 84470000.0000 | 77440000 | 92000000
   제네시스     | 2    | 182140000  | 91070000.0000 | 78300000 | 103840000
   현대        | 3    | 171000000  | 57000000.0000 | 45000000 | 76000000&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;행 순서함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;FIRST_VALUE&lt;/b&gt;: 파티션 별로 그룹핑하여 가장 처음 값 반환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LAST_VALUE&lt;/b&gt;: 파티션 별로 그룹핑하여 가장 마지막 값 반환&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;LAG&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;입력된 인자의 값만큼 이전 행의 값&lt;/span&gt;을 반환&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;LEAD&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;입력된 인자의 값만큼 이후 행의 값&lt;/span&gt;을 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    DISTINCT brand AS '브랜드',
    FIRST_VALUE(price) OVER(PARTITION BY brand ORDER BY price DESC) AS 'FIRST_VALUE'
FROM car;
=&amp;gt;  브랜드      | FIRST_VALUE
    KG 모빌리티  | 44690000
    기아        | 92000000
    제네시스     | 103840000
    현대        | 76000000

SELECT 
    brand AS '브랜드',
    name AS '자동차명',
    price AS '가격',
    LAG(name, 2) OVER(ORDER BY price DESC) AS 'LAG',
    LEAD (name, 2) OVER(ORDER BY price DESC) AS 'LEAD'
FROM car;
=&amp;gt;  브랜드     | 자동차명         | 가격        | LAG      | LEAD
    제네시스    | G90           | 103840000  | NULL     | EV9
    기아       | 카니발          | 92000000   | NULL     | GV80
    기아       | EV9           | 83970000   | G90      | K9
    제네시스    | GV80          | 78300000   | 카니발     | 아이오닉N
    기아       | K9            | 77440000   | EV9      | 팰리세이드
    현대       | 아이오닉N       | 76000000   | GV80     | 싼타페
    현대       | 팰리세이드       | 50000000   | K9       | 렉스턴 스포츠 칸
    현대       | 싼타페          | 45000000   | 아이오닉N  | 코란도 투리스모
    KG 모빌리티 | 렉스턴 스포츠 칸  | 44690000   | 팰리세이드  | NULL
    KG 모빌리티 | 코란도 투리스모   | 35000000   | 싼타페     | NULL&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비율함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파티션 별로 전체 개수나 합계를 구한 후 그에 대한 비율을 구하는 함수&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CUME_DIST&lt;/b&gt;&lt;/span&gt;: 파티션 별로 전체 개수에 대한 &lt;span style=&quot;color: #ee2323;&quot;&gt;누적 백분율&lt;/span&gt;을 소수점 단위로 계산하여 반환, &lt;span style=&quot;color: #ee2323;&quot;&gt;마지막 행이 1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;PERCENT_RANK&lt;/b&gt;&lt;/span&gt;: 파티션 별로 순서별 &lt;span style=&quot;color: #ee2323;&quot;&gt;백분율&lt;/span&gt;을 반환, &lt;span style=&quot;color: #ee2323;&quot;&gt;가장 첫 행이 0, 마지막 행이 1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NTILE&lt;/b&gt;&lt;/span&gt;: 파티션을 N등분하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;1부터 N까지의 등급 값&lt;/span&gt;을 반환&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RATIO_TO_REPORT&lt;/b&gt;&lt;/span&gt;: 파티션 별 &lt;span style=&quot;color: #ee2323;&quot;&gt;합계에 대한 비율&lt;/span&gt;을 계산하여 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    brand AS '브랜드',
    name AS '자동차명',
    price AS '가격',
    CUME_DIST() OVER(ORDER BY price) AS 'CUME_DIST',
    PERCENT_RANK() OVER(ORDER BY price) AS 'PERCENT_RANK',
    NTILE(5) OVER(ORDER BY price) AS 'NTILE',
    RATIO_TO_REPORT(price) OVER(PARTITION BY brand) AS 'RATIO_TO_REPORT'
FROM car
ORDER BY price DESC;
=&amp;gt; 브랜드     | 자동차명         | 가격       | CUME_DIST | PERCENT_RANK        | NTILE | RATIO_TO_REPORT
   제네시스    | G90           | 103840000 | 1.0       | 1.0                 | 5     | 0.151
   기아       | 카니발          | 92000000  | 0.9       | 0.8888888888888888  | 5     | 0.134
   기아       | EV9           | 83970000  | 0.8       | 0.7777777777777778  | 4     | 0.122
   제네시스    | GV80          | 78300000  | 0.7       | 0.6666666666666666  | 4     | 0.114
   기아       | K9            | 77440000  | 0.6       | 0.5555555555555556  | 3     | 0.113
   현대       | 아이오닉N       | 76000000  | 0.5       | 0.4444444444444444  | 3     | 0.111
   현대       | 팰리세이드       | 50000000  | 0.4       | 0.3333333333333333  | 2     | 0.073
   현대       | 싼타페          | 45000000  | 0.3       | 0.2222222222222222  | 2     | 0.066
   KG 모빌리티 | 렉스턴 스포츠 칸  | 44690000   | 0.2       | 0.1111111111111111 | 1     | 0.065
   KG 모빌리티 | 코란도 투리스모   | 35000000   | 0.1       | 0.0                | 1     | 0.051&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Top N 쿼리&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멜론 차트 100과 같이 상위 N 순위까지 추출하는 쿼리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ROWNUM&amp;nbsp;함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 저장된 데이터를 그대로 두고 각 행에 순차적인 번호를 붙여주는 함수&lt;/li&gt;
&lt;li&gt;테이블의 첫 행부터 차례로 순회하면서 값을 반환하기 때문에 중간을 건너뛰고 값을 가져올 수 없음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;WHERE 조건이 FALSE가 되면 순회를 멈추고 결과를 반환(&amp;lt;, &amp;lt;= 비교연산자만 WHERE 조건으로 사용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ORDER BY와 함께 사용할 경우 행에 번호가 매겨지고 나서 정렬되므로 출력되는 번호가 뒤죽박죽 될 수 있어 주의해야 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    ROWNUM
    student_name AS '학생명', 
    test_score AS '시험점수'
FROM test_result WHERE ROWNUM &amp;lt;= 5
=&amp;gt;  ROWNUM | 학생명 | 시험점수
    1      | 박철수 | 94
    2      | 김수현 | 91
    3      | 박지훈 | 91
    4      | 이상진 | 84
    5      | 박정민 | 84
		
SELECT 
    ROWNUM
    student_name AS '학생명', 
    test_score AS '시험점수'
FROM test_result WHERE ROWNUM = 5 
=&amp;gt;  ROWNUM | 학생명 | 시험점수
# 대소비교가 아닌 등식비교를 할 경우 
# ROWNUM이 1일 때 조건이 FALSE가 되어 더 이상 순회되지 않아 아무런 결과가 나오지 않음&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;윈도우함수의 순위함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RANK, DENSE_RANK, ROW_NUMBER 함수를 사용해서 Top N 쿼리 작성 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM (
    SELECT 
    student_name AS '학생명', 
    test_score AS '시험점수', 
    RANK() OVER(ORDER BY test_score DESC) AS 'RANK',
    DENSE_RANK() OVER(ORDER BY test_score DESC) AS 'DENSE_RANK',
    ROW_NUMBER() OVER(ORDER BY test_score DESC) AS 'ROW_NUMBER' 
    FROM test_result
) AS TR WHERE TR.ROW_NUMBER &amp;lt;= 5;
=&amp;gt;  학생명	| 시험점수 | RANK | DENSE_RANK | ROW_NUMBER
    박철수	| 94     | 1    | 1          | 1
    김수현	| 91     | 2    | 2          | 2
    박지훈	| 91     | 2    | 2          | 3
    이상진	| 84     | 4    | 3          | 4
    박정민	| 84     | 4    | 3          | 5&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;계층형 질의와 셀프 조인&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;계층형 질의&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;계층형 데이터 모델을 다룰 때 상위(부모) 노드에서 하위(자식) 노드로 연쇄적으로 데이터에 접근해서 결과를 조회해야 할 경우 사용&lt;/li&gt;
&lt;li&gt;계층 구조를 가지는 칼럼을 대상으로 데이터를 출력할 때 키워드를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;table id=&quot;1fd565b4-65b6-8096-8a4b-c67ac19a2996&quot; style=&quot;border-collapse: collapse; width: 100%; height: 190px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1fd565b4-65b6-8054-8d2f-f95f086bcdbe&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;키워드&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-80a7-a26c-e94609144b6d&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;LEVEL&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;레벨 또는 깊이(Depth)를 반환, 루트 노드가 1이고 레벨이 내려갈때마다 1씩 증가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-8017-8f87-f0b1ef8f452b&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;SYS_CONNECT_BY_PATH&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;최상위 루트 노드로부터 현재 노드까지의 경로를 출력하는 함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-8009-aa63-fe8d8c2cded8&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;START WITH&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;경로의 시작이 되는 루트 노드의 조건 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-80b3-8e21-ecb44a8bad2d&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;CONNECT BY&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;부모 노드로부터 자식 노드로의 경결을 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-80e8-8c9d-c8810f8b99b1&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;CONNECT_BY_ROOT&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;루트 노드의 지정된 칼럼값 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-807a-a125-c05400921427&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;CONNECT_BY_ISLEAF&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;가장 말단 노드이면 1, 그 외는 0 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-8026-867f-e3d0b9acd4f6&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;PRIOR&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;바로 상위 부모 노드를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-8094-9b0f-c627b5a7f231&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NOCYCLE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사이클 발생 이후에 데이터를 전개하지 않음으로써 무한 루프 방지&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1fd565b4-65b6-8049-84fc-fb838fd53c22&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;JGLf&quot; style=&quot;height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ORDER SIBLINGS BY&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;NnkM&quot; style=&quot;height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;같은 레벨의 형제 노드끼리 정렬&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;순&lt;/span&gt;&lt;/b&gt;방향 전개&lt;span style=&quot;color: #ee2323;&quot;&gt;(&lt;b&gt;프&amp;middot;자&amp;middot;부&amp;middot;순&lt;/b&gt;)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CONNECT BY &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;P&lt;/span&gt;&lt;/b&gt;RIOR &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자&lt;/span&gt;&lt;/b&gt;식 = &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부&lt;/span&gt;&lt;/b&gt;모&lt;/li&gt;
&lt;li&gt;상위 노드로 부모를 지정하므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;부모 &amp;rarr; 자식&lt;/b&gt;으로 이어지는 전개&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;역&lt;/span&gt;&lt;/b&gt;방향 전개&lt;span style=&quot;color: #ee2323;&quot;&gt;(&lt;b&gt;프&amp;middot;부&amp;middot;자&amp;middot;역&lt;/b&gt;)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CONNECT BY &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;P&lt;/span&gt;&lt;/b&gt;RIOR &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부&lt;/span&gt;&lt;/b&gt;모 = &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자&lt;/span&gt;&lt;/b&gt;식&lt;/li&gt;
&lt;li&gt;상위 노드로 자식을 지정하므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;자식 &amp;rarr; 부모&lt;/b&gt;로 이어지는 전개&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM (
    SELECT 
        LEVEL AS 'LVL', 
        parent_category_id AS '부모 카테고리ID',
        category_id AS '카테고리ID',
        category_name AS '카테고리명'
    FROM category
    START WITH parent_category_id IS NULL
    CONNECT BY PRIOR category_id = parent_category_id
) AS TR ORDER BY TR.LVL;
=&amp;gt;  LVL | 부모 카테고리ID | 카테고리ID | 카테고리명
    1   | NULL         | 1        | 한식
    1   | NULL         | 2        | 중식
    1   | NULL         | 3        | 일식
    1   | NULL         | 4        | 분식
    2   | 1            | 5        | 김치찌게
    2   | 1            | 6        | 된장찌게
    2   | 1            | 7        | 불고기
    2   | 2            | 8        | 짜장면
    2   | 2            | 9        | 짬뽕
    2   | 2            | 10       | 탕수육
    2   | 3            | 11       | 초밥
    2   | 3            | 12       | 라멘
    2   | 3            | 13       | 소바
    2   | 4            | 14       | 떡볶이
    2   | 4            | 15       | 김밥
    2   | 4            | 16       | 라면&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;셀프 조인&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;같은 테이블에 대해서 조인을 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;계층에 깊이가 깊어질수록 쿼리가 반복되고 길어짐 &amp;rarr; 계층형 질의를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 
    B.parent_category_id AS '부모 카테고리ID',
    A.category_name AS '부모 카테고리명',
    B.category_id AS '카테고리ID',
    B.category_name AS '카테고리명'
FROM category A, category B
WHERE A.category_id = B.parent_category_id
=&amp;gt;  부모 카테고리ID | 부모 카테고리명 | 카테고리ID | 카테고리명
    1            | 한식         | 5        | 김치찌게
    1            | 한식         | 6        | 된장찌게
    1            | 한식         | 7        | 불고기
    2            | 중식         | 8        | 짜장면
    2            | 중식         | 9        | 짬뽕
    2            | 중식         | 10       | 탕수육
    3            | 일식         | 11       | 초밥
    3            | 일식         | 12       | 라멘
    3            | 일식         | 13       | 소바
    4            | 분식         | 14       | 떡볶이
    4            | 분식         | 15       | 김밥
    4            | 분식         | 16       | 라면&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;PIVOT절과 UNIPIVOT절&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;피벗(PIVOT)이란 테이블의 행(Row)과 열(Column)을 전환하여 테이블을 재구성하는 것&lt;/li&gt;
&lt;li&gt;행과 열을 바꾸는 관점에 따라 피벗(PIVOT), 언피벗(UNIPIVOT)을 구분&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;함수가 아닌&lt;span&gt;&amp;nbsp;&lt;/span&gt;FROM절 뒤에 기술하는 구문, SELECT절보다 먼저 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;PIVOT절&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;행 &amp;rarr; 열 전환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;지정된 칼럼의 각 행 속성값들이 새로운 칼럼 헤더가 되고 이에 맞게 전체 속성값들을 재배치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM FOOD;
=&amp;gt;  FOOD_ID | NAME    | CATEGORY
    1       | 김치찌게  | 한식
    2       | 된장찌게  | 한식
    3       | 불고기    | 한식
    4       | 초밥     | 일식
    5       | 라멘     | 일식
    6       | 짜장면    | 중식
    7       | 탕수육    | 중식
    8       | 양장피    | 중식
		
		
SELECT * FROM (
    SELECT CATEGORY FROM FOOD
) PIVOT (
    COUNT(*) FOR CATEGORY IN ('한식' AS 한식, '일식' AS 일식, '중식' AS 중식)
);
=&amp;gt;  한식 | 중식 | 일식
    3   | 2   | 3&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UNPIVOT절&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;열 &amp;rarr; 행 전환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;칼럼 헤더들이 한 칼럼의 각 행 속성값이 되고, 이에 맞게 전체 속성값들을 재배치&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT * FROM PRODUCT_SALES;
=&amp;gt;  PRODUCT_NAME | Y2021_SALES_COUNT | Y2022_SALES_COUNT | Y2023_SALES_COUNT | Y2024_SALES_COUNT | Y2025_SALES_COUNT	
    상품1         | 101               | 102               | 103	            | 104	            | 105
    상품2         | 201               | 202               | 203	            | 204	            | 205
    상품3         | 301               | 302               | 303	            | 304	            | 305
		
        
SELECT PRODUCT_NAME AS 상품명, 연도, 판매량 FROM (
    SELECT * FROM PRODUCT_SALES
) UNPIVOT (
    판매량 FOR 연도 IN (
        Y2021_SALES_COUNT AS '2021년', 
        Y2022_SALES_COUNT AS '2022년',
        Y2023_SALES_COUNT AS '2023년',
        Y2024_SALES_COUNT AS '2024년',
        Y2025_SALES_COUNT AS '2025년'
    )
)
ORDER BY 상품명, 연도 ASC;
=&amp;gt;  상품명 | 연도   | 판매량
    상품1 | 2021년 | 101
    상품1 | 2022년 | 102
    상품1 | 2023년 | 103
    상품1 | 2024년 | 104
    상품1 | 2025년 | 105
    상품2 | 2021년 | 201
    상품2 | 2022년 | 202
    상품2 | 2023년 | 203
    상품2 | 2024년 | 204
    상품2 | 2025년 | 205
    상품3 | 2021년 | 301
    상품3 | 2022년 | 302
    상품3 | 2023년 | 303
    상품3 | 2024년 | 304
    상품3 | 2025년 | 305&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정규표현식&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패턴에 기반하여 검색, 치환, 추출 등 문자열 처리 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;매타 문자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자 그 자신이 가진 의미가 아니라 다른 의미로 사용되는 문자&lt;/li&gt;
&lt;li&gt;예) 표현식 &amp;lsquo;^&amp;rsquo; 문자는 &amp;lsquo;^&amp;rsquo; 문자를 나타내는 것이 아니라 입력 문자열의 시작을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 266px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;메타 문자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;&lt;b&gt;예&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 38px;&quot;&gt;&lt;b&gt;₩&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 38px;&quot;&gt;메타 문자를 리터럴 문자로 표시하거나 리터럴 문자와 결합하여 정해진 메타 문자를 표시&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 38px;&quot;&gt;₩₩: ₩(리터럴 문자), ₩n: 줄바꿈(개행)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;^&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;개행으로 나뉜 문자열의 시작 지점&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;^the: the로 시작하는 문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;$&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;개행으로 나뉜 물자열의 끝 지점&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;ing$: ing로 끝나는 문자열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;임의의 한 문자(개행 문자는 제외)&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;a.c: abc, a-c, adc &amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;?&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;선행 문자 0 또는 1개 존재&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;ok?: o, ok&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;*&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;선행 문자 0개 이상 존재&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;ok?: o, ok, okk, okkk &amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;+&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;선행 문자 1개 이상 존재&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;ok?: ok, okk, okkk &amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span data-token-index=&quot;0&quot;&gt;|&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;선택적&amp;nbsp;일치&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;a|b: a, b&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;[ ]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;대괄호 안의 문자들 중 하나와 일치&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;[abc]: a, b, c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;[-]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;연속 문자의 범위를 지정&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;[a-z]: a ~ z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;[^]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;대괄호 안의 문자들을 제외한 나머지 문자들 중 하나와 일치&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;[^abc]: d, e, f &amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;( )&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 53.7208%; height: 19px;&quot;&gt;소괄호로 묶은 표현식을 한 단위로 취급&lt;/td&gt;
&lt;td style=&quot;width: 32.6746%; height: 19px;&quot;&gt;(abc): abc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리터럴 문자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자 그 자체가 가진 의미 그대로 사용되는 문자&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Oracle과 SQL Server의 정규식 지원 차이&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Oracle&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Oracle 10g부터 정규표현식 함수 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;정규표현식 함수&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;REGEXP_LIKE&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정규표현식을 사용한 LIKE 연산&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;REGEXP_REPLACE&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정규표현식을 사용한 문자열 대체&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;REGEXP_INSTR&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정규표현식을 사용한 문자열 검색 후 위치 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;REGEXP_SUBSTR&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정규표현식을 사용한 부분 문자열 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;REGEXP_COUNT&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;정규표현식을 사용한 특정 패턴의 문자열 개수 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;SQL Server&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;PATINDEX 함수&lt;/b&gt;: 찾고자 하는 문자열을 검색 후 위치를 반환, 정규식은 아니지만 유사한 패턴 문자열 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LIKE 연산자&lt;/b&gt;: PATINDEX의 패턴 문자열 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.8837%;&quot;&gt;&lt;b&gt;메타 문자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.4186%;&quot;&gt;&lt;b&gt;의미&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.6977%;&quot;&gt;&lt;b&gt;예&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.8837%;&quot;&gt;&lt;b&gt;%&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.4186%;&quot;&gt;0개 이상의 문자&lt;/td&gt;
&lt;td style=&quot;width: 35.6977%;&quot;&gt;%a%: a가 포함되어 있는 문자열 모두&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.8837%;&quot;&gt;&lt;b&gt;_&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.4186%;&quot;&gt;임의의 한 문자&lt;/td&gt;
&lt;td style=&quot;width: 35.6977%;&quot;&gt;a_c: abc, a-c, adc &amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.8837%;&quot;&gt;&lt;b&gt;[ ]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.4186%;&quot;&gt;대괄호 안의 문자들 중 하나와 일치&lt;/td&gt;
&lt;td style=&quot;width: 35.6977%;&quot;&gt;[abc]: a, b, c&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.8837%;&quot;&gt;&lt;b&gt;[-]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.4186%;&quot;&gt;연속 문자의 범위를 지정&lt;/td&gt;
&lt;td style=&quot;width: 35.6977%;&quot;&gt;[a-z]: a ~ z&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14.8837%;&quot;&gt;&lt;b&gt;[^]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.4186%;&quot;&gt;대괄호 안의 문자들을 제외한 나머지 문자들 중 하나와 일치&lt;/td&gt;
&lt;td style=&quot;width: 35.6977%;&quot;&gt;[^abc]: d, e, f &amp;hellip;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>자격증</category>
      <category>cube</category>
      <category>intersect</category>
      <category>pivot</category>
      <category>rollup</category>
      <category>rownum</category>
      <category>SQLD</category>
      <category>union</category>
      <category>서브쿼리</category>
      <category>순위</category>
      <category>정규표현식</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/470</guid>
      <comments>https://devbksheen.tistory.com/entry/SQLD-4-SQL-%ED%99%9C%EC%9A%A9#entry470comment</comments>
      <pubDate>Fri, 30 May 2025 05:44:01 +0900</pubDate>
    </item>
    <item>
      <title>SQLD - 3. SQL 기본 및 활용</title>
      <link>https://devbksheen.tistory.com/entry/SQLD-3-SQL-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;관계형 데이터베이스 개요&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 베이스&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 일정한 체계에 따라 통합하여 디스크나 메모리에 저장한 것으로 응용 프로그램에 종속적이지 않도록 일종의 미들웨어 현태로 만든 것&lt;/li&gt;
&lt;li&gt;자료의 독립성, 중복 저장의 최소화, 통합 처리, 자체적 관리 기능에 이점&lt;/li&gt;
&lt;li&gt;데이터베이스를 구축하고 관리할 수 있는 기능을 제공하는 시스템 소프트웨어를 데이터베이스 관리 시스템(DBMS, Database Management System)이라고 부름&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관계형 데이터베이스(RDB, Relation Database)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터의 일관성 문제를 해결하기 위해 E.F Codd 박사에 의해 만들어진 데이터베이스&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ACID(Atomic - 원자성, Consistency - 일관성, Isolation - 고립성, Durability - 영속성, 지속성) 특성&lt;/span&gt;을 가짐&lt;/li&gt;
&lt;li&gt;테이블(Table) 형태로 데이터 모델을 다룸&lt;/li&gt;
&lt;li&gt;SQL(Structure Query Language)이라는 공통 질의언어를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;테이블(TABLE)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2차원 구조의 행(Row)과 열(Column)로 표현된 형태&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;행(Row)&lt;/span&gt;은 해당 테이블의 &lt;span style=&quot;color: #ee2323;&quot;&gt;스키마를 가지는 하나의 인스턴스&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;레코드(Record)&lt;/span&gt; 또는 &lt;span style=&quot;color: #ee2323;&quot;&gt;튜플(Tuple)&lt;/span&gt;이라고도 함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;열(Column)&lt;/span&gt;은 &lt;span style=&quot;color: #ee2323;&quot;&gt;필드(Field)&lt;/span&gt;라고도 하며 &lt;span style=&quot;color: #ee2323;&quot;&gt;속성(Attribute)&lt;/span&gt;에 해당&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SQL(Structure Query Language)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;구조화된 질의언어로 데이터베이스의 구조를 정의하고 데이터를 조작, 제어할 수 있는 절차적 + 비절차적 언어&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;How(어떻게)의 관점보다 What(무엇을)의 관점에서&lt;/span&gt; 절차를 명기하지 않고 원하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;결과만을 서술하는 언어로서 비절차적 언어&lt;/span&gt;라고 할 수 있지만 &lt;span style=&quot;color: #ee2323;&quot;&gt;프로시저, 함수, 트리거 등 절차적 언어의 특징도 포함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DDL(데이터 정의 언어, Data Definition Language)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터의 구조(스키마)를 정의하는 명령어&lt;/li&gt;
&lt;li&gt;CREATE, ALTER, DROP, RENAME, TRUNCATE 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DML(데이터 조작 언어, Data Manipulation Language)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;테이블에 데이터를 조회, 입력, 수정, 삭제하는 명령어&lt;/li&gt;
&lt;li&gt;SELECT, INSERT, UPDATE, DELETE, MERGE 등&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DROP, TRUNCATE는 디스크 저장공간을 릴리즈하여 재사용 가능하며 로그를 남기지 않음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DELETE는 저장공간을 릴리즈 하지 않아 롤백이 가능하며 로그를 남김&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DCL(데이터 제어 언어, Data Control Language)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자 접근 권한과 같이 보안과 제어를 다루는 명령어&lt;/li&gt;
&lt;li&gt;GRANT, REVOKE 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TCL(트랜잭션 제어 언어, Transaction Control Language)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랜잭션에 대해 제어를 다루는 명령어(DCL의 일부로 보기도 함)&lt;/li&gt;
&lt;li&gt;COMMIT, ROLLBACK, SAVEPOINT 등&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;SELECT문&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SELECT&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 조회하는 명령어&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;FROM &amp;rarr; WHERE &amp;rarr; GROUP BY &amp;rarr; HAVING &amp;rarr; SELECT &amp;rarr; ORDER BY 순서로 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748541438907&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 조회할 칼럼 FROM 테이블 WHERE 조건 GROUP BY 칼럼 HAVING 조건 ORDER BY 칼럼;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;산술연산자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;더하기, 곱하기 등 산술연산을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;table id=&quot;1f9565b4-65b6-80d2-bbb3-ff09ec2d40a0&quot; style=&quot;border-collapse: collapse; width: 100%; height: 133px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-802a-b0e4-c8ef62713978&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;연산 우선순위&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8069-8066-f675c8f09128&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;()&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;먼저 계산할 식을 묶음&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8099-9a10-d54f4b4922d4&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;*&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;곱셈을 수행&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8024-9cb9-d5e00f3daf5f&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;/&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;나눗셈을 수행&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-806d-9652-fad0a8ffed11&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;%&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;moc 연산(나머지 연산)을 수행&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-801d-8025-cc072e3ccf67&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;+&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;덧셈을 수행&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80bd-96ca-ee82505a982b&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;RCkp&quot; style=&quot;height: 19px;&quot;&gt;&lt;b&gt;-&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;^aKq&quot; style=&quot;height: 19px;&quot;&gt;뺄셈을 수행&lt;/td&gt;
&lt;td id=&quot;=[iI&quot; style=&quot;height: 19px;&quot;&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Null의 산술연산 결과는 Null&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0으로 나누셈을 수행할 경우 오류 발생&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;합성연산자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문자열을 연결하는 연산자(&amp;ldquo;||&amp;rdquo;)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748543405494&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT 'GOOD' || ' ' || 'MORNING' AS HELLO FROM DUAL;
=&amp;gt; | HELLO        |
   | GOOD MORNING |&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;함수&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력된 값에 대해서 어떤 연산을 수행한 후 결과를 반환하는 일련의 코드 덩어리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내장함수(Built-in Function)&lt;/b&gt;: DBMS별로 이미 만들어져 제공되는 함수&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;단일행 함수(Single-Row Function)&lt;/b&gt;: 하나의 행에 대해서 연산을 수행한 후 결과를 반환하는 함수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중행 함수((Multi-Row Function)&lt;/b&gt;: 여러 행에 대해서 연산을 수행한 후 결과를 반환하는 함수&lt;/li&gt;
&lt;li&gt;두 함수 모두 여러 입력 인자에 대해 단일값을 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사용자 정의 함수(User Defined Function)&lt;/b&gt;: 사용자가 직접 SQL문을 작성하여 정의한 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문자 함수&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 227px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 19px;&quot;&gt;&lt;b&gt;함수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 19px;&quot;&gt;&lt;b&gt;LOWER(arg)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;문자열 arg를 모두 소문자로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;b&gt;UPPER(arg)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;문자열 arg를 모두 대문자로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;b&gt;CHR(arg)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;ASCII 코드값 arg에 대응하는 문자를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 35px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TRIM(arg1 arg2 FROM arg3)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 35px;&quot;&gt;문자열 arg3 양 끝에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;문자열 arg2 또는 공백을 제거&lt;/span&gt;하고 반환(arg2 생략 시 공백 제거)&lt;br /&gt;&lt;span&gt;※&amp;nbsp;arg1: &lt;span style=&quot;color: #ee2323;&quot;&gt;LEADING(앞에서)&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;TRAILING(뒤에서)&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;BOTH(양쪽에서)&lt;/span&gt;, 기본값은 BOTH&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;LTRIM(arg1, arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;문자열 arg1 &lt;span style=&quot;color: #ee2323;&quot;&gt;왼쪽 끝에서 문자열 arg2 또는 공백을 제거&lt;/span&gt;하여 반환(arg2 생략 시 공백 제거)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RTRIM(arg1, arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;문자열 arg1 &lt;span style=&quot;color: #ee2323;&quot;&gt;오른쪽 끝에서 문자열 arg2 또는 공백을 제거&lt;/span&gt;하여 반환(arg2 생략 시 공백 제거)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 35px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 35px;&quot;&gt;&lt;b&gt;SUBSTR(arg1, arg2, arg3)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 35px;&quot;&gt;문자열 arg1을 &lt;span style=&quot;color: #ee2323;&quot;&gt;arg2자리 부터 arg3자리를 추출&lt;/span&gt;하여 반환(arg3 생략 arg2자리부터 문자열 끝까지 추출)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;b&gt;LENGTH(arg)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;문자열 arg의 길이를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;b&gt;REPLACE(arg1, arg2, arg3)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;문자열 arg1의 &lt;span style=&quot;color: #ee2323;&quot;&gt;문자열 arg2를 문자열 arg3으로 대체&lt;/span&gt;하여 반환(arg3 생략 시 arg2 문자열 삭제)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;숫자 함수&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 152px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;b&gt;함수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;b&gt;ABS(arg)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자의&amp;nbsp;절댓갑을&amp;nbsp;반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;b&gt;MOD(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자&amp;nbsp;arg1을&amp;nbsp;arg2로&amp;nbsp;나눈&amp;nbsp;나머지&amp;nbsp;반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ROUND(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자&amp;nbsp;arg1을&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;소수점&amp;nbsp;아래&amp;nbsp;arg2자리까지&amp;nbsp;반올림&lt;/span&gt;하여&amp;nbsp;반환(arg2&amp;nbsp;생략&amp;nbsp;시&amp;nbsp;소수점&amp;nbsp;모두&amp;nbsp;반올림)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TRUNC(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자&amp;nbsp;arg1을 &lt;span style=&quot;color: #ee2323;&quot;&gt;소수점 아래 arg2자리까지 버림&lt;/span&gt;한 후 결과 반환(arg2 생략 시 소수점 모두 버림)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;SIGN(arg)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자&amp;nbsp;arg가&amp;nbsp;양&lt;span style=&quot;color: #ee2323;&quot;&gt;수이면&amp;nbsp;1,&amp;nbsp;음수이면&amp;nbsp;-1,&amp;nbsp;0이면&amp;nbsp;0&lt;/span&gt;을&amp;nbsp;반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CEIL(arg)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자&amp;nbsp;arg보다&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;크거나&amp;nbsp;같은&amp;nbsp;최소의&amp;nbsp;정수&lt;/span&gt;를&amp;nbsp;반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4495%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;FLOOR(arg)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.2171%; height: 19px;&quot;&gt;숫자&amp;nbsp;arg보다&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;작거나&amp;nbsp;같은&amp;nbsp;최대의&amp;nbsp;정수&lt;/span&gt;를&amp;nbsp;반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;날짜 함수&lt;/h3&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 19px;&quot;&gt;&lt;b&gt;함수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 19px;&quot;&gt;&lt;b&gt;SYSDATE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;오늘의 날짜를 날짜형으로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4496%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;EXTRACT(arg1 FROM arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 17px;&quot;&gt;날짜 arg2로부터 &lt;span style=&quot;color: #ee2323;&quot;&gt;년, 월, 일을 추출&lt;/span&gt;해서 반환&lt;br /&gt;&lt;span&gt;&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;※ &lt;/span&gt;arg1: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변환 함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;SQL 작성자가 함수를 명시하여 수행하는 명시적 형변환, 시스템 내부적으로 임의로 수행하는 암시적 형변환 존재&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;암시적 형변환은 결과를 명확하게 예측할 수 없고, 성능 저하나 에러가 발생할 가능성이 있어 주의&lt;/span&gt;해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 70px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 19px;&quot;&gt;&lt;b&gt;함수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 17px;&quot;&gt;&lt;b&gt;TO_NUMBER(arg)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 17px;&quot;&gt;문자열&amp;nbsp;arg를&amp;nbsp;숫자형으로&amp;nbsp;변환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TO_CHAR(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;숫자형,&amp;nbsp;날짜열&amp;nbsp;arg1&lt;/b&gt;을&amp;nbsp;문자열형으로&amp;nbsp;변환&lt;/span&gt;(arg2는&amp;nbsp;날짜&amp;nbsp;포맷&amp;nbsp;패턴)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TO_DATE(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;문자열&amp;nbsp;arg1&lt;/b&gt;을&amp;nbsp;arg2&amp;nbsp;포맷의&amp;nbsp;날짜형으로&amp;nbsp;변환&lt;/span&gt;(arg2는&amp;nbsp;날짜&amp;nbsp;포맷&amp;nbsp;패턴)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NULL 관련 함수&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 70px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 19px;&quot;&gt;&lt;b&gt;함수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NVL(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 17px;&quot;&gt;arg1이&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;Null이&amp;nbsp;아니면&amp;nbsp;그대로&amp;nbsp;반환,&amp;nbsp;Null이면&amp;nbsp;arg2를&amp;nbsp;반환&lt;/span&gt;(arg1과&amp;nbsp;arg2는&amp;nbsp;같은&amp;nbsp;타입)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NULLIF(arg1,&amp;nbsp;arg2)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;arg1과&amp;nbsp;arg2가&amp;nbsp;같으면&amp;nbsp;Null&amp;nbsp;반환,&amp;nbsp;다르면&amp;nbsp;arg1&amp;nbsp;반환&lt;/span&gt;(arg1과&amp;nbsp;arg2는&amp;nbsp;같은&amp;nbsp;타입)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.6744%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;COALESCE(arg1,&amp;nbsp;arg2,&amp;nbsp;&amp;hellip;)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 72.3256%; height: 17px;&quot;&gt;입력된&amp;nbsp;인자들을&amp;nbsp;순서대로&amp;nbsp;평가하여&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;Null이&amp;nbsp;아닌&amp;nbsp;첫&amp;nbsp;번째&amp;nbsp;인자&lt;/span&gt;를&amp;nbsp;반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CASE&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;칼럼이 특정 값을 가지면 이를 대체하는 새 값을 반환하는 연산을 정의&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;CASE
    WHEN 컬럼 = 특정 값 THEN 새 값
    WHEN 컬럼 = 특정 값 THEN 새 값
    ...
END
또는
CASE
    컬럼 WHEN 특정 값 THEN 새 값
    컬럼 WHEN 특정 값 THEN 새 값
    ...
END&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;WHERE절&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 조건의 행(Row)만을 대상으로 연산을 수행하기 위해 조건을 설정하는 구문&lt;/li&gt;
&lt;li&gt;SELECT, UPDATE, DELETE문에 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;NULL과의 비교는 IS NULL, IS NOT NULL만 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;FROM절에서 정의한 별명(Alias)은 사용 가능, SELECT절에서 정의한 별명은 사용 불가&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;우선순위:&lt;/b&gt;&lt;/span&gt; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;산&lt;/span&gt;&lt;/b&gt;술 연산자 &amp;rarr; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;연&lt;/span&gt;&lt;/b&gt;결 연산자 &amp;rarr; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;비&lt;/span&gt;&lt;/b&gt;교 연산자 &amp;rarr;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;NOT&lt;/span&gt;&lt;/b&gt; 연산자 &amp;rarr; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;AND&lt;/span&gt;&lt;/b&gt; 연산자 &amp;rarr; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;OR&lt;/span&gt;&lt;/b&gt; 연산자&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비교연산자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 값의 값이나 크기를 비교하여 참(true), 거짓(false)을 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단일행 비교연산자&lt;/h4&gt;
&lt;table id=&quot;1f9565b4-65b6-80f9-8a20-f67dacece83f&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-80ef-a227-cf20c713b8cf&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-808d-a638-e933b9a1b309&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;A = B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;A와 B의 값이 같으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8099-b92d-d49361471216&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;A &amp;lt; B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;A가 B보다 작으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80a1-9d05-d5f19cf2ddeb&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;A &amp;lt;= B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;A가 B보가 작거나 같으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8092-ac27-e93ae5e6c10f&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;A &amp;gt; B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;A가 B보다 크면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80e9-bede-d187c0750398&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;A &amp;gt;= B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;A가 B보가 크거나 같으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8089-968a-c2a099577207&quot;&gt;
&lt;td id=&quot;_mdP&quot; style=&quot;width: 30.814%;&quot;&gt;&lt;b&gt;A IS NULL&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Cirk&quot; style=&quot;width: 69.0698%;&quot;&gt;A가 Null이면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다중행 연산자&lt;/h4&gt;
&lt;table id=&quot;1f9565b4-65b6-80af-8dfa-ed24d7895814&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-800c-8295-d7f19c482433&quot;&gt;
&lt;td id=&quot;I^yE&quot; style=&quot;width: 30.3488%;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;s}UF&quot; style=&quot;width: 69.5349%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-801d-b837-ee3fe2bc617c&quot;&gt;
&lt;td id=&quot;I^yE&quot; style=&quot;width: 30.3488%;&quot;&gt;&lt;b&gt;A IN (arg1, arg2 &amp;hellip;)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;s}UF&quot; style=&quot;width: 69.5349%;&quot;&gt;입력된 인자들 중 A와 같은 값이 하나라도 있으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80e3-bcfc-f13e2b039a84&quot;&gt;
&lt;td id=&quot;I^yE&quot; style=&quot;width: 30.3488%;&quot;&gt;&lt;b&gt;EXISTS (SUB QUERY)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;s}UF&quot; style=&quot;width: 69.5349%;&quot;&gt;서브 쿼리 결과가 한 건이라도 있으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-805d-8f90-f4b719524192&quot;&gt;
&lt;td id=&quot;I^yE&quot; style=&quot;width: 30.3488%;&quot;&gt;&lt;b&gt;A 비교연산자 ALL(arg1, arg2 &amp;hellip;)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;s}UF&quot; style=&quot;width: 69.5349%;&quot;&gt;입력된 인자들과 A를 비교하여 모두 참이면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80ee-9779-f025d16f628c&quot;&gt;
&lt;td id=&quot;I^yE&quot; style=&quot;width: 30.3488%;&quot;&gt;&lt;b&gt;A 비교연산자 ANY(arg1, arg2 &amp;hellip;)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;s}UF&quot; style=&quot;width: 69.5349%;&quot;&gt;입력된 인자들과 A를 비교하여 하나라도 참이면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;부정 비교연산자&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단일행 부정 비교연산자&lt;/h4&gt;
&lt;table id=&quot;1f9565b4-65b6-80d7-a636-fb2d66a5fdb6&quot; style=&quot;border-collapse: collapse; width: 100%; height: 57px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-8023-8ce9-c46a5298bce5&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;}&amp;lt;mW&quot; style=&quot;height: 19px; width: 30.814%;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Ku&amp;lt;x&quot; style=&quot;height: 19px; width: 69.0697%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80d5-a639-dce6fe62d2e0&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;}&amp;lt;mW&quot; style=&quot;height: 19px; width: 30.814%;&quot;&gt;&lt;b&gt;A !=, ^=, &amp;lt;&amp;gt; B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Ku&amp;lt;x&quot; style=&quot;height: 19px; width: 69.0697%;&quot;&gt;A와 B가 서로 다르면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8074-b71f-df9f0c4a67e1&quot; style=&quot;height: 19px;&quot;&gt;
&lt;td id=&quot;}&amp;lt;mW&quot; style=&quot;height: 19px; width: 30.814%;&quot;&gt;&lt;b&gt;A IS NOT NULL&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Ku&amp;lt;x&quot; style=&quot;height: 19px; width: 69.0697%;&quot;&gt;A가 Null이 아니면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다중행 부정 비교연산자&lt;/h4&gt;
&lt;table id=&quot;1f9565b4-65b6-808c-a05b-f7718148fa48&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-80f8-81b7-e9d97f14e63d&quot;&gt;
&lt;td id=&quot;}&amp;lt;mW&quot; style=&quot;width: 31.1628%;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Ku&amp;lt;x&quot; style=&quot;width: 68.7209%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-808c-afca-e1cadc5db252&quot;&gt;
&lt;td id=&quot;}&amp;lt;mW&quot; style=&quot;width: 31.1628%;&quot;&gt;&lt;b&gt;A NOT IN (arg1, arg2 &amp;hellip;)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Ku&amp;lt;x&quot; style=&quot;width: 68.7209%;&quot;&gt;입력된 인자들 중 A와 같은 값이 하나도 없으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8081-927a-e4291e694914&quot;&gt;
&lt;td id=&quot;}&amp;lt;mW&quot; style=&quot;width: 31.1628%;&quot;&gt;&lt;b&gt;NOT EXISTS (SUB QUERY)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;Ku&amp;lt;x&quot; style=&quot;width: 68.7209%;&quot;&gt;서브 쿼리 결과가 한 건도 없으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SQL 연산자&lt;/h3&gt;
&lt;table id=&quot;1f9565b4-65b6-80d5-b877-fd1ba96fe7ce&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-8014-9ea8-cd8f9be444db&quot;&gt;
&lt;td id=&quot;Dos^&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;tlJF&quot; style=&quot;width: 68.8372%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8042-a85d-d6b2835d5039&quot;&gt;
&lt;td id=&quot;Dos^&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;BETWEEN A AND B&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;tlJF&quot; style=&quot;width: 68.8372%;&quot;&gt;A보다 크거나 같고 B보다 작거나 같으면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8004-8b82-c64855f2ba1d&quot;&gt;
&lt;td id=&quot;Dos^&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;A LIKE arg&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;tlJF&quot; style=&quot;width: 68.8372%;&quot;&gt;문자열 A에서 인자값을 검색&lt;br /&gt;예) LIKE &amp;lsquo;%m%&amp;rsquo; &amp;rarr; &amp;lsquo;m&amp;rsquo;이 있는 문자열 / LIKE &amp;lsquo;_m&amp;rsquo; &amp;rarr; &amp;lsquo;m&amp;rsquo;으로 끝나는 2자리의 문자열&lt;br /&gt;(%은 0개 이상의 문자, _는 임의의 문자 1개를 의미)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;논리연산자&lt;/h3&gt;
&lt;table id=&quot;1f9565b4-65b6-80b7-8036-d2fc5cf10b52&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-8034-8e3b-e2a9f3d78ad7&quot;&gt;
&lt;td id=&quot;lj{N&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot; style=&quot;width: 68.8372%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8016-ab87-d705a45bf650&quot;&gt;
&lt;td id=&quot;lj{N&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;AND&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot; style=&quot;width: 68.8372%;&quot;&gt;AND로 연결된 모든 조건이 참이면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80cc-ba83-ee726cf94a91&quot;&gt;
&lt;td id=&quot;lj{N&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;OR&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot; style=&quot;width: 68.8372%;&quot;&gt;OR로 연결된 조건중 하나라도 참이면 참(true)을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-802a-8577-f8068e499648&quot;&gt;
&lt;td id=&quot;lj{N&quot; style=&quot;width: 31.0465%;&quot;&gt;&lt;b&gt;NOT&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot; style=&quot;width: 68.8372%;&quot;&gt;뒤에 오는 식의 결과(참, 거짓)의 반대를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;GROUP BY, HAVING절&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;GROUP BY&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 그룹화하는 구문&lt;/li&gt;
&lt;li&gt;필터링을 수행하고자 한다면 부하가 높은 연산이므로 조회 성능이 나빠질 수 있으므로 가급적 WHERE절을 사용해서 먼저 필터링을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;집계함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;GROUP BY절을 통해 데이터를 그룹화한 후 개수, 합, 평균 등의 통계값을 계산하는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;table id=&quot;1f9565b4-65b6-8056-bf49-de3a273d0986&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f9565b4-65b6-8003-b6bb-cab69aa21443&quot;&gt;
&lt;td id=&quot;lj{N&quot;&gt;&lt;b&gt;연산자&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80f9-91c9-e44e8f15f601&quot;&gt;
&lt;td id=&quot;lj{N&quot;&gt;&lt;b&gt;COUNT(칼럼)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot;&gt;칼럼에서 값이 Null인 행(Row)을 제외한 행의 개수를 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-80cf-9433-cdf5fd84f7f4&quot;&gt;
&lt;td id=&quot;lj{N&quot;&gt;&lt;b&gt;SUM(칼럼)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot;&gt;칼럼의 합을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-808e-a899-d300ca314bf1&quot;&gt;
&lt;td id=&quot;lj{N&quot;&gt;&lt;b&gt;AVG(칼럼)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot;&gt;칼럼의 평균을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-8039-986a-e360f115c1d7&quot;&gt;
&lt;td id=&quot;lj{N&quot;&gt;&lt;b&gt;NIM(칼럼)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot;&gt;칼럼의 최솟값을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f9565b4-65b6-802e-892a-dff2c86121bd&quot;&gt;
&lt;td id=&quot;lj{N&quot;&gt;&lt;b&gt;MAX(칼럼)&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;=Ee&amp;#96;&quot;&gt;칼럼의 최대값을 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HAVING&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필터링할 조건을 명시하는 구문&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;WHERE절에서는 집계함수가 사용이 불가능&lt;/span&gt;하지만 HAVING절에서는 사용 가능&lt;/li&gt;
&lt;li&gt;GROUP BY와 HAVING은 &lt;span style=&quot;color: #ee2323;&quot;&gt;SELECT절 보다 먼저 실행되므로 SELECT절에서 지정한 별명(Alias) 사용 불가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;일반적으로 GROUP BY절과 함께 사용되지만 GROUP BY 없이도 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;ORDER BY절&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ORDER BY&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;정렬 조건을 명시하는 구문, 생략 시 임의의 순서로 출력&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;SELECT 절보다 나중에 수행되므로 칼럼에 대한 별명(Alias)이나 순서를 나타내는 정수 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;GROUP BY절보다 나중에 수행되므로 집계함수 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;칼럼의 값이 Null인 경우 DBMS마다 정렬 방식이 다름(Oracle은 최댓값, SQL Server는 최솟값으로 처리)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;조인(Join)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;조인의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규화를 통해 &lt;span style=&quot;color: #ee2323;&quot;&gt;분리된 테이블을 PK 또는 FK 연관성에 의해 병합&lt;/span&gt;하는 것&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;건수에 제곱의 시간복잡도&lt;/span&gt;를 가지므로 많은 CPU 연산이 필요&lt;/li&gt;
&lt;li&gt;조회 성능을 높이기 위해 조인을 줄이고 반정규화를 진행하는 것이 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;EQUI JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;등식(=, 칼럼값이 정확하게 일치)을 조건으로 사용할 때 발생하는 조인&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Non EQUI JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;등부등식(BETWEEN, &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=)을 사용해서 범위를 나타낸 조건을 사용할 때 발생하는 조인&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;설계상의 이유로 실행이 불가능할 때도 있으므로 주의&lt;/span&gt;해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3개 이상 TABLE JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;N개의 테이블 조인에서는 N-1번의 조인이 발생&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;연산량이 기하급수적으로 증가하므로 반정규화를 진행하는 것이 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;OUTER JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조인 조건에 맞지 않는 행까지 포괄적으로 병합하는 조인&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;표준 조인&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DBMS에 따라 SQL 문법이 약간씩 다르기 때문에 ANSI SQL이라는 표준 문법을 제작&lt;/li&gt;
&lt;li&gt;ANSI SQL의 문법에 따른 조인 쿼리&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748542552123&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ~ FROM 테이블 조인 테이블 ON 조건식&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;INNER JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;교집합의 개념&lt;/span&gt;으로 기준이 되는 키에 따른 칼럼값이 &lt;span style=&quot;color: #ee2323;&quot;&gt;존재하는 것만 병합&lt;/span&gt;하여 결과 반환&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748542519700&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ~ FROM TABLE1 T1 INNER JOIN TABLE2 T2 ON T1.NAME = T2.NAME&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;OUTER JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;합집합의 개념&lt;/span&gt;으로 기준이 되는 키에 따른 칼럼값이 존재하지 않더라도 &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 튜플을 병합&lt;/span&gt;하여 결과 반환&lt;/li&gt;
&lt;li&gt;조인의 대상이 되는 두 개의 테이블을 각각 왼쪽, 오른쪽 테이블이라고 할 때, 어떤 테이블의 행들을 모두 포함시킬 것인지에 따라 &lt;span style=&quot;color: #ee2323;&quot;&gt;Left Outer Join&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;Right Outer Join&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;Full Outer Join&lt;/span&gt;으로 나뉨&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748542601574&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ~ FROM TABLE1 T1 LEFT OUTER JOIN TABLE2 T2 ON T1.NAME = T2.NAME
SELECT ~ FROM TABLE1 T1 RIGHT OUTER JOIN TABLE2 T2 ON T1.NAME = T2.NAME
SELECT ~ FROM TABLE1 T1 FULL OUTER JOIN TABLE2 T2 ON T1.NAME = T2.NAME&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NATURAL JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조인의 대상이 되는 두 테이블에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;같은 이름의 칼럼에 대해서는 동일한 칼럼값을 가지는 행만 병합&lt;/span&gt;하여 결과 반환&lt;/li&gt;
&lt;li&gt;조인 조건을 내포하고 있으므로 ON 절을 사용할 수 없고 SELECT절의 테이블 명칭(Alias)을 표시할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748542646467&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ~ FROM TABLE1 T1 NATURAL JOIN TABLE2 T2 ON T1.NAME = T2.NAME&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CROSS JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽, 오른쪽 테이블 &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 행의 대응을 조합(경우의 수)&lt;/span&gt;하여 결과를 반환&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;카테시안 곱(Cartesian Product), 왼쪽 테이블이 M행, 오른쪽 테이블이 N행일 때 결과는 M x N행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;조인의 조건은 별도로 지정하지 않음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1748542685734&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT ~ FROM TABLE1 T1 CROSS JOIN TABLE2 T2
SELECT ~ FROM TABLE1 T1, TABLE2 T2&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SORT MERGE JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조인의 조건이 되는 칼럼에 인덱스가 없어서 인덱스 스캔을 할 수 없거나, 랜덤 액세스 방식이 부담될 경우 &lt;span style=&quot;color: #ee2323;&quot;&gt;전체 테이블 스캔 방식을 사용하여 조인 칼럼에 대해 먼저 정렬을 수행한 후 조인을 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NESTED LOOP JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중첩 루프를 사용한 반복문과 유사항 방식으로 수행되는 조인&lt;/li&gt;
&lt;li&gt;인덱스 스캔을 사용하여 데이터를 랜덤 액세스 방식으로 읽어 들이므로 대량의 데이터에 경우 많은 디스크 I/O가 발생하여 성능이 느려질 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HASH JOIN&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;NESTED LOOP JOIN과 SORT MERGE JOIN의 부담 문제를 개선한 조인&lt;/li&gt;
&lt;li&gt;조인 칼럼에 해시함수를 적용하여 인덱스가 없을 때 별도로 정렬을 수행하지 않고도 빠르게 조인 대상을 찾는 것이 가능하지만 해시함수의 특성에 따라 EQUI JOIN에서만 사용할 수 있음&lt;/li&gt;
&lt;li&gt;해시함수를 사용하므로 CPU연산 부하가 높음&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>cross</category>
      <category>group by</category>
      <category>HAVING</category>
      <category>inner</category>
      <category>Join</category>
      <category>outer</category>
      <category>RDB</category>
      <category>SQLD</category>
      <category>연산자</category>
      <category>조인</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/469</guid>
      <comments>https://devbksheen.tistory.com/entry/SQLD-3-SQL-%EA%B8%B0%EB%B3%B8-%EB%B0%8F-%ED%99%9C%EC%9A%A9#entry469comment</comments>
      <pubDate>Fri, 30 May 2025 03:19:42 +0900</pubDate>
    </item>
    <item>
      <title>SQLD - 2. 데이터 모델과 SQL</title>
      <link>https://devbksheen.tistory.com/entry/SQLD-2-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EA%B3%BC-SQL</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;정규화&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스 이상현상(Anomaly)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규화하지 않은 테이블에 데이터를 삽입, 수정, 삭제할 때 데이터의 일관성(Consistency)이 깨지는 현상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;삽입 이상(Insertion Anomaly)&lt;/b&gt;: 데이터 삽입 시 의도하지 않은 정보까지 삽입해야 하는 현상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;갱신 이상(Update Anomaly)&lt;/b&gt;: 중복 저장되어 있는 데이터 중 하나만 갱신하고 다른 하나를 갱신하지 않을 때 데이터 불일치 현상&lt;/li&gt;
&lt;li&gt;&lt;b&gt;삭제 이상(Deletion Anomaly)&lt;/b&gt;: 특정 데이터를 삭제할 때 의도하지 않은 정보까지 삭제되는 현상&lt;/li&gt;
&lt;li&gt;이러한 이상현상을 방지하기 위해 정규화 과정을 거침&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제1정규형&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 속성이 하나의 속성값만을 가지고 있으면서 &lt;span style=&quot;color: #ee2323;&quot;&gt;유사한 속성이 반복되지 않도록(속성의 원자성) 별도의 테이블로 분리&lt;/span&gt;하여 1차 정규화를 진행한 상태(중복되거나 반복되는 데이터를 별도의 테이블 분리)&lt;/li&gt;
&lt;li&gt;일반적으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 삽입, 수정, 삭제 성능이 향상&lt;/span&gt;되지만 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 조회 시 조인이 발생하여 조회 성능이 하락할 가능성이 있음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제2정규형&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부분 함수종속성을 제거&lt;/span&gt;하여 2차 정규화를 진행한 상태(종속성을 가지는 주식별자를 다른 엔터티로 분리)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부분 함수종속성이란 복합식별자에서 일반 속성이 주 식별자의 일부에만 종속성을 가지는 형태&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제3정규형&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이행 함수종속성을 제거&lt;/span&gt;하여 3차 정규화를 진행한 상태(일반 속성을 다른 엔터티로 분리)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이행 함수종속성이란 주 식별자가 아닌 일반 속성 간에 함수종속성이 존재하는 형태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;A(PK)와 일반 속성 B, C가 존재할 때 B &amp;rarr; C의 함수종속성이 존재하면 C는 A에 대해 이행 함수종속성을 가짐&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;관계와 조인의 이해&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정규화를 통해 분리된 데이터들은 입력, 수정, 삭제 성능이 증가하지만, 조회 과정에서 조인이 발생해 조회 성능이 떨어질 수 있음&lt;/li&gt;
&lt;li&gt;데이터 정합성과 조회 성능은 트레이드오프 관계이므로 시스템에 요구사항에 맞게 적절한 수준에 데이터 정합성 결정 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성능 데이터 모델링&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터의 증가가 빠르면 빠를수록 성능저하에 따른 성능개선비용 증가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;분석/설계 과정에서부터 DB의 성능을 충분히 고려하여 데이터 모델링을 수행&lt;/span&gt;하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;성능저하에 따른 재작업 비용 최소화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DB 모델링 시 정규화 수행&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DB 용량산정을 수행&lt;/li&gt;
&lt;li&gt;DB에 발생되는 트랜잭션의 유형 파악&lt;/li&gt;
&lt;li&gt;용량과 트랜잭션의 유형에 따라 반정규화 수행&lt;/li&gt;
&lt;li&gt;이력모델의 조정, PK/FK 조정, 슈퍼타입/서브타입 조정 등 수행&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;성능관점에서 데이터 모델 검증&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;반정규화(De-Normalization)가 필요한 상황&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반정규화란 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 중복을 허용하거나 데이터를 그룹화하여 조회 성능을 높이는 것&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;전제적인 구조보다 단순화하여 시간과 비용을 절감하는 것이 중요할 때 수행&lt;/li&gt;
&lt;li&gt;모델의 유연성과 정합성을 낮추어 또 다른 문제가 발생할 수 있으므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 대안에 대해 충분한 검토 필요&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;대안으로는 뷰 테이블 생성, 인덱스 조정, 클러스터링 적용, 응용 프로그램에서 처리 등 존재&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;반정규화 과정&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;반정규화 대상 조사 -&amp;gt; 다른 방법 검토 -&amp;gt; 반정규화&amp;nbsp;적용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;테이블 반정규화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다수의 조인을 통한 성능 저하를 예방하기 위해 중복된 관계를 추가&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테이블 병합&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조인의 발생 빈도가 높을 때 여러 테이블을 하나로 합치는 것&lt;/li&gt;
&lt;li&gt;1:1 관계 테이블 병합, 1:M 관계 테이블 병합, 슈퍼타입/서브타입 관계 테이블 병합 존재
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슈퍼타입/서브타입 관계 테이블 병합 방법
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;One to One Type&lt;/b&gt;: 슈퍼타입, 서브타입 테이블들을 각각 개별 테이블로 구성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Plus Type&lt;/b&gt;: 각각의 서브타입에 슈퍼타입을 합하여 테이블로 구성&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Single Type&lt;/b&gt;&lt;/span&gt;: 전체를 하나의 테이블로 통합(&lt;span style=&quot;color: #ee2323;&quot;&gt;항상&amp;nbsp;동시에 조회 시 고려&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1:M 관계 테이블 병합 시 속성의 개수가 많은 경우 중복이 발생할 가능성이 높으므로 다른 대안을 충분히 검토&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테이블 분할&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 속성들에 대하서만 집중적으로 접근하는 경우 별도의 테이블로 분리&lt;/li&gt;
&lt;li&gt;접근 빈도나 경합 현상이 감소하는 효과가 있지만 분할된 테이블의 속성을 한 번에 조회할 때는 유니온(UNION)이나 조인(JOIN)을 사용해야 하므로 성능 하락이 발생할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;수직분할&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;접근이 빈번한 속성들을 별도의 테이블로 분할하여 1:1 관계로 만드는 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;로우체이닝(Row Chaining)이 발생할 경우 수직분할을 우선적으로 고려&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;수평분할(파티션닝)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;속성 값에 따라 조회하는 경우 인스턴스들을 그룹핑하여 분할하는 방법&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;분할된 테이블의 스키마는 원래 테이블과 동일&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테이블 추가&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;조회에 필요한 속성을 포함하는 새로운 테이블 추가&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;중복 테이블 추가&lt;/b&gt;&lt;/span&gt;: 다른&amp;nbsp;업무나&amp;nbsp;서버에&amp;nbsp;있는&amp;nbsp;테이블과&amp;nbsp;동일한&amp;nbsp;구조의&amp;nbsp;테이블을&amp;nbsp;중복해서&amp;nbsp;추가하는&amp;nbsp;방법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;통계 테이블 추가&lt;/b&gt;&lt;/span&gt;: SUM(합),&amp;nbsp;AVG(평균)&amp;nbsp;등&amp;nbsp;통계값을&amp;nbsp;미리&amp;nbsp;계산하여&amp;nbsp;저장하는&amp;nbsp;별도의&amp;nbsp;테이블을&amp;nbsp;추가하는&amp;nbsp;방법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이력 테이블 추가&lt;/b&gt;&lt;/span&gt;: 이력 데이터를 관리할 수 있는 테이블을 별도로 추가하는 방법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;부분 테이블 추가&lt;/b&gt;&lt;/span&gt;: 디스크&amp;nbsp;I/O를&amp;nbsp;줄이기&amp;nbsp;위해&amp;nbsp;자주&amp;nbsp;사용하는&amp;nbsp;속성들만&amp;nbsp;별도로&amp;nbsp;모아서&amp;nbsp;새로운&amp;nbsp;테이블로&amp;nbsp;추가하는&amp;nbsp;방법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;칼럼 반정규화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;중복 칼럼 추가&lt;/b&gt;&lt;/span&gt;: 조인을 감소시키기 위해 자주 사용하는 칼럼을 중복 추가하는 방법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;파생 칼럼 추가&lt;/b&gt;&lt;/span&gt;: 트랜잭션&amp;nbsp;처리&amp;nbsp;시&amp;nbsp;계산에&amp;nbsp;의한&amp;nbsp;부하를&amp;nbsp;줄이기&amp;nbsp;위해&amp;nbsp;계산값을&amp;nbsp;별도의&amp;nbsp;칼럼으로&amp;nbsp;미리&amp;nbsp;추가하는&amp;nbsp;기법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이력 테이블 칼럼 추가&lt;/b&gt;&lt;/span&gt;: 대량의&amp;nbsp;데이터를&amp;nbsp;처리할&amp;nbsp;때&amp;nbsp;조회성능&amp;nbsp;저하를&amp;nbsp;예방하기&amp;nbsp;위해&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;이력&amp;nbsp;테이블에&amp;nbsp;조회&amp;nbsp;조건에&amp;nbsp;해당하는&amp;nbsp;기능성&amp;nbsp;칼럼을&amp;nbsp;추가&lt;/span&gt;하는&amp;nbsp;기법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;PK에 의한 칼럼 추가&lt;/b&gt;&lt;/span&gt;: 복합&amp;nbsp;의미를&amp;nbsp;갖는&amp;nbsp;PK를&amp;nbsp;단일&amp;nbsp;속성으로&amp;nbsp;구성했을&amp;nbsp;때,&amp;nbsp;PK를&amp;nbsp;파싱&amp;nbsp;해서&amp;nbsp;추가적인&amp;nbsp;내용을&amp;nbsp;조회해야&amp;nbsp;하는&amp;nbsp;경우&amp;nbsp;이를&amp;nbsp;일반&amp;nbsp;속성으로&amp;nbsp;추가하는&amp;nbsp;기법&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;응용 시스템 오작동을 위한 칼럼 추가&lt;/b&gt;&lt;/span&gt;: 응용&amp;nbsp;시스템에서&amp;nbsp;데이터&amp;nbsp;처리&amp;nbsp;도중&amp;nbsp;오류가&amp;nbsp;발생한&amp;nbsp;경우&amp;nbsp;원래의&amp;nbsp;값을&amp;nbsp;복원하는&amp;nbsp;것처럼&amp;nbsp;오동작&amp;nbsp;처리를&amp;nbsp;위해&amp;nbsp;이전&amp;nbsp;데이터를&amp;nbsp;임시적으로&amp;nbsp;중복하여&amp;nbsp;저장하는&amp;nbsp;기법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관계 반정규화&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다수의 조인을 통해 처리가 가능하지만 성능 저하를 막기 위해 추가적으로 중복된 관계를 맺는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모델이 표현하는 트랜잭션의 이해&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB에 데이터를 삽입, 수정, 삭제하는 경우 원자적(Atomic)으로 하나의 단위(트랜잭션)로 실행되어야 데이터의 정합성이 깨지지 않음&lt;/li&gt;
&lt;li&gt;작업이 완전하게 다 처리되거나 아니면 전혀 처리되지 않아야 함&lt;/li&gt;
&lt;li&gt;트랜잭션 관련 SQL 명령(TCL: Transaction Control Language)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;COMMIT&lt;/b&gt;: 작업을 정상적으로 처리 완료하여 DB에 반영&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ROLLBACK&lt;/b&gt;: 작업을 취소하고 이전 상태로 복원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SAVEPOINT&lt;/b&gt;: ROLLBACK 시 부분 작업 취소를 위한 저장점을 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트랜잭션의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB에 데이터를 읽고 쓸 때, 한 번에 수행되어야 하는 논리적인 작업 단위&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트랜잭션의 특징 - 원&amp;middot;일&amp;middot;고&amp;middot;지&lt;/h3&gt;
&lt;table id=&quot;1f5565b4-65b6-8009-8212-f46c3c1fd5c6&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f5565b4-65b6-80c8-abd9-cf7527393887&quot;&gt;
&lt;td id=&quot;n[kY&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td id=&quot;}~rj&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-8062-b598-dae3108f92a8&quot;&gt;
&lt;td id=&quot;n[kY&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;원자성(Atomicity)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;}~rj&quot;&gt;하나의 트랜잭션으로 묶인 연산들은 모두 실행되거나 전혀 실행되지 않아야 함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-809a-bd51-f05437e843f9&quot;&gt;
&lt;td id=&quot;n[kY&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;일관성(Consistency)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;}~rj&quot;&gt;트랜잭션의 결과는 DB 정합성을 깨지 않음&lt;br /&gt;트랜잭션 이전에 DB에 오류가 없다면 트랜잭션 이후에도 오류가 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-8040-8051-e8bb705a329d&quot;&gt;
&lt;td id=&quot;n[kY&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;고립성(Icolation)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;}~rj&quot;&gt;트랜잭션은 독립적으로 수행되며 다른 트랜잭션이 실행 중간에 간섭하거나 영향을 미치지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-8022-9f74-d02a0fd4cdaa&quot;&gt;
&lt;td id=&quot;n[kY&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;영속성(Durability), 지속성&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td id=&quot;}~rj&quot;&gt;트랜잭션의 결과는 DB에 영구적으로 저장되어 유지됨&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;트랜잭션의 격리 수준이 낮을 때 발생하는 문제&lt;/h3&gt;
&lt;table id=&quot;1f5565b4-65b6-80da-a55d-edb595045095&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr id=&quot;1f5565b4-65b6-804c-a47b-f1ed7747b2f3&quot;&gt;
&lt;td id=&quot;@}Ix&quot;&gt;문제점&lt;/td&gt;
&lt;td id=&quot;[uZt&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-8090-a2b1-efaed37ae8f5&quot;&gt;
&lt;td id=&quot;@}Ix&quot;&gt;Dirty Read&lt;/td&gt;
&lt;td id=&quot;[uZt&quot;&gt;트랜잭션에 의해 수정되었으나 아직 커밋되지 않은 상태에서 다른 트랜잭션이 해당 데이터를 읽게 되면 발생하는 데이터 불일치 현상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-8075-afda-f8861e1e8c1f&quot;&gt;
&lt;td id=&quot;@}Ix&quot;&gt;Non-Repeatable Read&lt;/td&gt;
&lt;td id=&quot;[uZt&quot;&gt;한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 그 사이에 다른 트랜잭션이 값을 수정, 삭제하면서 첫 번째와 두 번째 쿼리의 실행 결과가 달라지는 현상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr id=&quot;1f5565b4-65b6-8062-9532-fb1f50ff8804&quot;&gt;
&lt;td id=&quot;@}Ix&quot;&gt;Phantom Read&lt;/td&gt;
&lt;td id=&quot;[uZt&quot;&gt;한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 그 사이 다른 트랜잭션이 값을 삽입하면서 두 번째 쿼리에서 이전에 없던 레코드가 나타나는 현상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Null 속성의 이해&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Null의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아직 입력된 값이 없는 상태로서 &lt;span style=&quot;color: #ee2323;&quot;&gt;아무런 값도 가지고 있지 않은 상태&lt;/span&gt;를 의미&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;문자열의 공백이나 숫자 0은 Null과는 다르게 구분해야 함&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;본질식별자 vs 인조식별자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;본질식별자(원조식별자)&lt;/b&gt;: 업무에 존재하는 원래의 식별자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인조식별자(대리식별자)&lt;/b&gt;: 업무에 존재하지 않으나 식별자가 복잡하게 구성된 경우 인위적으로 만든 식별자&lt;/li&gt;
&lt;li&gt;인조식별자에 경우 &lt;span style=&quot;color: #ee2323;&quot;&gt;추가적인 연산 없이 시퀀스나 키 제약조건 등을 통해 주식별자를 생성할 수 있으므로 개발의 편의성을 향상&lt;/span&gt;시키지만,&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 중복 발생 가능성&lt;/span&gt;이 있고 &lt;span style=&quot;color: #ee2323;&quot;&gt;별도의 인덱스 생성이 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>null</category>
      <category>SQLD</category>
      <category>반정규화</category>
      <category>수직분할</category>
      <category>수평분할</category>
      <category>식별자</category>
      <category>정규화</category>
      <category>트랜잭션</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/468</guid>
      <comments>https://devbksheen.tistory.com/entry/SQLD-2-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EA%B3%BC-SQL#entry468comment</comments>
      <pubDate>Mon, 26 May 2025 15:25:02 +0900</pubDate>
    </item>
    <item>
      <title>SQLD - 1. 데이터 모델링의 이해</title>
      <link>https://devbksheen.tistory.com/entry/SQLD-1-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%9D%98-%EC%9D%B4%ED%95%B4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 모델의 이해&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델링의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현실세계의 데이터를 약속된 표기법에 따라 도식화한 것&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터베이스 구축 및 업무 형상화&lt;/span&gt;(추상화, 가시화, 명세화)를 진행하여 이를 설계, 개발 또는 시스템 관리에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델링의 특징&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;추상화(Abstraction)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대상의 주요 특징을 추출하여 일정한 형식으로 표현&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단순화(Simplification)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;복잡한 현실세계를 그대로 표현하지 않고 단순하게 표현&lt;/li&gt;
&lt;li&gt;UML(Unified Modeling Language), ERD(Entity Relationship Diagram)과 같은 약속된 표기법을 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;명확화(Clarity)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;보는 사람 관점에 따라 다르게 해석되지 않도록 대상을 명확하게 모호하지 않게 표현&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터 모델링&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일정한 표기법을 사용하여 대상이 되는 데이터를 추상화, 단순화, 명확화 하여 표현&lt;/li&gt;
&lt;li&gt;주의사항으로 중복(Duplication) 최소화, 비유연성(Inflexibility) 최소화, 비일관성(Inconsistency) 최소화&lt;/li&gt;
&lt;li&gt;응용 프로그램과 테이블은 느산하게 결합하는 것이 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;모델링의 세 가지&lt;/span&gt; 관점&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 관점(대상, what)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업무 데이터에 집중하여 어떤 데이터들이 서로 관계를 맺고 사용되는지 모델링&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;프로세스 관점(처리방법, How)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;업무 흐름에 집중하여, 업무가 실제로 처리하는 일이 어떻게 처리되는지 모델링(동적 분석, 도메인 분석 기반)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터와 프로세스의 상관 관점(대상과 처리방법의 상관관계, Interaction)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;업무의 데이터와 프로세스가 서로 어떻게 관계를 맺고 영향을 주고받는지를 모델링&lt;/span&gt;(CRUD 분석 기반)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델링의 세 가지 단계&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개념적 데이터 모델링(Conceptual Data Modeling)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;가장 높은 추상화 레벨&lt;/span&gt;을 가진 모델링으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;업무와 개념 중심으로 포괄적인 수준에서 모델링&lt;/span&gt;을 수행&lt;/li&gt;
&lt;li&gt;전사적 차원의 데이터 모델링을 수행할 때 이루어짐&lt;/li&gt;
&lt;li&gt;EA(Enterprise Architecture)를 수립할 때 많이 이용되며, 이 단계에서 엔터티(Entity)와 속성(Attribute)을 도출&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;논리적 데이터 모델링(Logical Data Modeling)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 모델에 대한 &lt;span style=&quot;color: #ee2323;&quot;&gt;키(Key), 속성(Attribute), 관계(Relationship) 등을 정의&lt;/span&gt;하고 정규화를 통해 중복 데이터를 최소화&lt;/li&gt;
&lt;li&gt;서로 다른 DBMS(Database Management System)에 적용이 가능한 수준에서 추상화 레벨을 가지므로 재사용성 높음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;물리적 데이터 모델링(Physical Data Modeling)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 DBMS에 맞추어 구현이 가능한 수준에서 모델링을 수행하는 것으로 DBMS의 &lt;span style=&quot;color: #ee2323;&quot;&gt;성능이나 저장, 보안, 가용성 등 물리적인 성격을 고려하여 설계&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;가장 낮은 수준의 추상화 레벨을 가지며 성능 향상을 위해 반정규화를 수행, 테이블, 인덱스, 함수 등을 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ANSI-SPARC에서 정의한 3단계 스키마 구조&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 독립성을 보장하기 위한 설계방법으로 3단계 스키마 구조를 가지며 사용자, 설계자, 개발자 관점에서 스키마를 정의한 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;외부 스키마(External Schema)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사용자 또는 애플리케이션(응용 프로그래머) 관점&lt;/span&gt;에서 DB 스키마를 정의&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다중 사용자 뷰 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개념 스키마(Conceptual Schema)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;설계자 또는 모든 사용자(조직 전체) 관점&lt;/span&gt;에서 DB 스키마를 통합하여 전체 DB에 저장되는 데이터와 그 관계를 정의&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;통합된 뷰 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;내부 스키마(Internal Schema)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;개발자 관점&lt;/span&gt;에서 디스크나 메모리 상의 물리적, 실질적 저장구조를 나타내며, 테이블, 칼럼, 인덱스 등을 정의&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;물리적 뷰 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;논리적 데이터 독립성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;외부 스키마와 개념 스키마 간의 독립성&lt;/li&gt;
&lt;li&gt;개념 스키마가 변경되어도 외부 스키마는 영향X&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;물리적 데이터 독립성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념 스키마와 내부 스키마 간의 독립성&lt;/li&gt;
&lt;li&gt;내부 스키마가 변경되어도 개념 스키마와 외부 스키마는 영향 X&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터 모델링의 유의사항&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 정의를 프로세스와 분리하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;유연성을 향상&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;DB내 같은 데이터를 저장하지 않도록 하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;중복성 최소화&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;데이터 상호 간의 연관관계를 정의하여 데이터 &lt;span style=&quot;color: #ee2323;&quot;&gt;일관성 유지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터의 정의(스키마, 테이블)와 데이터를 사용하는 방법(프로세스, 프로그램)을 느슨하게 결합하여 유지보수성 향상&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ERD&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB를 구성하는 데이터 논리적 구성요소를 엔터티(Entity)로 정의하고 엔터티들 간의 관계를 특별한 표기법으로 나타냄으로써 스키마를 설계하는 방법을 제공&lt;/li&gt;
&lt;li&gt;1976년 피터 첸(Peter Chen)에 의해 Entity-Relationship Model(E-R Model)이라는 표기법이 만들어짐&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ERD 작성순서&lt;/span&gt;&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;엔터티 도출&lt;/li&gt;
&lt;li&gt;도출된 엔터티를 적절하게 배치, &lt;span style=&quot;color: #ee2323;&quot;&gt;중요 엔터티는 왼쪽 상단에 배치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;엔터티 간의 관계 설정&lt;/li&gt;
&lt;li&gt;관계명 기술(행위 관계, 존재 관계 표현)&lt;/li&gt;
&lt;li&gt;관계의 참여도(Cardinality)를 기술(1:1, 1:N, N:N 표현)&lt;/li&gt;
&lt;li&gt;관계의 필수/선택 여부를 기술(Not Null 여부)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;엔터티(Entity)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;엔터티의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DB 구성요소 중 독립적으로 식별 가능한 객체(Object)로 보다 상세히 표현하기 위해 속성(Attribute)이라는 하위요소를 가짐&lt;/li&gt;
&lt;li&gt;ERD로 표현할 때 PK(Primary Key, 주식별자) 속성과 일반 속성은 칸막이로 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;엔터티의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;업무에서 필요로 하고 관리하고자 하는 정보&lt;/span&gt;이어야 함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;식별이 가능하도록 유일한 식별자를 가져야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;영속적으로 존재하는 인스턴스가 두 개 이상인 집합을 이루어야 함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하위요소로 반드시 속성을 가져야 함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다른 엔터티와 한 개 이상의 관계를 가져야 함(통계성 엔터티나 코드성 엔터티의 경우 관계 생략 가능)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;교차 엔터티&lt;/span&gt;(Interaction Entity): &lt;span style=&quot;color: #ee2323;&quot;&gt;N:N(다대다) 관계를 해소&lt;/span&gt;하기 위하여 만들어진 엔터티&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;엔터티의 분류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 시점/상속 관계에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;기본 엔터티&lt;/b&gt;&lt;/span&gt;: 자신의 &lt;span style=&quot;color: #ee2323;&quot;&gt;고유한 주식별자를 가지는 독립적으로 생성&lt;/span&gt;되는 엔터티&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;중심 엔터티&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;기본 엔터티로부터 주식별자를 상속받아 생성&lt;/span&gt;되며 업무의 중심 역할을 하는 엔터티&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;행위 엔터티&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;두 개 이상의 엔터티를 상속받아 생성&lt;/span&gt;되는 엔터티, 내용이 자주 변경되거나 데이터 양이 계속 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;물리적 형태의 존재 여부에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;유형 엔터티&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;물리적 형태가 존재&lt;/span&gt;하는 엔터티&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개념 엔터티&lt;/b&gt;: 물리적 형태 없이 개념적으로 정의되는 엔터티&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사건 엔터티&lt;/b&gt;: 업무를 수행하면서 발생하는 행위나 이벤트를 나타내는 엔터티&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;속성(Attribute)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;속성의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엔터티에 대한 자세하고 구체적인 정보를 나타낸 것으로 엔터티의 하위요소&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;의미상으로 더 이상 분리되지 않는 최소의 데이터 단위&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;개수 제한은 없지만 처리하고자 하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;업무 프로세스에 꼭 필요한 것으로 정의하여 최소화&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;속성값&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;속성이 가질 수 있는 특정 값을 의미&lt;/li&gt;
&lt;li&gt;하나의 엔터티 인스턴스에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;각각의 속성은 한 개의 속성값만을 가짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;만약 &lt;span style=&quot;color: #ee2323;&quot;&gt;한 개 이상의 속성값을 가질 수 있는 경우에는 1차 정규화를 수행&lt;/span&gt;하여 한 개만 갖도록 해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;엔터티, 인스턴스, 속성값&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;한 개의 엔터티는 두 개 이상의 인스턴스를 가져야 함&lt;/span&gt;(엔터티는 인스턴스의 집합)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;한 개의 엔터티는 두 개 이상의 속성을 가져야 함&lt;/span&gt;(엔터티는 속성의 집합)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;한 개의 속성은 한 개의 속성값만 가짐&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;속성의 분류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;속성의 특성에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기본 속성&lt;/b&gt;: 엔터티가 본래부터 가지고 있어야 하는 속성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;설계 속성&lt;/b&gt;: 엔터티가 본재부터 가지고 있던 속성은 아니지만 설계 시 필요하다고 판단되어 도출된 속성&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;파생 속성&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;원래의 속성으로부터 계산&lt;/span&gt;되거나 특정 규칙에 따라 변형되어 만들어진 속성&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;속성의 구성 방식에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;PK(Primary Key, 기본키) 속성&lt;/b&gt;: 해당 엔터티의 인스턴스를 유일하게 식별할 수 있는 속성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FK(Foreign Key, 외래키) 속성&lt;/b&gt;: 관계를 통해 다른 엔터티의 속성을 가져와 포함시키는 속성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;일반 속성&lt;/b&gt;: 키(PK, FK)가 아닌 나머지 속성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;도메인&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;속성이 가질 수 있는 값의 범위&lt;/span&gt;(값의 데이터 타입과 크기)를 정의한 것&lt;/li&gt;
&lt;li&gt;도메인이 지정된 속성은 해당 도메인의 데이터 타입, 크기, 제약사항 등을 따름&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;관계(Relationship)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관계의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;엔터티와 엔터티 간에 맺고 있는 연관성&lt;/span&gt;을 의미&lt;/li&gt;
&lt;li&gt;엔터티 관계는 존재적 관계와 행위적 관계로 나눌 수 있으나 ERD에서는 이 둘을 구분하지 않고 동일하게 표현&lt;/li&gt;
&lt;li&gt;UML의 클래스 다이어그램에서는 연관관계와 의존관계로 구분하며 표기도 실선과 점선으로 다르게 표현 (ERD에서는 실선과 점선의 구분은 식별자 관계와 비식별자 관계를 구분할 때 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;존재적 관계&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;존재 자체로 서로 연관성&lt;/span&gt;을 갖는 관계를 의미(예: 회원과 등급)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;행위적 관계&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 엔터티가 일으키는 &lt;span style=&quot;color: #ee2323;&quot;&gt;특정 행위가&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;연관성이 발생하는 관계&lt;/span&gt;를 의미(예: 회원과 주문)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;엔터티 관계를 도출할 때 참고사항&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 개의 엔터티 사이에 정보의 조합이 발생하는가?&lt;/li&gt;
&lt;li&gt;두 개의 엔터티 사이에 관심 있는 연관규칙이 존재하는가?&lt;/li&gt;
&lt;li&gt;업무기술서, 장표에 관계연결을 가능하게 하는 동사(Verb)가 있는가?&lt;/li&gt;
&lt;li&gt;업무기술서, 장표에 관계연결에 대한 규칙이 서술되어 있는가?&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;표기법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;관계명(Membership)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;관계의 이름, 존재적 관계와 행위적 관계를 기술&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;관계차수(Cardinality)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1:1(일대일), 1:N(일대다), N:N(다대다)과 같이 관계를 맺는 엔터티 인스턴스의 차수&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;관계선택사양(Optionality)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;필수적 관계인지 선택적 관계인지&lt;/span&gt;를 나타냄(Not Null 여부를 의미, &lt;span style=&quot;color: #ee2323;&quot;&gt;필수적 관계인 경우 Null 값을 가질 수 없음&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;선택적 관계인 경우에는 까치발 기호에 O 표시가 덧붙음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;식별자(Identifier)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;식별자의 개념&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유일하게 구별할 수 있는 엔터티의 대표 속성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주식별자&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엔터티 &lt;span style=&quot;color: #ee2323;&quot;&gt;인스턴스를 유일하게 구별해 주는 대표성을 가진 식별자&lt;/span&gt;로써 PK(Primary Key)에 해당하는 속성&lt;/li&gt;
&lt;li&gt;아래 네 가지 성질을 만족해야 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;유일성&lt;/b&gt;&lt;/span&gt;: 인스턴스를 유일하게 구별할 수 있어야 함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;최소성&lt;/b&gt;&lt;/span&gt;: 유일성을 보장하면서도 최소 개수의 속성이어야 함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;불변성&lt;/b&gt;&lt;/span&gt;: 최초 생성 시 부여된 값에서 변경되지 않아야 함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;존재성&lt;/b&gt;&lt;/span&gt;: 반드시 값을 가져야 함(Not Null)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;해당 업무에서 자주 사용되는 속성을 주식별자로 지정하는 것이 유히&lt;/li&gt;
&lt;li&gt;&lt;b&gt;후보키(Candidate Key)&lt;/b&gt;: 유일성과 최소성을 만족하는 속성&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;식별자의 분류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대표성 여부&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;주식별자(Primary Identifier)&lt;/b&gt;: 인스턴스를 유일하게 구별할 수 있는 유일성, 최소성, 불변성, 존재성을 만족하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;대표성에 따른 식별자&lt;/span&gt;, 다른 엔터티와 참조 관계를 연결할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보조식별자(Alternate Identifier)&lt;/b&gt;: 인스턴스를 유일하게 구별할 수 있는 식별자이기는 하나 대표성을 가지지 못하며 다른 엔터티와 참조관계를 연결할 수 없는 식별자&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스스로 생성 여부&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;내부식별자(Intenal Identifier)&lt;/b&gt;&lt;/span&gt;: 엔터티 &lt;span style=&quot;color: #ee2323;&quot;&gt;내부에서 스스로 만들어지는 식별자&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;외부식별자(External Identifier)&lt;/b&gt;&lt;/span&gt;: 관계를 통해 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 엔터티로부터 받아오는 식별자(FK)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;속성의 수&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;단일식별자(Single Identifier)&lt;/b&gt;: 식별자를 구성하는 속성이 하나인 식별자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복합식별자(Composite Identifier)&lt;/b&gt;: 식별자를 구성하는 속성이 둘 이상인 식별자 (너무 많은 속성을 포함하지 않는 것이 유리)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대체 여부&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;본질식별자, 원조식별자(Original Identifier)&lt;/b&gt;: 업무(비즈니스 프로세스)에 존재하는 본래의 식별자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인조식별자, 대리식별자(Surrogate Identifier)&lt;/b&gt;: 업무에 존재하지 않으나 원조식별자가 복잡하게 구성되어 있어 인위적으로 만든 식별자&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;식별자 관계, 비식별자 관계&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;식별자 관계&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엔터티 간의 강한 연결 관계를 표현하며 &lt;span style=&quot;color: #ee2323;&quot;&gt;ERD로 그릴 때 실선으로 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;부모 엔터티의 식별자가 자식 엔터티의 주식별자 구성에 포함되며, &lt;span style=&quot;color: #ee2323;&quot;&gt;같은 생명주기&lt;/span&gt;를 가질 때 적합&lt;/li&gt;
&lt;li&gt;부모 엔터티의 주식별자를 &lt;span style=&quot;color: #ee2323;&quot;&gt;자식 엔터티에서 받아 손자 엔터티까지 계속 흘려보내고 싶을 때 고려&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비식별자 관계&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;엔터티 간의 약한 연결 관계를 표현하며 &lt;span style=&quot;color: #ee2323;&quot;&gt;ERD로 그릴 때 점선으로 표현&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;부모 엔터티의 식별자가 자식 엔터티의 일반 속성이 되며, 다른 생명주기를 가질 때 적합&lt;/li&gt;
&lt;li&gt;여러 개의 엔터티를 통합하면서 각각의 여러 관계가 통합되거나 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;자식 엔터티에서 독립적인 주식별자의 구조를 갖길 원할 때&lt;/span&gt; 고려&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>SQLD</category>
      <category>관계</category>
      <category>데이터</category>
      <category>도메인</category>
      <category>모델링</category>
      <category>속성</category>
      <category>식별자</category>
      <category>엔터티</category>
      <category>자격증</category>
      <category>칼럼</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/467</guid>
      <comments>https://devbksheen.tistory.com/entry/SQLD-1-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%9D%98-%EC%9D%B4%ED%95%B4#entry467comment</comments>
      <pubDate>Mon, 26 May 2025 15:12:39 +0900</pubDate>
    </item>
    <item>
      <title>Mac에서 Flutter 개발환경 세팅하고 실행하기</title>
      <link>https://devbksheen.tistory.com/entry/Mac%EC%97%90%EC%84%9C-Flutter-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Flutter를 공부하고 사이드 프로젝트를 진행할 겸 맥북에 Flutter 개발환경을 구축해보고 정리해보았습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Flutter SDK 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.flutter.dev/get-started/install/macos/mobile-ios#install-the-flutter-sdk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;flutter.dev&lt;/a&gt;&lt;span style=&quot;text-align: start;&quot;&gt;에 접속해 사용하시는 OS에 맞는&lt;/span&gt;Flutter SDK를 설치합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 맥북 M1을 사용하기 때문에 Apple Silicon 버전의 SDK를 설치하였습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1808&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnIvo/btsNkUekIyI/c0vfk0Ok37k39cQSBZRbXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnIvo/btsNkUekIyI/c0vfk0Ok37k39cQSBZRbXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnIvo/btsNkUekIyI/c0vfk0Ok37k39cQSBZRbXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlnIvo%2FbtsNkUekIyI%2Fc0vfk0Ok37k39cQSBZRbXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;700&quot; height=&quot;260&quot; data-origin-width=&quot;1808&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신의 맥북이 Apple Silicon이 탑재된 맥북인지 확인하는 방법은 &lt;a href=&quot;https://support.apple.com/ko-kr/116943&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://support.apple.com/ko-kr/116943&lt;/a&gt;에 접속해보시면 확인하실 수 있습니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. Flutter SDK 경로 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모두 설치되었다면 압축을 풀어주시고 원하시는 폴더로 옮겨줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 문서(Documents) 폴더로 옮겨주었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgJHI5/btsNldqh3mg/jL9C211yG1f7O1e16jy451/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgJHI5/btsNldqh3mg/jL9C211yG1f7O1e16jy451/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgJHI5/btsNldqh3mg/jL9C211yG1f7O1e16jy451/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgJHI5%2FbtsNldqh3mg%2FjL9C211yG1f7O1e16jy451%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;294&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;834&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 옮겨 주셨다면 터미널을 실행해 .zshrc 파일에 flutter 경로를 붙혀넣어 줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744648220746&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vi ~/.zshrc
export PATH=$PATH:$HOME/Documents/flutter/bin # (flutter 폴더를 이동한 경로/bin)

$ source ~/.zshrc # 파일 적용
$ which flutter&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;which flutter 명령어 실행 시 설정한 경로가 출력된다면 정상적으로 설정된 것 입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;96&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7aV5G/btsNkJ463nS/0GHdhpSo2J6BhEzegE7iY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7aV5G/btsNkJ463nS/0GHdhpSo2J6BhEzegE7iY0/img.png&quot; data-alt=&quot;which flutter 명령어 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7aV5G/btsNkJ463nS/0GHdhpSo2J6BhEzegE7iY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7aV5G%2FbtsNkJ463nS%2F0GHdhpSo2J6BhEzegE7iY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;37&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;96&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;which flutter 명령어 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. Rosetta2 설치 경로 설정(Apple Silicon이 탑재된 맥북인 경우에만)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rosetta2를 설치해야&amp;nbsp;Intel&amp;nbsp;프로세서가&amp;nbsp;탑재된&amp;nbsp;Mac&amp;nbsp;전용으로&amp;nbsp;제작된&amp;nbsp;앱을&amp;nbsp;Apple&amp;nbsp;Silicon이&amp;nbsp;탑재된&amp;nbsp;Mac에서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744648492272&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo softwareupdate --install-rosetta --agree-to-license&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Xcode 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;App Store에서 Xcode를 검색해 설치 후 iOS 시뮬레이터를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744648573719&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Xcode의 Command Line Tools에서 사용할 기본 Xcode 경로를 지정
$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

# Xcode를 처음 실행할 때 자동으로 수행되는 설정들을 CLI에서 수동으로 실행
$ sudo xcodebuild -runFirstLaunch

# iOS 플랫폼(시뮬레이터 포함)에 필요한 파일 다운로드
$ xcodebuild -downloadPlatform iOS&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. CocoaPods 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CocoaPods는 iOS 플러그인을 연결해주는 브릿지 역할이라고 생각하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 CocoaPods를 설치하기 위해선 맥에 설치된 ruby 버전을 확인해봐야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;현재 제 맥북에 설치된 ruby 버전은 2.6.10p210으로 나타나는데 이 버전은 CocoaPods를 설치하면 오류가 발생합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1798&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTeXXh/btsNkTsWt6j/0BrT8rekHJF6RzSRkMj4dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTeXXh/btsNkTsWt6j/0BrT8rekHJF6RzSRkMj4dk/img.png&quot; data-alt=&quot;ruby 버전 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTeXXh/btsNkTsWt6j/0BrT8rekHJF6RzSRkMj4dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTeXXh%2FbtsNkTsWt6j%2F0BrT8rekHJF6RzSRkMj4dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;35&quot; data-origin-width=&quot;1798&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ruby 버전 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;brew 명령어를 통해 ruby를 설치하고 관리해줄 rbenv를 설치합니다. (homebrew 설치는 &lt;a href=&quot;https://brew.sh/ko/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://brew.sh/ko/&lt;/a&gt;에서)&lt;/p&gt;
&lt;pre id=&quot;code_1744650384292&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ brew install rbenv
$ export PATH=$HOME/.rbenv/bin:$PATH&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되었다면 ruby의 버전을 검색해 원하는 버전을 설치하고 시스템에 ruby 버전을 설정합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 최신 버전(2025.04.15 기준)인 3.4.2 버전을 설치했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744650520228&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ rbenv install -l
$ rbenv install 3.4.2
$ rbenv global 3.4.2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경변수 설정 명령어를 .zshrc 파일에 flutter 경로 밑에 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744651025305&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo vi ~/.zshrc
export PATH=$PATH:$HOME/Documents/flutter/bin # (flutter 폴더를 이동한 경로/bin)
eval &quot;$(rbenv init -)&quot;

$ source ~/.zshrc
$ ruby -v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가 후 ruby의 버전을 확인해보면 설치한 3.4.2 버전이 출력되고 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wldSz/btsNkjy2DeL/DobsHKiCNVJNVKkfUpMbL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wldSz/btsNkjy2DeL/DobsHKiCNVJNVKkfUpMbL0/img.png&quot; data-alt=&quot;ruby 버전 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wldSz/btsNkjy2DeL/DobsHKiCNVJNVKkfUpMbL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwldSz%2FbtsNkjy2DeL%2FDobsHKiCNVJNVKkfUpMbL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;38&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ruby 버전 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 ruby의 버전업을 완료했다면 CocoaPods를 설치합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744651398800&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo gem install cocoapods&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 마지막에 RubyGems가 업데이트 되었다는 문구가 출력된다면 명령어를 그대로 복사하여 업데이트를 진행합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9BqEU/btsNk2pDFaf/s09chaME3HjjNbz9FCKWzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9BqEU/btsNk2pDFaf/s09chaME3HjjNbz9FCKWzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9BqEU/btsNk2pDFaf/s09chaME3HjjNbz9FCKWzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9BqEU%2FbtsNk2pDFaf%2Fs09chaME3HjjNbz9FCKWzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;550&quot; height=&quot;46&quot; data-origin-width=&quot;1510&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 완료했다면 CocoaPods 설치가 완료된 것입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 안드로이드 스튜디오 설치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.android.com/studio?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;안드로이드 개발자 사이트&lt;/a&gt;에 접속해 안드로이드 스튜디오를 설치합니다.&lt;br /&gt;약관 동의 후 이때도 인텔칩과 애플칩을 구분하여 다운로드 받아주셔야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5DVVV/btsNlmujqez/VnwUlomW3krPB1FYKbYyMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5DVVV/btsNlmujqez/VnwUlomW3krPB1FYKbYyMk/img.png&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;740&quot; data-is-animation=&quot;false&quot; width=&quot;400&quot; height=&quot;255&quot; style=&quot;width: 25.234%; margin-right: 10px;&quot; data-widthpercent=&quot;25.53&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5DVVV/btsNlmujqez/VnwUlomW3krPB1FYKbYyMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5DVVV%2FbtsNlmujqez%2FVnwUlomW3krPB1FYKbYyMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1162&quot; height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTQr1r/btsNkWiSRzL/11jcERGL1qjtlH688HKC20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTQr1r/btsNkWiSRzL/11jcERGL1qjtlH688HKC20/img.png&quot; data-origin-width=&quot;2684&quot; data-origin-height=&quot;586&quot; data-is-animation=&quot;false&quot; style=&quot;width: 73.6032%;&quot; data-widthpercent=&quot;74.47&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTQr1r/btsNkWiSRzL/11jcERGL1qjtlH688HKC20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTQr1r%2FbtsNkWiSRzL%2F11jcERGL1qjtlH688HKC20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2684&quot; height=&quot;586&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;안드로이드 스튜디오 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 모두 끝났다면 SDK Manager를 선택하여 SDK Tool 탭에 있는 Android SDK Command-line Tools를 설치합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lg1Zh/btsNkxqictT/iDCV6Hk45v11wYid83fzKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lg1Zh/btsNkxqictT/iDCV6Hk45v11wYid83fzKk/img.png&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1132&quot; data-is-animation=&quot;false&quot; width=&quot;400&quot; height=&quot;287&quot; style=&quot;width: 49.125%; margin-right: 10px;&quot; data-widthpercent=&quot;49.7&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lg1Zh/btsNkxqictT/iDCV6Hk45v11wYid83fzKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLg1Zh%2FbtsNkxqictT%2FiDCV6Hk45v11wYid83fzKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1580&quot; height=&quot;1132&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmOfsi/btsNk5zVqgE/kkRRUozY3gQIKNbJbZly8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmOfsi/btsNk5zVqgE/kkRRUozY3gQIKNbJbZly8k/img.png&quot; data-origin-width=&quot;1952&quot; data-origin-height=&quot;1382&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.7122%;&quot; data-widthpercent=&quot;50.3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmOfsi/btsNk5zVqgE/kkRRUozY3gQIKNbJbZly8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmOfsi%2FbtsNk5zVqgE%2FkkRRUozY3gQIKNbJbZly8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1952&quot; height=&quot;1382&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Android SDK Command-line Tools 설치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커맨드 라인 툴까지 설치 했다면 플러터에서 안드로이드를 사용하는데 필요한 라이센스를 허용해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744649336356&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ flutter doctor --android-licenses # 플러터 안드로이드 라이센스 허용&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7. 설치 및 설정 확인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 설치 및 설정 과정을 모두 마치셨다면 flutter doctor 명령어를 사용하여 개발 환경을 진단합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1744651681895&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ flutter doctor&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Sv5Qv/btsNlLtD1It/oPrTWtmXwBU2DCKl8nhNt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Sv5Qv/btsNlLtD1It/oPrTWtmXwBU2DCKl8nhNt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Sv5Qv/btsNlLtD1It/oPrTWtmXwBU2DCKl8nhNt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSv5Qv%2FbtsNlLtD1It%2FoPrTWtmXwBU2DCKl8nhNt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;800&quot; height=&quot;213&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;558&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 항목에 문제가 없다고 진단됩니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8. 프로젝트 생성 후 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 프로젝트 생성 및 실행을 위해서 &lt;a href=&quot;https://code.visualstudio.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Visual Studio Code&lt;/a&gt;를 설치하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되었다면 실행 후 shfit + command + x 단축키를 눌러 Flutter Extention을 검색하고 설치합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLXfs/btsNlfPK2OG/sAtJQ4GhtXiuP5eSzqEwZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLXfs/btsNlfPK2OG/sAtJQ4GhtXiuP5eSzqEwZK/img.png&quot; data-alt=&quot;Flutter Extention&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLXfs/btsNlfPK2OG/sAtJQ4GhtXiuP5eSzqEwZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLXfs%2FbtsNlfPK2OG%2FsAtJQ4GhtXiuP5eSzqEwZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;324&quot; data-origin-width=&quot;592&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Flutter Extention&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 후 오른쪽 하단에 Flutter SDK 경로를 설정하라는 문구가 뜬다면 위에서 설치한 경로로 설정해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치가 완료되었다면 shift + command + p 단축키를 눌러 Flutter를 검색해 [Flutter: New Project] 선택 후 생성할 flutter 템플릿과 생성 경로를 선택하고 프로젝트 이름을 작성하고 생성하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beGmzx/btsNkolslh8/1xlX8iFP9fkeHhjukRDG4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beGmzx/btsNkolslh8/1xlX8iFP9fkeHhjukRDG4K/img.png&quot; data-alt=&quot;shift + command + p &amp;amp;gt; Flutter: New Project 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beGmzx/btsNkolslh8/1xlX8iFP9fkeHhjukRDG4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeGmzx%2FbtsNkolslh8%2F1xlX8iFP9fkeHhjukRDG4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;74&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;184&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;shift + command + p &amp;gt; Flutter: New Project 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWp8pS/btsNiVjPMqe/1hxsA5k59W6uNBa7J1Jt11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWp8pS/btsNiVjPMqe/1hxsA5k59W6uNBa7J1Jt11/img.png&quot; data-alt=&quot;Flutter template 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWp8pS/btsNiVjPMqe/1hxsA5k59W6uNBa7J1Jt11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWp8pS%2FbtsNiVjPMqe%2F1hxsA5k59W6uNBa7J1Jt11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;269&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Flutter template 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diz6cM/btsNkn7YFPX/vtayc8SXosOztdkKiiksS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diz6cM/btsNkn7YFPX/vtayc8SXosOztdkKiiksS1/img.png&quot; data-alt=&quot;프로젝트 이름 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diz6cM/btsNkn7YFPX/vtayc8SXosOztdkKiiksS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdiz6cM%2FbtsNkn7YFPX%2Fvtayc8SXosOztdkKiiksS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;93&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;230&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트 이름 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트가 생성되었다면 다시 shift + command + p 단축키를 눌러서 Flutter를 검색해 [Flutter: Select Device]를 선택하여 원하시는 에뮬레이터를 선택하고 상단 오른쪽에  Run And Debugging 버튼을 클릭하면 선택한 에뮬레이터에 애플리케이션이 설치되고 실행됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qFKJs/btsNkHsI9zm/jo9Ud73j9W4zoBOFeyiVAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qFKJs/btsNkHsI9zm/jo9Ud73j9W4zoBOFeyiVAk/img.png&quot; data-alt=&quot;shift + command + p &amp;amp;gt; Flutter: Select Device 선택&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qFKJs/btsNkHsI9zm/jo9Ud73j9W4zoBOFeyiVAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqFKJs%2FbtsNkHsI9zm%2Fjo9Ud73j9W4zoBOFeyiVAk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;78&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;shift + command + p &amp;gt; Flutter: Select Device 선택&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bG9MAJ/btsNlnNydvn/UXNa36gZ8ozkGko3zv0pLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bG9MAJ/btsNlnNydvn/UXNa36gZ8ozkGko3zv0pLK/img.png&quot; data-alt=&quot;디버깅 버튼 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bG9MAJ/btsNlnNydvn/UXNa36gZ8ozkGko3zv0pLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbG9MAJ%2FbtsNlnNydvn%2FUXNa36gZ8ozkGko3zv0pLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;83&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;디버깅 버튼 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;1954&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biwC6Q/btsNjJDroSs/kzkXkWYGSJuCTok7tkR0Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biwC6Q/btsNjJDroSs/kzkXkWYGSJuCTok7tkR0Zk/img.png&quot; data-alt=&quot;애플리케이션 설치 후 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biwC6Q/btsNjJDroSs/kzkXkWYGSJuCTok7tkR0Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiwC6Q%2FbtsNjJDroSs%2FkzkXkWYGSJuCTok7tkR0Zk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;1064&quot; data-origin-width=&quot;918&quot; data-origin-height=&quot;1954&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;애플리케이션 설치 후 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://www.youtube.com/watch?v=fBz3dlQ-EDM&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.youtube.com/watch?v=fBz3dlQ-EDM&lt;/a&gt;&lt;/p&gt;</description>
      <category>Flutter</category>
      <category>Flutter</category>
      <category>Mac</category>
      <category>개발환경</category>
      <category>설치</category>
      <category>세팅</category>
      <category>플러터</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/466</guid>
      <comments>https://devbksheen.tistory.com/entry/Mac%EC%97%90%EC%84%9C-Flutter-%EA%B0%9C%EB%B0%9C%ED%99%98%EA%B2%BD-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0#entry466comment</comments>
      <pubDate>Tue, 15 Apr 2025 02:36:51 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 요약본 이것만 외우면 됩니다.</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-%EC%9A%94%EC%95%BD%EB%B3%B8-%EC%9D%B4%EA%B2%83%EB%A7%8C-%EC%99%B8%EC%9A%B0%EB%A9%B4-%EB%90%A9%EB%8B%88%EB%8B%A4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 컴퓨터 시스템의 구성&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제어장치(Control Unit)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령 레지스터(IR): 현재 실행 중인 명령어 기억&lt;/li&gt;
&lt;li&gt;메모리 버퍼 레지스터(MBR): 기억장치를 출입하는 데이터, 메모리, 워드를 일시적으로 저장하는 레지스터
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버퍼: 두 장치 간 속도 차이를 극복하기 위해 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;연산장치(ALU: Arithmetic &amp;amp; Logic Unit)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;누산기(Accumulator): 연산 결과를 일시적으로 저장, 연산의 중심&lt;/li&gt;
&lt;li&gt;플래그 레지스터(Flag Register): 제어논리장치(CLU)와 산술논리장치(ALU)의 실행순서를 제어하기 위해 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;PSW: 시스템 내부 순간&amp;nbsp;상태 및 상황이 기록된 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;레지스터: 새로운 데이터가 전송되면 기존 데이터는 삭제
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로그램 카운터(PC): 다음에 실행할 명령어 기억&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;마이크로프로세서: CPU에 해당하는 부분을 하나의 대규모 집적 회로의 칩에 내장시켜 기능을 수행하는 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능: 제어 기능(제어장치), 산술 및 논리 연산(연산장치), 기억 기능(레지스터)&lt;/li&gt;
&lt;li&gt;RISC: 메모리에 대한 엑세스는 LOAD와 STORE만으로 한정&lt;/li&gt;
&lt;li&gt;RISC, CISC의 차이: RISC는 레지스터가 많고, 프로그래밍 복잡, 그 외는 모두 작고 간단하고 빠름&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;명령어 실행 동작 단계
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인출(Fetch) &amp;rarr; 간접(Indirect) &amp;rarr; 실행(Execute) &amp;rarr; 인터럽트(Interrupt)&lt;/li&gt;
&lt;li&gt;Fetch Cycle &amp;rarr; Instruction Decoding Cycle &amp;rarr; 명령어 실행 단계 &amp;rarr; Write-Back 작업
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Fetch Cycle: 명령어 실행 완료 후 다음에 실행할 명령을 기억장치로부터 가져오는 동작을 완료할 때까지의 주기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 논리회로&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;드모르강 법칙:&amp;nbsp; &lt;span style=&quot;text-decoration: overline;&quot;&gt;(A+B) &lt;/span&gt;= &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;&amp;sdot;&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt;,&amp;nbsp; &lt;span style=&quot;text-decoration: overline;&quot;&gt;(A&amp;sdot;B) &lt;/span&gt;= &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;+&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;반가산기: 1Bit짜리 2진수 2개(A, B)를 덧셈한 합(S)과 자리올림수(C)를 구하는 조합논리회로
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S(Sum) = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;B+A&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt; = A&amp;oplus;B, C(Carry)&amp;nbsp;=&amp;nbsp;A&amp;sdot;B&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;전가산기: 2개의 반가산기(HA)와 1개의 OR 게이트로 구성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S(Sum) = (A&amp;oplus;B)&amp;oplus;Ci, Co(Carry)&amp;nbsp;=&amp;nbsp;(A&amp;oplus;B)Ci&amp;nbsp;+&amp;nbsp;AB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;플립플롭(FF): 1Bit 기억장치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;RS FF: 무(0,0) / 공(0,1) / 일(1,0) / 불(1,1)&lt;/li&gt;
&lt;li&gt;D FF: 무&lt;/li&gt;
&lt;li&gt;JK FF: 무(0,0) / 공(0,1) / 일(1,0) / 보(1,1), 가장 널리 사용되는 FF&lt;/li&gt;
&lt;li&gt;T FF: 보, ON/OFF 교차 스위치&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;멀티플렉서(MUX: Multiplexer): 2^n개의 입력정보 중에서 1개를 선택하여 한 곳으로 출력&lt;/li&gt;
&lt;li&gt;디멀티플렉서(DeMUX: DeMultiplexer): 1개의 입력선으로 들어오는 정보를 2^n개의 출력선 중 1개를 선택하여 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 자료의 표현과 연산&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자료 구성 단위: 비트 &amp;lt; 니블 &amp;lt; 바이트 &amp;lt; 워드(반 &amp;lt; 전 &amp;lt; 더블) &amp;lt; 필드 &amp;lt; 레코드(논리) &amp;lt; 블록(물리) &amp;lt; 파일 &amp;lt; 데이터베이스&lt;/li&gt;
&lt;li&gt;자료의 외부적 표현
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BCD(2진화 10진 코드): 10진수 각 자리를 4자리의 2진수로 표현하는 코드(6Bit = Zone 2Bit + Digit 4Bit)&lt;/li&gt;
&lt;li&gt;ASCII: 통신 제어용 및 마이크로컴퓨터 기본 코드(7Bit = Zone 3Bit + Digit 4Bit)&lt;/li&gt;
&lt;li&gt;EBCDIC: 대형 컴퓨터에서 사용(8Bit = Zone 4Bit + Digit 4Bit)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;기타 자료의 표현
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Gray Code: 연속되는 2개의 숫자를 표현한 코드에서 한 개의 비트를 변경 &amp;rarr; 새로운 코드, 아날로그-디지털 변환, 데이터 전송에서 주로 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2진수 &amp;rarr; Gray Code: 첫 번째 그대로, 두 번째부터 그전 진수와 XOR 연산(ㄱ 형태)&lt;/li&gt;
&lt;li&gt;Gray Code &amp;rarr; 2진수: 첫번째 그대로, 두 번째부터 그전 결과값과 XOR 연산(2 형태)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;패리티 검사 코드: 1Bit의 패리티 체크 비트를 추가하여 1Bit의 오류만 검출
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;우수(Even) 패리티는 1인 Bit의 개수가 짝수&lt;/li&gt;
&lt;li&gt;기수(Odd) 1인 Bit의 개수가 홀수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;해밍 코드(Hamming Code): 오류를 스스로 검출하여 교정이 가능한 코드, 2Bit의 오류를 검출할 수 있고, 1Bit의 오류를 교정 가능&lt;/li&gt;
&lt;li&gt;2-out-of-5: 정마크(정스페이스) 방식으로 오류 검출&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;진수 변환
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10진수 &amp;rarr; 2, 8, 16진수: 10진수의 정수 부분은 변환하려는 진수로 나누어지지 않을 때까지 나누어 나머지를 역순으로 나열&lt;/li&gt;
&lt;li&gt;2, 8, 16진수 &amp;rarr; 10진수: 정수 부분과 소수 부분을 나누어 변환하려는 각 진수의 자릿값과 자리의 지수승을 곱한 결과값을 모두 더하여 계산&lt;/li&gt;
&lt;li&gt;2진수 &amp;rarr; 8, 16진수: 8진수로 변환 시 3자리 씩, 16진수로 변환 시 4자리씩 10 진수로 변환 (2진수 -&amp;gt; 10진수)&lt;/li&gt;
&lt;li&gt;8, 16진수 &amp;rarr; 2진수: 8진수를 변환 시 1자리를 2진수 3자리로, 16진수를 변환 시 1자리를 2진수 4자리로 변환 (10진수 -&amp;gt; 2진수)&lt;/li&gt;
&lt;li&gt;8진수 &amp;harr; 16진수: 2진수로 변환 후 원하는 진수로 변환(8 &amp;harr; 2 &amp;harr; 16)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2진 연산
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10진수의 전체 값을 2진수로 변환, 첫 번째 Bit를 부호로 사용 (양수=0, 음수=1)&lt;/li&gt;
&lt;li&gt;부호화 절대치: 음수의 절대값(10진수)을 2진수로 표현한 후 부호 비트(첫 번째 Bit)만 1로 변경&lt;/li&gt;
&lt;li&gt;부호화 1의 보수 방식: 음수의&amp;nbsp;절대값(10진수)을 2진수로 표현한 후 1의 보수로 변환&lt;/li&gt;
&lt;li&gt;부호화 2의 보수 방식:&amp;nbsp;음수의 절대값(10진수)을 2진수로 표현한 후 2의 보수로 변환(1의 보수 + 1)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;시프트 마이크로 연산의 종류: 논리 시프트, 산술 시프트, 직렬 전송 시프트, 순환 시프트(논.산.직.순)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 명령어 및 제어&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;명령어 = 연산자부(OP-Code, 1Byte) + 자료부(Operand)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연산자부(OP-Code): 명령어 형식, 데이터 종류, 작업 수행 시간은 X
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기능: 입출력 기능, 자료 전달 기능, 제어 기능, 함수 연산 기능 (입출력.자.제.함)&lt;/li&gt;
&lt;li&gt;3Bit를 사용할 때 명령어 2^3 = 8개 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;자료부(Operand): 명령어 순서, 데이터 주소&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;이항(Binary) 연산자: 피연산자가 2개 필요한 연산자(사칙연산, AND, OR, XOR, XNOR 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;주소 지정 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;암시적 주소지정방식(Implied Mode): 주소를 지정하는 필드가 없고 스택(Stack)을 이용한 주소 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스택(Stack) 삽입, 삭제: PUSH, POP&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;측치, 즉시적 주소지정방식(Immediate Mode): 주소 대신 자료를 직접 저장한 방식&lt;/li&gt;
&lt;li&gt;직접 주소지정방식(Direct Mode): 실제 데이터의 절대 주소를 저장
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;절대 주소(Absolute Address): 기억장소를 직접 숫자로 지정하는 주소, 기계어 정보를 기억&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;간접 주소지정방식(Indirect Mode): 실제 데이터의 주소를 가지고 있는 포인터의 주소를 저장&lt;/li&gt;
&lt;li&gt;상대 주소지정방식(Relative Mode): 프로그램 카운터(PC) + 주소 부분(Operand)&lt;/li&gt;
&lt;li&gt;색인&amp;nbsp;주소지정방식(Index Register): 순차적인 주소 지정에 유리, 2개의 레지스터 사용&lt;/li&gt;
&lt;li&gt;계산에 의한 주소지정방식: Operand부(주소부) + CPU의 특정 레지스터(약식주소)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;명령어 형식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;0 주소 명령어(0 Address Instruction): 기억장치에 액세스 없이 스택(Stack)을 이용한 연산&lt;/li&gt;
&lt;li&gt;1 주소 명령어(1 Address Instruction): 누산기(Accumulator)를 이용하여 명령어 처리&lt;/li&gt;
&lt;li&gt;2 주소 명령어(2 Address Instruction): 연산 결과를 Operand1에 저장하여 원래 자료 파괴&lt;/li&gt;
&lt;li&gt;3 주소 명령어(2 Address Instruction): 연산 후 입력 자료 보존, 범용 레지스터(GPR)를 가진 컴퓨터에서 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 입출력 제어 및 기억장치&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;채널(Channel): 종속적이 아닌 독립적으로 입출력 관리
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멀티플렉서(Multiplexer): 동시에 여러 개의 입출력장치를 제어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DMA(Direct Memory Access, 직접 메모리 접근): CPU의 참여 없이 입출력장치와 메모리가 직접 데이터를 주고받는 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주요 구성 요소: 인터페이스 회로, 제어 레지스터, 주소 레지스터, 데이터 카운터 레지스터, 데이터 레지스터(인,제,주,데)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;인터럽트(Interrupt): 컴퓨터 시스템에 예기치 않은 상황이 발생할 경우, 제어 프로그램에 알려 CPU가 하던 일을 멈추고 다른 작업을 처리하도록 하는 방법
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처리 루틴에서 프로그램 카운터(PC)는 반드시 사용&lt;/li&gt;
&lt;li&gt;우선순위 판별: 폴링(소프트웨어), 데이지 체인(하드웨어), 병렬 우선 처리 방식(하드웨어)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;버퍼링과 스풀링: 입출력장치와 CPU 간의 속도 차리 해결
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;버퍼링: 주기억장치, 단일작업&lt;/li&gt;
&lt;li&gt;스풀링: 보조기억장치, 다중작업&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;주기억장치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ROM(Read Only Memory, 롬): 기억된 내용을 읽을 수만 있고, 비휘발성 메모리&lt;/li&gt;
&lt;li&gt;RAM(Random Access Memory, 램): 읽고 쓸 수 있는 기억장치, 휘발성 메모리&lt;/li&gt;
&lt;li&gt;캐시 메모리(Cache Memory): CPU와 주기억장치 사이 속도 차이를 해결하기 위해 사용, 가격이 고가&lt;/li&gt;
&lt;li&gt;EPROM(Erasable PROM): 자외선을 이용하여 메모리를 지우고 Write로 다시 프로그램을 입력 가능&lt;/li&gt;
&lt;li&gt;어드레스(Address): 기억장치의 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;보조기억장치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;트랙(Tack): 원판형 자기 디스크 장치에서 하나의 원으로 구성된 기억 공간, 원판형을 따라 동심원으로 나눈 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용 가능한 트랙의 수 = 사용 가능한 실린더의 수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;워드(Word)의 수: 트랙 수 X 트랙당 섹터 수 X 섹터당 워드 수 X 면 수 (양면 디스트: 2)&lt;/li&gt;
&lt;li&gt;디스크 팩 기록 가능 면의 수: (디스크 팩 수 X 2) - 2 (맨 위, 맨 아래는 기록 불가)&lt;/li&gt;
&lt;li&gt;기억 용량 단위 크기 비교 : Byte &amp;lt; KB &amp;lt; MB &amp;lt; GB &amp;lt; TB &amp;lt; PB &amp;lt; EB&lt;/li&gt;
&lt;li&gt;블로킹(Blocking): 더 많은 데이터를 저장하고 처리 속도를 빠르게 하기 위하여 한 개 이상의 논리적 레코드를 묶어서 테이프에 기록
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;블록화 인수: IBG와 IBG 사이의 논리 레코드 개수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: none;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 데이터베이스 활용&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DBMS(데이터베이스 관리 시스템): 사용자와 데이터베이스 사이에 위치하여 DB 관리, 사용자의 요구에 따라 정보를 생성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;필수 기능: 데이터 구조 정의, 데이터 조작, 데이터 제어 (정.조.제)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제어 기능: 데이터의 정확성과 보안성을 유지하기 위한 무결성, 보안 및 권한 검사, 병행 제어 등의 기능을 정의&lt;/li&gt;
&lt;li&gt;조작 기능: 사용자와 데이터베이스 사이의 인터페이스를 위한 수단을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;데이터베이스 설계 단계: 요구사항 분석 &amp;rarr; 개념적 설계 &amp;rarr; 논리적 설계 &amp;rarr; 물리적 설계 &amp;rarr; 구현 (개.논.물)&lt;/li&gt;
&lt;li&gt;스키마(Schema)의 구분: 개념 스키마, 외부 스키마, 내부 스키마 (개.외.내)&lt;/li&gt;
&lt;li&gt;기수(Cardinality): 튜플(Tuple)의 개수&lt;/li&gt;
&lt;li&gt;차수(Degree): 속성(Attribute)의 개수&lt;/li&gt;
&lt;li&gt;도메인(Domain): 하나의 속성 또는 필드에서 나타낼 수 있는 값의 범위&lt;/li&gt;
&lt;li&gt;폼(Form): 그래픽 화면을 사용한 입출력 틀&lt;/li&gt;
&lt;li&gt;트랜잭션(Transaction): 데이터베이스에 대한 일련의 처리를 하나로 모은 작업 단위&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. SQL 활용&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DDL(데이터 정의어): CREATE, ALTER, DROP
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SELECT 문 DISTICT: 중복되지 않고 검색&lt;/li&gt;
&lt;li&gt;DROP 문 RESTRICT: 제거할 요소가 참조 중이면 제거하지 않음&lt;/li&gt;
&lt;li&gt;DROP 문 CASCADE: 제거할 요소를 참조하는 다른 개체도 함께 제거&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;DML(데이터 조작어): SELECT, INSERT, UPDATE, DELETE&lt;/li&gt;
&lt;li&gt;DCL(데이터 제어어): COMMIT, ROLLBACK, GRANT, REVOKE&lt;/li&gt;
&lt;li&gt;VIEW: 기본 테이블로 만들어지는 가상 테이블, 필요한 데이터만 정의하기 때문에 관리가 용이하고 명령문이 간단해짐&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;8. 스프레드시트와 프레젠테이션&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스프레드시트: 수치 계산과 관련된 업무에 효율적
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;셀(Cell): 특정 열과 행이 교차하면서 만들어진 사각형 영역, 기본 입력 단위&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;프레젠테이션: 효과적으로 의미와 의사를 전달(소개, 회의, 발표)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슬라이드(Slide): 하나의 화면 단위&lt;/li&gt;
&lt;li&gt;개체(Object): 하나의 화면을 구성하는 개개의 요소&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;9. 운영체제의 개요&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OS: 하드웨어 장치와 응용 프로그램 중간에 위치, 컴퓨터 시스템을 제어하고 관리, 에러 처리 가능&lt;/li&gt;
&lt;li&gt;운영체제의 성능 평가 항목 (반.사.처.신)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반환 시간(Turnaround Time): 작업을 제시하고 결과를 받을 때까지의 경과 시간&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사&lt;/b&gt;용 가능도(Availability): 필요할 때 즉시 사용&amp;nbsp;가능한 정도&lt;/li&gt;
&lt;li&gt;처리 능력(Throughout): 일정 시간 내에 시스템이 처리하는 일의 양(can process within a given time)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;신&lt;/b&gt;뢰도(Reliability): 주어진 문제를 정확하게 해결하는 정도&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;운영체제 발달 순서: 단일 처리 -&amp;gt; 일괄 처리 -&amp;gt; 다중 프로그래밍 -&amp;gt; 시분할 -&amp;gt; 다중 처리 -&amp;gt; 실시간 처리 -&amp;gt; 범용 시스템 -&amp;gt; 분산 처리 (단.일.프.시.다.실.범.분)&lt;/li&gt;
&lt;li&gt;시분할 시스템(Time Sharing System): 하나의 컴퓨터를 여러 사용자가 동시에 공동 이용하여 마치 혼자서 컴퓨터를 독점하고 있는 것처럼 사용&lt;/li&gt;
&lt;li&gt;제어 프로그램(Control Program): (감.작.데)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;감시 프로그램(Supervisor Program): 프로그램 실행과 시스템 작동 상태를 감시, 감독하는 프로그램&lt;/li&gt;
&lt;li&gt;작업 제어 프로그램(Job Control Program): 작업의 연속 처리를 위한 스케줄 및 시스템 자원 할당&lt;/li&gt;
&lt;li&gt;자료(데이터) 관리 프로그램(Data Management Program): 시스템에서 취급하는 파일과 데이터를 표준적인 방법으로 처리할 수 있도록 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;처리 프로그램(Processing Program)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;언어 번역 프로그램(Language Translate&amp;nbsp;Program): 원시 프로그램을 기게어로 번역&lt;/li&gt;
&lt;li&gt;서비스 프로그램(Service Program): 사용자의 편의를 위해 시스템 제공자가 미리 작성하여 사용자에게 제공해 주는 프로그램
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;링커(Linker), 연결 편집기(Linkage Editor), 정렬/합병 프로그램(Sort/Merge Program), 라이브러리안(Librarian), 유틸리티 프로그램(Utility Program), 로더(Loader)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로더(Loader, Module Loader): 보조기억장치로부터 주기억장치에 적재하는 프로그램 (프로그램 수행 순서 결정 X)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;할당(Allocagtion) -&amp;gt;&amp;nbsp;링킹(Linking)&amp;nbsp;-&amp;gt; 재배치(Relocation) -&amp;gt; 적재(Loading) (할.링.재.적)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;프로세스: 실행 중인 프로그램을 정의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;준비(Ready): CPU를 할당받기만 하면 바로 실행할 수 있는 상태&lt;/li&gt;
&lt;li&gt;디스패치(Dispatch): 준비 상태에서 대기하고 있는 프로세스 중&amp;nbsp;우선순위가 가장 높은 프로세스가 CPU를 할당받아 실행 상태로 전이되는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;스케줄링(Scheduling)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스케줄러(Sheduler): 프로세서를 생성, 실행, 중단, 소멸&lt;/li&gt;
&lt;li&gt;비선점(Non-preemptive) 스케줄링
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FIFO: 가장 먼저 CPU를 요청한 프로세스에게 가장 먼저 할당하여 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;선점(Preemptive) 스케줄링
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SRT(Shortest Remaining Time): 현재 실행 중인 프로세스와 새로 도착한 프로세스 중 짧은 실행 시간을 가진 프로세스에게 CPU를 할당&lt;/li&gt;
&lt;li&gt;RR(Round Robin): 특정한 시간 조각(Slice)을 미리 정의하여 각 프로세스에 CPU를 제공&lt;/li&gt;
&lt;li&gt;다단계 큐: 프로세스를 특정 그룹으로 분류할 수 있을 경우, 그룹마다 준비상태 큐를 사용하는 기법&lt;/li&gt;
&lt;li&gt;다단계 피드백 큐: 준비상태 큐에 들어간 프로세스가 다른 그룹의 준비상태 큐로 이동할 수 없는 다단계 큐 기법에서 이동할 수 있도록 개선한 기법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;페이지 교체(Page Replacement, 페이지 대체) 전략
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LRU(Least Recently&amp;nbsp;Used): 가장 오래&amp;nbsp;참조되지 않은&amp;nbsp;페이지를 교체&lt;/li&gt;
&lt;li&gt;LFU(Least Frequently Used):&amp;nbsp;사용 빈도가 가장 적은&amp;nbsp;페이지를 교체&lt;/li&gt;
&lt;li&gt;NUR(Not Used Recently): 최근에 사용하지 않은 페이지를 교체하는 기법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;교착 상태(Dead Lock): 하나 또는 그 이상의 프로세서가 가능하지 못한 특정 사건(Event)을 무한정 기다리는 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;10. DOS&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용 가능한 파일 시스템: 일반 파일, 디렉터리 파일, 특수 파일&lt;/li&gt;
&lt;li&gt;포매팅(Formatting): 섹터(sector)를 나눠 데이터를 저장할 수 있도록 디스크를 초기화&lt;/li&gt;
&lt;li&gt;부팅
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 읽는 순서: IO.SYS &amp;rarr; MSDOS.SYS &amp;rarr; CONFIG.SYS &amp;rarr; &lt;a href=&quot;http://COMMAND.COM&quot;&gt;COMMAND.COM&lt;/a&gt; &amp;rarr; AUTOEXET.BAT (I.M.C.C.A)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;부팅 시 필수적인 파일: IO.SYS, MSDOS.SYS, &lt;a href=&quot;http://COMMAND.COM&quot;&gt;COMMAND.COM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CONFIG.SYS: 설정 파일(필수 아님)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반드시 루트 디렉터리에 위치해야 실행 가능&lt;/li&gt;
&lt;li&gt;BREAK=ON: Ctrl + C, Ctrl + Break 의한 작업중지 명령 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;웜 부팅(Warm Booting): Ctrl + Alt + Delete&lt;/li&gt;
&lt;li&gt;콜드 부팅(Cold Booting): 전원 스위치, Reset 버튼&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 명령어: CLS,&amp;nbsp;VER,&amp;nbsp;VOL,&amp;nbsp;DATE,&amp;nbsp;TIME,&amp;nbsp;PROMPT,&amp;nbsp;DIR,&amp;nbsp;COPY, MD, CD, RD, TYPE, DEL 등
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;COMMAN.COM에서 처리하는 명령어, 프롬프트 상태에서 언제든지 사용 가능&lt;/li&gt;
&lt;li&gt;DIR/W: 가장 많은 파일을 표현&lt;/li&gt;
&lt;li&gt;DIR/S: 하위 디렉터리의 정보까지 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;외부 명령어: ATTRIB, FORMAT, CHKDSK, FDISK, LABEL, SCANDISK, DISKCOPY, XCOPY, SORT, SYS 등
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNDELETE: 삭제된 파일을 복구&lt;/li&gt;
&lt;li&gt;FIND: 하나 또는 여러 개의 파일에서 특정한 문자열 검색&lt;/li&gt;
&lt;li&gt;FDISK: 하드디스크를 논리적으로 여러 개의 디스크로 나누어(파티션 설정) 각 볼륨이 서로 다른 별개의 드라이브로 동작하도록 설정&lt;/li&gt;
&lt;li&gt;DEFRAG: 단편화되어 있는 파일의 저장 상태를 최적화하여 디스크가 작동 효율을 높임&lt;/li&gt;
&lt;li&gt;CHKDSK: 디스크의 상태를 점검&lt;/li&gt;
&lt;li&gt;SCANDISK: 미미한 오류를 수정&lt;/li&gt;
&lt;li&gt;LASTDRIVE: 사용할 수 있는 드라이브의 최대 수 지정&lt;/li&gt;
&lt;li&gt;ATTRIB/-H: 감추어진(Hidden) 파일 속성 해제&lt;/li&gt;
&lt;li&gt;ATTRIB/-R: 읽기 전용(Read Only) 속성 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;11. WINDOWS&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MS-DOS에서 멀티태스킹과 GUI 환경을 제공하기 위한 응용 프로그램, 32, 64비트 지원, 255자의 긴 파일 이름 지원&lt;/li&gt;
&lt;li&gt;사용 가능한 파일 시스템: FAT, NTFS&lt;/li&gt;
&lt;li&gt;구성 요소
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제어판: 컴퓨터의 프로그램과 하드웨어에 항목 표시 및 설정 가능(국가, 마우스, 키보드 등)&lt;/li&gt;
&lt;li&gt;탐색기: 컴퓨터 내용, 폴더 계층 및 파일을 볼 수 있음, 아이콘 방식은 큰, 보통, 작은, 목록, 자세히(그룹 정렬 X)&lt;/li&gt;
&lt;li&gt;메모장: 특수 문자 입력 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;플러그 앤 플레이(Plug &amp;amp; Play): 주변장치를 장착하면 스스로 장치를 인식하는 방식&lt;/li&gt;
&lt;li&gt;디스크 조각 모음: 디스크를 효과적으로 사용하기 위해 파일을 정리하는 기능&lt;/li&gt;
&lt;li&gt;디스크 포맷 형식: 전체, 빠른 포맷, 시스템 파일만 복사&lt;/li&gt;
&lt;li&gt;단축키
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;연속된 파일 선택: Shift, 연속되지 않은 파일 선택: Ctrl&lt;/li&gt;
&lt;li&gt;한 번에 삭제하기(휴지통 X): Shift + Delete&lt;/li&gt;
&lt;li&gt;클립 코드 복사: Ctrl + C&lt;/li&gt;
&lt;li&gt;실행창: Window + R&lt;/li&gt;
&lt;li&gt;전원 버튼 클릭: [절전], [시스템 종료], [다시 시작] 메뉴 표기&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;12. UNIX&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C 언어로 구성되어 있기 때문에 이식성이 높음, 파일 시스템은 계층적 트리 구조, 멀티 유저, 멀티태스킹 가능&lt;/li&gt;
&lt;li&gt;사용 가능한 파일 시스템: UFS(Unix File System)&lt;/li&gt;
&lt;li&gt;구성 요소: 커널(Kernel) - 관리&amp;amp;전송&amp;amp;변환, 쉘(Shell) - 명령어 해석기, 유틸리티(Utility, File System) - 응용 프로그램
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;커널(Kernel): 기초적인 시스템 기능을 담당, 태스크 스케줄링(Task Scheduling), 기억장치 관리, 보안 책임&lt;/li&gt;
&lt;li&gt;쉘(Shell): Korn Shell, Bourne Shell, C Shell (K.B.C)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;파일 소유권
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소유자 u, 그룹 사용자 g, 기타 사용자 o&lt;/li&gt;
&lt;li&gt;소유자만 파일 수정: chmod go-w 파일명 &amp;rarr; 그룹 사용자, 기타 사용자 권한 취소&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;명령어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;finger: 현재 시스템에 등록되어 있는 사용자의 정보 조회&lt;/li&gt;
&lt;li&gt;who: 현재 로그인 중인 사용자 정보 출력(단말기명, 단말기 번호, 로그인명, 로그인 일시 등, 사용 소프트웨어 X)&lt;/li&gt;
&lt;li&gt;pwd: 현재 작업을 진행 중인 디렉터리 표시&lt;/li&gt;
&lt;li&gt;ls: 현재 작업 중인 디렉터리의 모든 파일 출력, DOS의 DIR과 같은 역할
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일 종류(b.c.d.l): b(블록형 특수 파일), c(문자형 특수 파일), d(디렉터리), l(링크 파일)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;rm: 파일 삭제&lt;/li&gt;
&lt;li&gt;:wq: VI에서 편집기 내용을 저장하고 종료&lt;/li&gt;
&lt;li&gt;fork: 새로운 프로세스 호출, 프로세스 생성&lt;/li&gt;
&lt;li&gt;pipe: 앞 명령어의 출력 결과를 뒤 명령어의 입력으로 받음&lt;/li&gt;
&lt;li&gt;ping: 네트워크상의 문제를 진단&lt;/li&gt;
&lt;li&gt;kill: 현재 실행 중인 프로세스 종료, 한 줄 전체를 지움&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;13. 정보 통신의 개요&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 전송계: 단말장치(DTE), 데이터 전송 회신(신호 변환장치(DCE), 통신 회선), 통신 제어장치(CCU)&lt;/li&gt;
&lt;li&gt;데이터 처리계: 컴퓨터 장치&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;14. 정보 전송 회신&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신 회선
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전기적인 1차 정수: 저항(R), 정전용량(C), 인덕턴스(L), 누설 컨덕턴스(G)&lt;/li&gt;
&lt;li&gt;전송 선로의 무왜곡 조건: RC = LG&lt;/li&gt;
&lt;li&gt;동축 케이블: 중앙 내부에 구리 심선과 원통형 외부 도체로 구성되어 있고 그 사이에 절연물로 채워져 있는 전송 매체&lt;/li&gt;
&lt;li&gt;광섬유 케이블: 장거리 대용량 전송, 도청하기 어려워 높은 보안성, 잡음 영향 X
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;손실: 접속 손실, 산란 손실, 흡수 손실 (유전체 손실 X)&lt;/li&gt;
&lt;li&gt;광통신: 발광기(레이저 다이오드), 수광기, 광심선
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빛의 특성: 전반사&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;통신 속도
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송 속도 기본 단위: bps&lt;/li&gt;
&lt;li&gt;변조 속도 = 신호 속도 / 변조&amp;nbsp;시 상태 변화 비트 수&lt;/li&gt;
&lt;li&gt;신호 속도 = 변조 속도 X 변조 시 상태 변화 비트 수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;통신 용량
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;C(통신 용량) = W(대역폭) &amp;middot; log2(1+S(신호 전력)/N(잡음 전력))[bps]
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S/N: 신호에 대한 잡음의 비율&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;통신 용량을 늘리기 위한 방법: 주파수 대역폭 &amp;uarr;, 신호 세력 &amp;uarr;, 잡음 세력 &amp;darr;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;15. 정보 전송 방식&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;반이중(Half-Duplex) 통신: 양방향 전송이 가능하지만 동시 전송 불가&lt;/li&gt;
&lt;li&gt;전이중(Full-Duplex) 통신: 양방향 동시 전송 가능&lt;/li&gt;
&lt;li&gt;아날로그 변조
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주파수 변조(FM: Frequency Modulation): 변조 파형에 따라 주파수를 변조하는 방식&lt;/li&gt;
&lt;li&gt;전폭 변조(AM: Amplitude Modulation): 피크 투 피크(Peak to Peak) 전압이 변하는 형태&lt;/li&gt;
&lt;li&gt;위상 변조(PM: Phase Modulation): 4개 위상 &amp;rarr; 4 = 2^2 &amp;rarr; 2비트 전송 가능 / 8개 위상 = 8 = 2^3 &amp;rarr; 3비트 전송 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;펄스 코드 변조(PCM)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;송신 측: 표본화(Sampling), 양자화(Quantizing), 부호화(Encoding) (표,양,부)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;양자화(Quantizing): PCM 방식에서 PAM 신호를 허용된 몇 단계의 레벨 값으로 근사화시키는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;수신 측: 복호화(Decoding), 여과화(Filtering) (복,여)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;전송 제어 절차: 회선 연결 &amp;rarr; 링크 확립 &amp;rarr; 메시지 전달 &amp;rarr; 링크 단절 &amp;rarr; 회선 단절&lt;/li&gt;
&lt;li&gt;오류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;누화, 혼선(Cross Talk Noise): 전기적 결합에 의하여 서로 다른 회선에 영향을 주는 현상&lt;/li&gt;
&lt;li&gt;충격성 잡음(Impluse Noise): 회선 접촉 불량에 의해 발생, 순간적으로 일어나는 높은 전력의 잡음&lt;/li&gt;
&lt;li&gt;ARQ(자동 반복 요청): 에러를 검출하여 재전송을 요구하는 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정지-대기(Stop-and-Wait) ARQ: 매 블록마다 ACK와 NAK로 응답&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;16. 정보 통신 설비&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단말장치(DTE): 원격지에 설치된 입출력 장치&lt;/li&gt;
&lt;li&gt;모뎀(MODEM): 디지털 &amp;harr; 아날로그, 원거리 전송&lt;/li&gt;
&lt;li&gt;주파수 분할 다중화기(FDM: Frequency Division Multiplexer)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;가드 밴드(Guard&amp;nbsp;Band): 각 채널 간 간섭을 막기 위하여 일종의 완충지역 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;시분할 다중화기(TDM: Time Division Multiplexer)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동기식 다중화기(STDM): 모든 단말기에 균등한 시간 폭을 제공&lt;/li&gt;
&lt;li&gt;비동기식 다중화기(ATDM): 전송할 데이터가 있는 단말기에만 시간 폭을 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RS-232C: 25핀으로 구성된 커넥터
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2: 송신 데이터, 3: 수신 데이터, 4: 송신 요청, 5: 송신 준비 완료&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;X.25: 패킷 전송(패킷형 터미널)을 위한 DTE/DCE 접속 규격&lt;/li&gt;
&lt;li&gt;X.75: 서로 다른 패킷 교환명 간의 상호 연결을 위한 규칙을 정의한 표준&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;17. 통신 프로토콜&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로토콜: 두 개의 컴퓨터 시스템 사이에서 정보 교환을 위하여 사용되는 규칙
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기본 요소: 구문(Syntax), 의미(Semantics), 시간(Timing) (처리 X)&lt;/li&gt;
&lt;li&gt;종류: DDCMP, BSC, HDLC
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BSC: SYN, SOH, STX, ETX, ETB, EOT, ENQ, DLE, ACK, NAK
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ETX(End of TeXt):&amp;nbsp;본문(텍스트)의 종료, 최종 블록에 들어갈 문자&lt;/li&gt;
&lt;li&gt;ACK(ACKnowlege):&amp;nbsp;수신된&amp;nbsp;메시지에 대한 긍정 응답&lt;/li&gt;
&lt;li&gt;NAK(Negative AcKnowlege): 수신된 메시지에 대한 부정 응답&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OSI 7계층
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하위 계층(물.데.네)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물리 계층: 전송에 필요한 장치 간의 실제 접속과 절단, 기계적, 전기적, 기능적, 절차적 특성을 정의&lt;/li&gt;
&lt;li&gt;데이터 링크 계층: 두 개의 인접한 개발 시스템 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 함(논리 링크 제어: LLC, 매체 접근 제어: MAC)&lt;/li&gt;
&lt;li&gt;네트워크 계층: 네트워크 경로 배정, 중계 기능, 네트워크 어드레싱 담당&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;상위 계층(전.세.표.응)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송 계층: 안전하고 신뢰성 있는 전송을 위해 송, 수신 측에 논리적인 연결 통로를 만듦, 오류 검출, 흐름 제어, 혼잡 제어 기능(TCP, UTP 등)&lt;/li&gt;
&lt;li&gt;세션 계층: 계체들 간의 관련성을 유지하고 대화 제어를 담당&lt;/li&gt;
&lt;li&gt;표현 계층: 응용 계층과 세션 계층에 맞게 코드 변환(암호화, 해독)&lt;/li&gt;
&lt;li&gt;응용 계층: 사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스를 제공(SMTP, SNMP, FTP, TELNET 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;HDLC(High-level Data Link Control): 플래그, 주소부, 제어부, 정보부, 검색부(FCS), 플래그 (주.제.정.검)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제어부: I, S, U 프레임으로 구별&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;18. 정보 통신망&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 접속 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CDMA(코드 분할 다중 접속): 대역 확산(Spread Spectrum) 기술을 이용한 다원 접속 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;네트워크 장비
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;라우터(Router): 인터넷에서 패킷의 경로 설정 역할&lt;/li&gt;
&lt;li&gt;NAT: 사설 IP를 고정 IP에 할당 및 연결하기 위해 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;정보 교환망
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;패킷 교환망, 메시지 교환망, 회선 교환망(패.메.회)&lt;/li&gt;
&lt;li&gt;패킷 교환 방식: 주로 공중 데이터 교환망(PSDN)에서 사용, 디지털 전송에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;정보 통신망
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LAN(Local Area Network): 일정 지역 내(광역X)에서 고속 전용 회선으로 연결하여 자원을 공유하는 네트워크 형태&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;망의 형태
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성형(Star, 중앙 집중형): 시스템 운영 조직 간단&lt;/li&gt;
&lt;li&gt;계층형(Tree, 분산형): 신속하고 효율적, 독립적 장애, 자원의 공유&lt;/li&gt;
&lt;li&gt;망형(Mesh): 노드의 수가 n개일 때, n(n-1)/2개의 회선 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;인터넷
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IPv4: 8비트씩 4부분, 총 32비트, Broadcast를 대체하여 Multicast 사용&lt;/li&gt;
&lt;li&gt;IPv6: 16비트씩 8부분, 총 128비트&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;19. 기타&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;금지(Inhibit) 회로: 1입 입력되는 동안은 출력이 1이 되지 않음(X = AB&lt;span style=&quot;text-decoration: overline;&quot;&gt;C&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;ARP: IP 주소를 MAC 주소로 변환하는 프로토콜&lt;/li&gt;
&lt;li&gt;프로세스 스케줄링: 기억장치가 아닌 CPU 관리를 위한 운영체제의 주요 기능&lt;/li&gt;
&lt;li&gt;시스템 버스 종류: 제어 버스(Control Bus), 주소 버스(Address Bus), 데이버 버스(Data Bus)&lt;/li&gt;
&lt;li&gt;연관 기억장치의 구성 요소: 검색 자료 레지스터, 키(마스크) 레지스터, 매치 레지스터(일치 지시기)&lt;/li&gt;
&lt;li&gt;IP 주소 198.0.46.201 &amp;rarr; 198로 시작 &amp;rarr; Class C &amp;rarr; 기본 마스크 255.255.255.0&lt;/li&gt;
&lt;li&gt;매핑: 논리적 주소에서 물리적 주소 또는 다른 논리적 주소로 번역&lt;/li&gt;
&lt;li&gt;블루투스(Bluetooth)의 IEEE 표준 규격: 802.15&lt;/li&gt;
&lt;li&gt;페렌티(Ferranti) 현상: 수단이 개방된 선로에서 수단 전압이 송단 전압보다 커지는 현상&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>요약본</category>
      <category>자격증</category>
      <category>정보처리기능사</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/465</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-%EC%9A%94%EC%95%BD%EB%B3%B8-%EC%9D%B4%EA%B2%83%EB%A7%8C-%EC%99%B8%EC%9A%B0%EB%A9%B4-%EB%90%A9%EB%8B%88%EB%8B%A4#entry465comment</comments>
      <pubDate>Mon, 14 Apr 2025 17:01:35 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 19. 뉴미디어와 멀티미디어</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-19-%EB%89%B4%EB%AF%B8%EB%94%94%EC%96%B4%EC%99%80-%EB%A9%80%ED%8B%B0%EB%AF%B8%EB%94%94%EC%96%B4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;뉴미디어&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;뉴미디어(New Media)의 개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;최근의 정보 통신 기술의 발달로 새롭게 개발된 다양항 매체들을 의미&lt;/li&gt;
&lt;li&gt;정보를 주고받는 대화 형식의 상호 통신이 가능항 쌍방향성&lt;/li&gt;
&lt;li&gt;특정 계층을 목표로 한 탈대중화, 지역적 공간과 시간에 구애받지 않는 광대역성, 비동시성&lt;/li&gt;
&lt;li&gt;기존에 미디어와 융합되어 발전, 반도체와 디지털 기술의 발전으로 정보 교환의 고속화와 대용량화, 정보 형태의 다양화와 다채널화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;뉴미디어의 분류&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;유선계&lt;/b&gt;: 비디오텍스, CATV, VRS(Video Response System, 화상 응답 시스템), 원격 회의(Teleconference), ARS(Automatic Response System, 자동 응답 시스템), 텔레비전 전화, 팩시밀리, 파스널 컴퓨터 통신, LAN, VAN, ISDN 등&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무선계&lt;/b&gt;: 위성 통신, 텔레텍스트, HDTV, PCM 음성 방송, 팩시밀리 방송, 개인 휴대 통신 등&lt;/li&gt;
&lt;li&gt;&lt;b&gt;패키지계&lt;/b&gt;: 비디오 디스크, 디지털 오디오 디스크, VTR, 광 디스크 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;비디오텍스(Videotex)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각종 정보를 모아 DB를 구축하고, &lt;span style=&quot;color: #ee2323;&quot;&gt;전화망을 통해 TV나 단말장치에  연결&lt;/span&gt;하여 필요한 정보를 검색할 수 있는 서비스&lt;/li&gt;
&lt;li&gt;대화형 양방향 미디어로서, 요구하는 정보를 즉시 제공받을 수 있음&lt;/li&gt;
&lt;li&gt;정보 검색, 거래 처리, 메시지 전달, 예약 업무, 원격 감시 서비스 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CATV(CAtle TeleVision)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;난시청 해소를 목적으로 설치했던 공동 시청 안테나를 이용하여 수신한 TV 신호를 일정한 전송로를 통하여 사용자에게 제공&lt;/li&gt;
&lt;li&gt;다채널로서 방송뿐만 아니라 종합 정보 서비스가 가능&lt;/li&gt;
&lt;li&gt;전송로는 동축 케이블이나 광섬유 케이블을 사용&lt;/li&gt;
&lt;li&gt;기존 TV와 방송 방식이 동일하여 기존 TV를 단말장치로 사용 가능하며, &lt;span style=&quot;color: #ee2323;&quot;&gt;기존 TV 방송보다 채널 수가 많음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CATV 시스템의 기본 구성&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;헤드 엔드(Head-End)&lt;/b&gt;&lt;/span&gt;: Cable Head와 Antenna End의 합성어로 시스템 전체를 제어하고 신호를 전송로에 송출하기 위한 모든 설비&lt;/li&gt;
&lt;li&gt;&lt;b&gt;중계 전송망(전송로)&lt;/b&gt;: 헤드엔드에서 송출된 신호를 각 가입자의 단말기까지 전송하기 위한 통로&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가입자 설비(단말장치)&lt;/b&gt;: 정보를 수신하기 위한 장비&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기타 뉴미디어&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;HDTV(High Definition TV, 고품위 TV)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1,050 ~ 1,250의 주사선(기존의 TV의 2배)을 제공&lt;/span&gt;하여 선명한 화상과 양질의 음성을 제공하는 TV&lt;/li&gt;
&lt;li&gt;위성 TV 방송, TV 회의 등에서 새로운 매체의 단말장치로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;VOD(Video On Demand)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 정보의 DB를 구축하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;사용자가 요구하는 정보를 원하는 시간에 볼 수 있도록 제공&lt;/span&gt;하는 서비스&lt;/li&gt;
&lt;li&gt;정보 제공자의 선택에 의해 정보를 서비스하는 것이 아니라 사용자의 선택에 의해 정보를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;텔레매틱스(Telematics)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Telecommunication(통신)과 Informatics(정보 과학)의 합성어로 차량, 항공, 선박 등의 운송 수간 이용 중에 정보가 제공되는 무선 데이터 시스템&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;통신과 정보처리를 결합한 새로운 비전화계 단말장치에 의한 통신 서비스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;텔레미터링(Telemetering)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신망을 통해 통신 회선이 사용되지 않는 심야 시간을 이용하여 공중 및 시설 &lt;span style=&quot;color: #ee2323;&quot;&gt;시스템을 점검하는 서비스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;텔레텍스트(Teletext)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;TV 전파의 빈틈(귀선 시간)을 이용&lt;/span&gt;하여 TV 방송과 함께 문자나 도형 정보를 제공하는 문자 다중 방송&lt;/li&gt;
&lt;li&gt;일기 예보, 프로그램 안내, 방송되는 프로의 세부 설명, 교통 안내 등 방송국에서 제공하는 정보를 수신&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IPTV(Internet Protocol TV)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;초고속 인터넷 망을 이용&lt;/span&gt;하여 제공되는 양방향 방송 시스템&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시청자가 자신이 원하는 시간대에 원하는 프로그램을 볼 수 있는 서비스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;멀티미디어&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;멀티미디어(Multimedia)의 개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다중 매체라고 하며, &lt;span style=&quot;color: #ee2323;&quot;&gt;여러 가지 다양한 매체(텍스트, 그래픽, 사운드, 동영상, 애니메이션 등)를 디지털 데이터로 통합하여 전달&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;멀티미디어의 특징&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;디지털화(Digitalization)&lt;/b&gt;: 다양한 형태의 정보들을 모두 디지털 형식으로 변환하여 통합 처리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;쌍방향성(Ineractive)&lt;/b&gt;: 정보 제공자와 사용 간의 상호 작용에 의해 데이터 전달&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디선형성(Non-Linear)&lt;/b&gt;: 사용자의 선택에 따라 다양향 방향으로 데이터 처리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정보의 통합성(Integration)&lt;/b&gt;: 여러 미디어를 통합하여 처리&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;멀티미디어의 표준화&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;JPEG(Joint Photographer's Experts Group)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정지 영상 압축의 국제표준방식(정지 영상 부호화 표준)&lt;/span&gt;으로 인터넷에서 그림을 전송할 때 많이 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;압축 방식에 따른 분류&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;무손실 압축 방식&lt;/b&gt;: 압축과 복원의 과정을 거쳐도 원래의 정보를 보존할 수 있는 방식, 압축률은 낮지만 영상 품질이 좋음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;손실 압축 방식&lt;/b&gt;: 데이터에서 중복되는 내용을 제거하여 압축률을 높이는 것, 복원한 데이터가 압축 전의 데이터와 완전히 일치하지 않음 (주로 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;동영상 압축 표준&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;비디오 데이터의 압축 및 복원에는 코덱(CODEC) 기술을 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AV(Audio Visual Interleaved)&amp;nbsp;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows의 표준 동영상 파일 형식으로 Windows Media Player를 이용하여 재생하여 별도의 하드웨어 장치 없이도 재생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DV(Digital Video Interface)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Intel 사가 개발한 멀티미디어 분야의 동영상 압축 기술&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;쿽 타임(Quick Time) MOV&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Apple 사가 개발한 동영상 압축 기술로 JPEG의 압축 방식을 하용하며 Windows에서는 Quick Time for Windows를 설치해야 재생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;MPEG(Moving Picture Experts Group)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동영상 전문가 그룹에서 제정한 동영상 및 오디오 압축 기술에 대한 국제 표준 규격(손실 압축 방식 사용)&lt;/li&gt;
&lt;li&gt;MPEG-Video, MPEG-Audio, MPEG-System으로 구성&lt;/li&gt;
&lt;li&gt;MPEG-1, MPEG-2, MPEG-4, MPEG-7, MPEG-21의 규격&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ASF(Advanced Streaming Format) / WMV(Windows Media Video)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터넷을 통해 오디오, 비디오 및 생방송 수신 등을 지원하는 마이크로소프트사의 통합 멀티미디어 형식 국제 표준 규격&lt;/li&gt;
&lt;li&gt;용량이 작고, 음질이 뛰어나 주로 스트리밍 서비스를 하는 인터넷 방송국에서 사용&lt;/li&gt;
&lt;li&gt;WMV는 ASF보다 최신 버전으로, ASF와 사용하는 코덱이 다름&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DivX(Digital Video Express)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MPEG-4와 MP3를 재조합한 동영상 압축 고화질 파일 형식으로, 동영상 재생 시 소프트웨어와 코덱이 필요&lt;/li&gt;
&lt;li&gt;비표준 동영상 파일 형식이기 때문에 확장자는 AVI를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ram&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리얼 미디어라는 비디오 스트림 방식에서 사용되는 파일 포맷으로, Real Palyer를 설치해야 재생 가능&lt;/li&gt;
&lt;li&gt;실시간 전송이 가능하며, 파일을 내려받으면서 재생 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>JPEG</category>
      <category>뉴미디어</category>
      <category>동영상 압축</category>
      <category>멀티미디어</category>
      <category>정보처리기능사</category>
      <category>테이블 티비</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/464</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-19-%EB%89%B4%EB%AF%B8%EB%94%94%EC%96%B4%EC%99%80-%EB%A9%80%ED%8B%B0%EB%AF%B8%EB%94%94%EC%96%B4#entry464comment</comments>
      <pubDate>Mon, 7 Apr 2025 00:43:32 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 18. 정보 통신망</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-18-%EC%A0%95%EB%B3%B4-%ED%86%B5%EC%8B%A0%EB%A7%9D</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;망의 구성 형태&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;통신망(Communication Network)의 개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보를 전달하기 위해서 통신 규약에 의해 연결한 통신 설비의 집합&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;망의 구성 형태&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;성형(Star, 중앙 집중형)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;1128&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/txLdi/btsNaNyuBfW/f2pB75znBB5aPmrpGw5uD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/txLdi/btsNaNyuBfW/f2pB75znBB5aPmrpGw5uD0/img.png&quot; data-alt=&quot;성형(Star, 중앙 집중형)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/txLdi/btsNaNyuBfW/f2pB75znBB5aPmrpGw5uD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtxLdi%2FbtsNaNyuBfW%2Ff2pB75znBB5aPmrpGw5uD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;292&quot; data-origin-width=&quot;1160&quot; data-origin-height=&quot;1128&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;성형(Star, 중앙 집중형)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중앙에 중앙 컴퓨터가 있고, 이를 중심으로 단말장치들이 포인트 투 포인트(Point-To-Point) 방식으로 연결하는 중앙 집중식 형태&lt;/li&gt;
&lt;li&gt;각 단말장치들은 중앙 컴퓨터를 통하여 데이터를 교환&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;링형(Ring, 루프형)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;1132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/87Uc9/btsM9F9HiW1/bK0QPGkvhmJVYxkEbQwpc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/87Uc9/btsM9F9HiW1/bK0QPGkvhmJVYxkEbQwpc1/img.png&quot; data-alt=&quot;링형(Ring, 루프형)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/87Uc9/btsM9F9HiW1/bK0QPGkvhmJVYxkEbQwpc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F87Uc9%2FbtsM9F9HiW1%2FbK0QPGkvhmJVYxkEbQwpc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;285&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;1132&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;링형(Ring, 루프형)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터와 단말장치들이 서로 이웃하는 것끼리 포인트 투 포인트(Point-To-Point) 방식으로 연결시킨 형태&lt;/li&gt;
&lt;li&gt;분산 및 집중 제어가 가능하지만 단말장치의 추가/제거와 기밀 보호가 어려움&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;버스형(Bus)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;820&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pEsgL/btsM9EQo0U9/rTo82V8sTjZNFGuquFyAjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pEsgL/btsM9EQo0U9/rTo82V8sTjZNFGuquFyAjK/img.png&quot; data-alt=&quot;버스형(Bus)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pEsgL/btsM9EQo0U9/rTo82V8sTjZNFGuquFyAjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpEsgL%2FbtsM9EQo0U9%2FrTo82V8sTjZNFGuquFyAjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;215&quot; data-origin-width=&quot;1332&quot; data-origin-height=&quot;820&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;버스형(Bus)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 개의 통신 회선에 여러 대의 단말장치가 연결된 형태&lt;/li&gt;
&lt;li&gt;물리적 구조가 간단하여 단말장치의 추가와 제거가 용의하지만 통신 회선의 길이 제한이 있고 기밀 보장이 어려움&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;계층형(Tree, 분산형)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1544&quot; data-origin-height=&quot;1068&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXhzOT/btsM9H7olCL/B8FzvC5lO0wvKtSwZpacN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXhzOT/btsM9H7olCL/B8FzvC5lO0wvKtSwZpacN1/img.png&quot; data-alt=&quot;계층형(Tree, 분산형)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXhzOT/btsM9H7olCL/B8FzvC5lO0wvKtSwZpacN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXhzOT%2FbtsM9H7olCL%2FB8FzvC5lO0wvKtSwZpacN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;277&quot; data-origin-width=&quot;1544&quot; data-origin-height=&quot;1068&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;계층형(Tree, 분산형)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중앙 컴퓨터와 일정 지역의 단말장치까지는 하나의 통신 회선으로 연결되고, 이웃하는 단망장치는 일정 지역 내에 설치된 중간 단말장치로부터 다시 연결시키는 형태&lt;/li&gt;
&lt;li&gt;분산 처리 시스템을 구성하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;망형(Mesh)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;1132&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf7skq/btsNamIa8Om/hjoe8ALxfQ6puzwQeDw511/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf7skq/btsNamIa8Om/hjoe8ALxfQ6puzwQeDw511/img.png&quot; data-alt=&quot;망형(Mesh)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf7skq/btsNamIa8Om/hjoe8ALxfQ6puzwQeDw511/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf7skq%2FbtsNamIa8Om%2Fhjoe8ALxfQ6puzwQeDw511%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;285&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;1132&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;망형(Mesh)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 지점의 컴퓨터와 단말장치를 서로 연결한 형태&lt;/li&gt;
&lt;li&gt;노드의 연결성이 높기 때문에 많은 단말장치로부터 많은 양의 통신을 필요로 하는 경우에 유리&lt;/li&gt;
&lt;li&gt;모든 노드를 망형으로 연결하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;노드의 수가 n개일때, n(n-1)/2개의 회선이 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;분산 처리 시스템&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지역적으로 분산된 여러 대의 컴퓨터를 연결하여 작업을 분담하여 처리하는 방식&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;신속하고 효율적으로 처리할 수 있고 네트워크 확장 및 다양한 입력 방식의 채택이 용이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자원의 공유가 가능하며, 장애(고장) 발생 시 장애가 발생한 노드에만 국한&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;신뢰성은 높으나 보안성에 취약&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;네트워크 관련 장비&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;허브(Hub)&lt;/b&gt;: 한 사무실이나 가까운 거리의 컴퓨터들을 연결하는 장치, 각 회선을 통합적으로 관리하며 신호 증폭 기능을 하는 히피터의 역할도 포함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;리피터(Repeater)&lt;/b&gt;: 전송되는 신호가 여러 요인으로 인해 왜곡되거나 약해질 경우 원래의 신호 형태로 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다시 전송&lt;/span&gt;&lt;/b&gt;하는 역할을 수행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;디지털 신호의 장거리 전송을 위해 전송 신호를 새로 재생, 전압을 높여주는 물리적 계층의 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;브리지(Bridge)&lt;/b&gt;: LAN과 LAN을 연결하거나 LAN 안에서의 컴퓨터 그룹(세그먼트)을 연결하는 기능을 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;라우터(Router)&lt;/b&gt;: 브리지와 같이 LAN과 LAN의 연결 기능에 데이터 전송의 최적 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;경로&lt;/span&gt;&lt;/b&gt;를 선택할 수 있는 기능이 추가된 것, 서로 다른 LAN이나 LAN과 WAN의 연결도 수행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;인터넷에서 패킷의 &lt;b&gt;경로&lt;/b&gt; 설정 역할 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;게이트웨이(Gateway)&lt;/b&gt;: 프로토콜 구조가 전혀 다른 네트워크의 연결을 수행, 데이터 형식 변환, 주소 변환, 프로토콜 변환 등을 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정보 교환망&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;회선 교환망(Circuit Switched Network)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신을 원하는 두 지점을 교환기를 이용하여 물리적으로 접속시키는 방식(대표적으로 음성 전화망)&lt;/li&gt;
&lt;li&gt;데이터 전송 전에 먼저 통신망을 통한 연결 필요, 접속 후 그 통신 회선은 전용 회선에 의한 통신처럼 데이터가 전달(고정 대역 전송)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;접속에는 긴 시간이 소요되나 접속되면 전송 지연이 거의 없어 실시간 전송이 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전용 회선(Leased Line)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;송수신 간에 통신 회선이 항상 고정되어 있는 방식&lt;/li&gt;
&lt;li&gt;연결방식에는 송수신측을 일대일 독립적으로 연결하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;포인트 투 포인트(Point-To-Point)&lt;/span&gt; 방식(&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;직통 회선&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;)&lt;/span&gt;, 하나의 공유된 통신 회선에 여러 대의 단말기들을 연결하는 멀티 드롭(Multi Drop, 멀티 포인트) 방식이 존재&lt;/li&gt;
&lt;li&gt;전송 속도가 빠르고 전송 오류가 적으며 사용 방법이 간단하고 유지보수에 유리하여 업무 적용이 쉬움&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;전송할 데이터의 양이 많고 회선의 사용 시간이 많을 때 효율적&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;메시지 교환망(Message Switched Network)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;교환기가 송신 측의 메시지를 받아서 저장한 후 전송 경로를 결정하고, 수신 주소를 붙여서 전송 순서가 되면 수신 측으로 전송&lt;/li&gt;
&lt;li&gt;전송 메시지는 교환기의 기억장치에 일정 기간 동안 저장되어 검색이 가능하고 전송량이 폭수하는 경우에도 혼란 상태를 피할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;같은 내용의 메시지를 여러 곳에 전송 가능&lt;/span&gt;하며 송신 측과 수신 측이 동시에 운영 상태에 있지 않아도 됨&lt;/li&gt;
&lt;li&gt;전송 지연 시간이 매우 길며, 응답 시간이 느려 대화형 데이터 전송이나 방송망에는 부적절&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;패킷 교환망(Packet Switched Network)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메시지를 일정한 길이의 패킷으로 잘라서 전송하는 방식&lt;/li&gt;
&lt;li&gt;패킷은 장애 발생 시의 재전송을 위해 패킷 교환기에 일지 저장되었다가 전송되며 전송 후 폐기&lt;/li&gt;
&lt;li&gt;전송 시 교환기, 회선 등에 장애가 발생해도 다른 정상적인 경로를 선택하여 우회 가능&lt;/li&gt;
&lt;li&gt;수신 측에서 분할된 패킷을 재조립해야 하고 &lt;span style=&quot;color: #ee2323;&quot;&gt;전송 속도와 코드 변환이 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;하나의 회선을 여러 사용자가 공유할 수 있으므로 회선 이용률 높음&lt;/li&gt;
&lt;li&gt;응답 시간이 빠르므로 대화형 응용 가능하고 통신량의 제어를 통한 망의 안정성 향상 가능&lt;/li&gt;
&lt;li&gt;음성(아날로그) 전송보다 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 교환망을 통한 데이터(디지털) 전송에 적합&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정보 통신망&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정보 통신망의 개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;통신 설비와 컴퓨터 및 그 조직의 이용기술을 활용하여 정보를 처리, 보관하거나 전송하는 조직망&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;지리적으로 분산된 여러 컴퓨터가 특정 목적을 가지고 결합한 형태&lt;/li&gt;
&lt;li&gt;망의 규모나 운영 목적에 따라 LAN, VAN, ISDN, 위성 통신망, 이동 통신망으로 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LAN(Local Area Network, 근거리 통신망)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;광대역 통신망과는 달리 한 건물이나 일정 지역 내에서 컴퓨터나 단말장치들을 고속 전송 회선으로 연결하여 공유가 가능한 네트워크 형태&lt;/li&gt;
&lt;li&gt;단일 기관의 소유, &lt;span style=&quot;color: #ee2323;&quot;&gt;제한된 지역 내의 통신&lt;/span&gt;으로, 외부 통신망의 제약을 받지 않고 네트워크 확장이나 재배치가 쉬움&lt;/li&gt;
&lt;li&gt;오류 발생률이 낮으며, 네트워크에 포함된 자원 공유 가능&lt;/li&gt;
&lt;li&gt;공유 매체를 사용하므로 경로 선택 없이 매체에 연결된 모든 장치로 데이터를 전송 가능&lt;/li&gt;
&lt;li&gt;꼬임선, 동축 케이블, 광섬유 케이블 등 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;광대역 전송 매체&lt;/span&gt;&amp;nbsp;사용으로 고속 통신이 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;망의 구성 형태에 따라서 &lt;span style=&quot;color: #ee2323;&quot;&gt;성형, 버스형, 링형, 계층형(트리형)으로 분류(그물형 X)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CSMA(Carrier Sence, Multile Access) / CD(Collision Detection) 방식&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LAN의 매체 접근 제어(MAC: Media Access Control) 방식의 하나로 데이터 프레임을 송신하기 전에 &lt;span style=&quot;color: #ee2323;&quot;&gt;통신 회선이 사용중이면 대기, 사용 중이 아니라면 데이터 프레임을 송신하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;송신 도중 충돌이 발생하면 송신을 중지하고, 모든 노드에 충동을 알린 후 일정 시간이 지난 다음 데이터를 재송신, &lt;span style=&quot;color: #ee2323;&quot;&gt;지연 시간을 예측하기 어려움&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;전송량이 많아지면 충돌이 잦아져 채널의 이용률이 떨어지고 전송 지연 시간이 급격히 증가&lt;/li&gt;
&lt;li&gt;알고리즘(처리 기법)과 장애 처리가 간단하여 구현이 용이하고 노드 장애가 시스템 전체에 영향을 주지 않음&lt;/li&gt;
&lt;li&gt;성형 또는 버스형 LAN과 제록스(XEROX), DEC, 인텔 등에 의해 개발된 이더넷(Ethernet)에서 사용되는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;LAN의 확장형&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보화의 확산으로 LAN의 제한된 영역을 넘어 원거리 또는 다른 네트워크의 데이터 교환이 필요하여 확장형으로 구분&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;MAN(Metropolitan Area Network, 도시형 통신망)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;약 50km 반경 이내의 도시, 번화가, 대단위 아파트 단지 등을 대상으로 구성하는 통신망&lt;/li&gt;
&lt;li&gt;LAN과 WAN의 단점을 해소하기 위한 통신망&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;WAN(Wide Area Network, 광역 통신망)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로 제 3자에 의해 제공 되고 운영되는 공중망(Public Network)&lt;/li&gt;
&lt;li&gt;LAN이 여러 개 모여서 그들 간에 고속 전송이 가능한 전용 회선으로 연결된 광역 통신망&lt;/li&gt;
&lt;li&gt;가까운 거리에 있는 시스템 간에도 호스트 컴퓨터를 거쳐 비용 낭비 및 능률 저하 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;VAN(Value Added Network, 부가 가치 통신망)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기간 통신 사업자로부터 통신 회선을 임대하여&lt;/span&gt; 하나의 사설망을 구축하고 정보의 축적, 가공, 변환 처리 후 불특정 다수를 대상으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;부가 가치가 높은 서비스를 제공&lt;/span&gt;하는 통신망&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ISDM(Integrated Service Digital Network, &lt;span style=&quot;color: #ee2323;&quot;&gt;종합 정보 통신망&lt;/span&gt;)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;음성, 문자, 화상 등의 &lt;span style=&quot;color: #ee2323;&quot;&gt;다양한 서비스를 하나의(단일) 디지털 통신망으로 통합하여 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;통신 방식 및 전송로가 모두 디지털 방식으로 고속 통신이 가능하며, 확장성과 재배치성이 좋음&lt;/li&gt;
&lt;li&gt;64Kbps 1회선 교환 서비스가 기본&lt;/li&gt;
&lt;li&gt;통신망의 교환 접속 기능에는 회선 교환 방식과 패킷 교환 방식이 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;B 채널&lt;/b&gt;: 채널 속도 64Kbps로 사용자 데이터 채널(디지털 데이터, 디지털 음성)로 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;D 채널&lt;/b&gt;: 채널 속도 16, 64Kbps로 회선 제어 신호 전송이나 패킷 교환 또는 저용량의 데이터 전송에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;H 채널&lt;/b&gt;: 채널 속도 384Kbps(H0 채널), 1,536Kbps(H11 채널), 1,920Kbps(H12채널)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;ADSL(비대칭 디지털 가입자 회선, Asymmetric Digital Subscriber Line)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기존 전화선을 이용해 주파수가 서로 다른 음성 데이터(저주파)와 디지털 데이터(고주파)를 함께 보내는 방식&lt;/li&gt;
&lt;li&gt;한 전화선으로 일반 전화 통신과 데이터 통신을 모두 처리 가능&lt;/li&gt;
&lt;li&gt;전화국과 가정이 1대 1로 연결된 것으로, 고속 데이터 통신이 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다운로드 속도가 업로드 속도보다 빠름(비대칭)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;위성 통신망(Satellite Transmission)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;지상에서 쏘아 올린 &lt;span style=&quot;color: #ee2323;&quot;&gt;마이크로 주파수&lt;/span&gt;를 통신 위성을 통해 변환, 증폭한 후 다른 주파수로 지상에 송신하는 방식&lt;/li&gt;
&lt;li&gt;3 ~ 30GHz의 극초단파(SHF: Super High Frequency)의 주파수 대역 사용&lt;/li&gt;
&lt;li&gt;지구 적도면 상공에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;약 35,800Km 높이&lt;/span&gt;의 정지 궤도 상에 위치(정지 위성)하여 지구의 자전 속도로 운행&lt;/li&gt;
&lt;li&gt;대역폭이 넓어 고속, 대용량 통신이 가능하며 오류율이 적어 고품질의 정보 전송 가능, 통신 비용 저렴&lt;/li&gt;
&lt;li&gt;데이터 전송 시 반드시 통신 위성을 거쳐야 하므로 전송 지연 시간이 길고 사용 주파수가 높아질수록 기상 현상에 의한 신호의 감쇠가 심함&lt;/li&gt;
&lt;li&gt;수신용 안테나만 있으며 누구나 통신 내용을 수신할 수 있는 방송망 형태이므로 보안성에 취약&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이동 통신망&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;무선 매체와 이동성(Mobility)을 전제로 하여 사용자가 언제, 어디서, 누구에게나 정보를 송수신할 수 있도록 하는 것&lt;/li&gt;
&lt;li&gt;통신 내용에는 음성뿐만 아니라 신호, 데이터, 화상 정보 등을 모두 포함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;다중 접속 방식&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;FDMA(주파수 분할 다중 접속, Frequency Division Multiple Access)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주파수 대역을 일정 간격으로 나누어 여러 사용자가 각기 주어진 주파수 대역에 채널을 설정하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TDMA(시분할 다중 접속, Time Division Multiple Access)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주파수의 시간폭을 여러 개로 나누어서 각 시간폭에 대해 채널을 설정하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CDMA(코드 분할 다중 접속, Code Division Multiple Access)&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FDMA와 TDMA의 혼합 방식으로, 여러 사용자가 시간과 주파수를 공유하면서 서로 다른 코드를 부여한 신호를 확산하여 보내고 수신 쪽에서는 동일한 코드의 데이터만을 골라 원래 신호로 재생하는 방식&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;PCS(Personal Communication Service, 개인 휴대 통신) 시스템&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;셀룰러 시스템과 마찬가지로 셀 방식을 채택하고 CDMA 방식의 디지털 무선 접속 방식을 사용&lt;/li&gt;
&lt;li&gt;PCS와 기존의 디지털 셀룰러 이동 전화의 차이점은 주파수 대역이 다름(PCS 시스템: 1.8GHz, 셀룰러 시스템: 800MHz)&lt;/li&gt;
&lt;li&gt;PCS 시스템은 높은 주파수를 사용하므로 감쇠가 심하고, 전파의 도달 거;리가 짧아 기지국의 설치 간격이 좁아짐&lt;/li&gt;
&lt;li&gt;현재 통화 품질은 셀룰러나 PCS 모두 비슷하지만, 산악지대나 장애물이 많은 곳에서는 셀룰러의 통화 품질이 더 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인터넷&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터넷(Internet)의 개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP/IP 프로토콜을 기반으로 하여 전 세계 수많은 컴퓨터와 네트워크들이 연결된 광범위한 컴퓨터 통신망&lt;/li&gt;
&lt;li&gt;유닉스 운영체제 기반으로 통신망과 컴퓨터가 있는 곳이라면 시간과 장소를 구애받지 않고 정보 교환 가능&lt;/li&gt;
&lt;li&gt;인터넷에 연결된 모든 컴퓨터는 고유한 IP 주소를 가지며&amp;nbsp;서로 연결하기 위해서 브리지, 라우터, 게이트웨이를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;인트라넷과&amp;nbsp;엑스트라넷&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;인트라넷(Intranet)&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;인터넷 기술을 기업 내 정보 시스템에 적용한 것&lt;/span&gt;(전자 우편 시스템, 전자결재 시스템 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;엑스트라넷(Extranet)&lt;/b&gt;: 기업과 기업 간에 인트라넷을 서로 연결하여 회사와 관련 있는 기업체와의 원활한 통신을 위해 인트라넷의 이용 범위를 확대한 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터넷의 주소 체계&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IP 주소(Internet Protocol Address): 인터넷에 연결된 모든 컴퓨터의 자원을 구분하기 위한 고유한 주소&lt;/li&gt;
&lt;li&gt;숫자로 &lt;span style=&quot;color: #ee2323;&quot;&gt;8비트씩 4부분, 총 32비트(IPv4)&lt;/span&gt;로 구성되어 있으며, 각 부분은 점( . )으로 구분&lt;/li&gt;
&lt;li&gt;IP 주소는 네트워크 부분의 길이에 따라 A클래스에서 E클래스까지 총 5단계로 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;IPv6&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 사용하고 있는 IP 주소 체계인 IPv4의 주소 부족 문제를 해결하기 위해 사용(&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;16비트씩 8부분, 총 128비트&lt;/span&gt;&lt;/b&gt;)&lt;/li&gt;
&lt;li&gt;주소의 각 부분은 4자리의 16진수를 클론( ; )으로 구분하여 표현&lt;/li&gt;
&lt;li&gt;IPv4와 호환 가능하며, IPv4에 비하여 자료 전송 속도가 빠르고 주소의 확장성, 융통성, 연동성이 높음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;도메인 네임(Domain Name)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;숫자로 된 IP 주소를 사람이 이해하기 쉬운 문자 형태로 표현한 것&lt;/li&gt;
&lt;li&gt;호스트 컴퓨터명, 소속 기관 이름, 소속 기관의 종류, 소속 국가명 순으로 구성&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DNS&lt;/b&gt;를 사용하여 도메인 네임을 컴퓨터가 이해할 수 있는 IP 주소로 변환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ex) www(호스트 컴퓨터명).tistory(소속 기관 이름).co(소속 기관 종류).kr(소속 국가)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;왼쪽에서 오른쪽으로 갈수록 상위 도메인을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 123px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;레지스터&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40%; height: 19px;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;전 세계&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40%; height: 19px;&quot; colspan=&quot;2&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;KISA(국내)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;미국(최상위 도메인)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;기타 국가(상위 도메인)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;상업기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;com&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;co&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;초등학교&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;es.kr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;교육기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;edu&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ac&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;중학교&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;ms.kr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;네트워크 관련 기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;net&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;ne&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;고등학교&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;hs.kr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;비영리(기타) 기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;org&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;or&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;전문대 이상 대학/대학원&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;ac.kr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;정부기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;gov&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;go&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;&lt;b&gt;개인&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;pe.kr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;연구기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;re&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;특수학교&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;sc.kr&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;군사기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;mil&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&lt;b&gt;국제기관&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;int&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;URL(Uniform Resource Locater)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터넷상에 존재하는 각종 자원이 있는 위치를 나타내는 표준 주소 체계&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터넷 서비스&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TCP/IP의&amp;nbsp;응용&amp;nbsp;계층에서&amp;nbsp;제공&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;WWW(World&amp;nbsp;Wide&amp;nbsp;Web)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트, 그림, 동영상, 음성 등 인터넷에 존재하는 다양한 정보를 거미줄처럼 연결한 종합 정보 서비스&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;HTTP 프로토콜을 사용하는 하이퍼텍스트 기반&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전자 우편(E-Mail)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터넷을 통해 다른 사람과 편지뿐만 아니라 그림, 동영상 등 다양항 형식의 데이터를 주고받을 수 있는 서비스&lt;/li&gt;
&lt;li&gt;사용되는 프로토콜에는 &lt;span style=&quot;color: #ee2323;&quot;&gt;SMTP(메일 전송), POP3(메일 수신), MIME(멀티미디어 확인)&lt;/span&gt;이 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;FTP(File Transfer Protocol, 파일 전송 프로토콜)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터와 컴퓨터 또는 컴퓨터와 인터넷 사이에서 파일을 주고 받을 수 있는 원격 파일 전송 프로토콜&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;텔넷(Telnet, 원격 접속)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;멀리 떨어져 있는 컴퓨터에 접속하여 자신의 컴퓨터처럼 사용할 수 있는 서비스&lt;/li&gt;
&lt;li&gt;프로그램을 실행하는 등 시스템 관리 작업을 할 수 있는 가상의 터미널(Vitual Terminal) 기능 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;아키(Archie)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;FTP 서버의 리스트와 파일의 정보를 쉽게 검색할 수 있도록 하는 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;고퍼(Gopher)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메뉴 방식을 이용해 손쉽게 정보 검색을 할 수 있는 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;유즈넷(USENET)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;분야별로 공통의 관심사를 가진 인터넷 사용자들이 서로의 의견을 주고받을 수 있는 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정보 검색&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;웹 브라우저(Web Browser)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;웹 서버와 HTTP 프로토콜로 통신하여 사용자가 요구한 홈페이지에 접근할 수 있는 프로그램&lt;/li&gt;
&lt;li&gt;플러그인 프로그램을 설치하여 동영상이나 소리 등의 다양한 멀티미디어 데이터 처리 가능하고&amp;nbsp;전자 우편 송수신, HTML 문서 편집, 다양한 문서&amp;nbsp;검색 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;검색 엔진(Search Engine)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;WWW에 존재하는 정보를 쉽게 검색할 수 있는 도구(프로그램)로, 특정 웹 사이트에서 제공&lt;/li&gt;
&lt;li&gt;정보를 미리 수집하여 이를 체계적으로 데이터베이스에 저장하여 사용자가 원하는 정보 검색 가능&lt;/li&gt;
&lt;li&gt;동작하는 방식에 따라 주제별 검색 엔진, 키워드 검색 엔진, 메타 검색 엔진으로 구분&lt;/li&gt;
&lt;li&gt;&lt;b&gt;검색&amp;nbsp;엔진의&amp;nbsp;연산자&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;AND(&amp;amp;, 그리고)&lt;/b&gt;: 두 단어가 동시에 포함된 정보만을 검색&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OR(+, 또는)&lt;/b&gt;: 두 개의 단어 중 하나라도 포함된 정보를 검색&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NOT&lt;/b&gt;: 해당 단어를 포함하고 있는 정보는 제외하고 검색&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NEAR&lt;/b&gt;: 단어의 순서를 무시하고, 인접한 거리에 있는 정보를 검색&lt;/li&gt;
&lt;li&gt;연산 순위는 NEAR -&amp;gt; NOT -&amp;gt; AND -&amp;gt; OR&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;AND, OR, NOT는 부울 연산자&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>lan</category>
      <category>WWW</category>
      <category>랜</category>
      <category>인터넷</category>
      <category>정보처리기능사</category>
      <category>정보통신망</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/463</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-18-%EC%A0%95%EB%B3%B4-%ED%86%B5%EC%8B%A0%EB%A7%9D#entry463comment</comments>
      <pubDate>Sun, 6 Apr 2025 02:23:11 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 17. 통신 프로토콜</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-17-%ED%86%B5%EC%8B%A0-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;통신 프로토콜의 개념&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;통신 프로토콜(Communication Protocol)의 정의&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서로 다른 기기들 간의 데이터 교환을 효율적이고 신뢰성 있게 수행할 수 있도록 표준화한 통신 규약&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;통신을 제어하기 위한 표준 규칙과 절차의 집합으로 하드웨어와 스프트웨어, 문서를 모두 규정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로토콜의 기능&lt;/b&gt;: 단편화와 재결합, 캡슐화, 흐름 제어, 오류 제어, 동기화, 순서 제어, 주소 지정, 다중화, 경로 제어, 정송 서비스&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;통신 프로토콜의 기본 요소&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;구문(Syntax)&lt;/b&gt;&lt;/span&gt;: 전송하고자 하는 데이터의 형식, 부호화, 신호 레벨 등을 규정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;의미(Semantics)&lt;/b&gt;&lt;/span&gt;: 두 기기 간의 효율적이고 정확한 정보 전송을 위한 협조 사항과 오류 관리를 위한 제어 정보를 규정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;시간(Timing)&lt;/b&gt;&lt;/span&gt;: 두 기기 간의 통신 속도, 메시지의 순서 제어 등을 규정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;프로토콜의 전송 방식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;문자 정송 방식&lt;/b&gt;: 전송 제어 문자(SOH, STX, ETX, EOT 등)를 사용하여 데이터 프레임의 시작과 끝을 나타내는 방식 (BSC)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바이트 방식&lt;/b&gt;: 데이터 프레임의 헤더(Header)에 전송 데이터 프레임의 문자 개수, 메시지 수신 상태 등의 제어 정보를 삽입하여 전송하는 방식 (DDCM)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비트 방식&lt;/b&gt;: 데이터 프레임의 시작과 끝을 나타내는 고유한 비트 패턴(플래그)을 사입하여 전송하는 방식 (HDLC, SDLC)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;HDLC(High-level Data Link Control) 프레임의 구조&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cn0O3C/btsNamOSjhi/DQnTd4PShK8ttovXbahxhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cn0O3C/btsNamOSjhi/DQnTd4PShK8ttovXbahxhk/img.png&quot; data-alt=&quot;HDLC(High-level Data Link Control) 프레임의 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cn0O3C/btsNamOSjhi/DQnTd4PShK8ttovXbahxhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcn0O3C%2FbtsNamOSjhi%2FDQnTd4PShK8ttovXbahxhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2004&quot; height=&quot;604&quot; data-origin-width=&quot;2004&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HDLC(High-level Data Link Control) 프레임의 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;플래그(Flag)&lt;/b&gt;: 프레임의 시작과 끝을 나타내는 고유한 비트 패턴(01111110)으로 각 통화로의 혼선을 방지하기 위해 동기를 유지함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;주&lt;/span&gt;소부(Address Field)&lt;/b&gt;: 송수신국을 식별하기 위해 사용, 불특정 다수에게 전송하는 방송용(Broadcast)는 '11111111', 시스템에 의해 임의로 수신국이 지정되는 시험용(No Station)은 '00000000'을 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;제&lt;/span&gt;어부(Control Field)&lt;/b&gt;: 프레임의 종류를 식별하기 위해 사용, 제어부의 첫 번째, 두 번째 비트를 사용하여 프레임의 종류를 &lt;span style=&quot;color: #ee2323;&quot;&gt;I 프레임, S 프레임, U 프레임&lt;/span&gt;으로 구별&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정&lt;/span&gt;보부(Information Field)&lt;/b&gt;: 실제 정보 메시지가 들어있는 부분으로,&amp;nbsp; 송수신 측 간의 협의에 따라 길이와 구성이 정해짐&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FCS(&lt;span style=&quot;color: #ee2323;&quot;&gt;검&lt;/span&gt;색부, 프레임 검사 순서 필드)&lt;/b&gt;: 프레임 내용에 대한 오류 검출을 위해 사용되는 부분, 일반적으로 CRC 코드를 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; &amp;nbsp;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;HDLC 프레인 구성 순서는 &lt;span style=&quot;color: #ee2323;&quot;&gt;주&amp;middot;제&amp;middot;정&amp;middot;검&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;OSI(Open System Interconnection) 7계층&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다른 시스템 간의 원활한 통신을 위해 ISO(국제표준화기구)에서 제안한 통신 규약(Protocol)&lt;/li&gt;
&lt;li&gt;개방형 시스템(Open System) 간의 데이터 원활한 통신을 위해 ISO(국제표준화기구)에서 제안한 통신 규약(Protocol)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;OSI 7계층&lt;/b&gt;: 하위 계층(물리 계층 -&amp;gt; 데이터 링크 계층 -&amp;gt; 네트워크 계층) -&amp;gt; 상위 계층(전송 계층 -&amp;gt; 세션 계층 -&amp;gt; 표현 계층 -&amp;gt; 응용 계층)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;물리 계층(Physical Layer)&lt;/b&gt;: 전송에 필요한 장치 간의 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성을 정의(RS-232C, X.21 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 링크 계층(Data Link Layer)&lt;/b&gt;: 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 함(HDLC, ADCCP, &lt;span style=&quot;color: #ee2323;&quot;&gt;LLC&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;MAC&lt;/span&gt; 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;네트워크 계층(Network Layer)&lt;/b&gt;: 개방 시스템 간의 네트워크 연결을 관리하는 기능과 데이터의 교환 및 중계 기능을 함(X.25, IP 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전송 계층(Transport Layer)&lt;/b&gt;: 안전한 전송을 위해 송신 측과 수신 측에 논리적인 연결 통로를 만듦(TCP, UTP 등)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수신 측에서 정상적인 패킷 전달과 수신을 검사하는 기능을 수행함&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;신뢰성 있는 데이터의 전송을 위해 오류 검출, 흐름 제어, 혼잡 제어 등의 기능을 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;세션 계층(Session Layer)&lt;/b&gt;: 개체들 간의 관련성을 유지하고 대화 제어를 담당하는 계층&lt;/li&gt;
&lt;li&gt;&lt;b&gt;표현 계층(Presentation Layer)&lt;/b&gt;: 응용 계층으로부터 받은 데이터를 세션 계층에 맞는 형태로, 세션 계층에서 받은 데이터는 응용 계층에 맞게 변환하는 기능을 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;코드 변환, 암호화, 해독 기능을 수행&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;응용 계층(Application Layer)&lt;/b&gt;: 사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스를 제공
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전자 사서함(SMTP), 파일 전송(&lt;span style=&quot;color: #ee2323;&quot;&gt;FTP&lt;/span&gt;), 원격 접속(TELNET) 등의 서비스를 제공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>HDLC</category>
      <category>OSI</category>
      <category>정보처리기능사</category>
      <category>프로토콜</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/462</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-17-%ED%86%B5%EC%8B%A0-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C#entry462comment</comments>
      <pubDate>Sat, 5 Apr 2025 01:00:24 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 16. 정보 통신 설비</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-16-%EC%A0%95%EB%B3%B4-%ED%86%B5%EC%8B%A0-%EC%84%A4%EB%B9%84</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;단말장치(DTE: Data Terminal Equipment)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단말장치의 개요 및 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;원격지에 설치된 입출력장치&lt;/span&gt;로 통신 시스템과 사용자의 접점에 위치하여 컴퓨터(Host)에 의해 처리될 데이터를 입력하거나 처리된 결과를 출력&lt;/li&gt;
&lt;li&gt;단말장치는 크게 입출력장치와 전송 제어장치로 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;959&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2cGcW/btsM4am0ciW/7kKqr9aCu6PjMGQV3wUg5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2cGcW/btsM4am0ciW/7kKqr9aCu6PjMGQV3wUg5K/img.png&quot; data-alt=&quot;단말장치의 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2cGcW/btsM4am0ciW/7kKqr9aCu6PjMGQV3wUg5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2cGcW%2FbtsM4am0ciW%2F7kKqr9aCu6PjMGQV3wUg5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;959&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;959&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;단말장치의 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;입출력장치&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;출력장치&lt;/b&gt;: 컴퓨터를 통해 처리된 데이터를 사용자가 확인할 수 있도록 출력하는 장치(모니터, 프린터 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;입력장치&lt;/b&gt;: 컴퓨터를 통해 처리할 데이터를 입력하는 장치(키보드, 마우스, 디지털 카메라 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전송 제어장치&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;입출력 제어 기능&lt;/b&gt;: 입출력장치의 정상적인 작동 여부 및 상태를 제어 및 식별&lt;/li&gt;
&lt;li&gt;&lt;b&gt;회선 제어 기능&lt;/b&gt;: 송수신 제어 기능, 오류 제어 기능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;회선 접속 기능&lt;/b&gt;: 단말장치와 전송 회선을 연결하는 기능, 단말장치 안에 신호 레벨과 전송 회선 상의 신호 레벨 간 상호 교환 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;단말장치의 분류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;일반적인 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;범용 단말장치&lt;/b&gt;: 표시장치(모니터), 인쇄장치(프린터), 판독장치(MICR, OCR, OMR, Bar-Code Reader 등), 기록장치(자기 테이프, 자기 디스크, CD-ROM 등), 그래픽장치(스캐, 디지타이저, 태블릿 등), 천공장치(종이 카드, 자기 카드 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;복합 단말장치&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;원격 일괄 단말장치(Remote Batch Terminal)&lt;/span&gt;, 지능형 단말장치&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전용 단말장치&lt;/b&gt;: 은행용 단말기, 의료용 단말기, 증권용 단말기, POS용 단말기 등&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기타 단말장치&lt;/b&gt;: 범용, 복합, 전용 단말장치에 속하지 않는 단말장치들&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;기능상의 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;입력 전용 단말장치&lt;/b&gt;: 데이터의 수집(입력)만을 목적으로 만들어진 단말장치(키보드, OMR, OCR, MICR 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;출력 전용 단말장치&lt;/b&gt;: 데이터의 출력만을 목적으로 만들어진 단말장치(프린터, 표시판 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;입출력 공용 단말장치&lt;/b&gt;: 입력과 출력 기능을 모두 수행할 수 있는 단말장치(일반적으로 사용되는 대부분의 단말장치)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;내장 프로그램의 유무에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;지능형(Intelligent)&lt;/span&gt;, 스마트(Smart) 단말장치&lt;/b&gt;: CPU와 저장장치가 내장되어 &lt;span style=&quot;color: #ee2323;&quot;&gt;단독으로 작업을 처리할 수 있는&lt;/span&gt;&amp;nbsp;단말장치&lt;br /&gt;(네트워크 환경에서 분산 처리를 수행하기 위한 용도로 사용)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비지능형(Non-Intelligent), 더미(Dummy) 단말장치&lt;/b&gt;: 입, 출력장치로만 구성되어 단독으로 작업을 처리할 수 없는 단말장치&lt;br /&gt;(통신 회선으로 연결된 컴퓨터에 모든 처리를 의존)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;DTE/DCE 접속 규격&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단말장치(DTE)와 회선 종단장치(DCE) 간의 접속을 정확하게 수행하기 위해 사전에 정의해 놓은 규격&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;DTE와 DCE 접속 특성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기계적&lt;/span&gt; 특성&lt;/b&gt;: 접속 핀의 크기, 개수, 핀 사이의 간격 등에 관한 물리적 특성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;전기적&lt;/span&gt; 특성&lt;/b&gt;: 전압 레벨의 사용에 관한 특성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기능적&lt;/span&gt; 특성&lt;/b&gt;: 각 핀마다 설정할 기능에 대한 특성&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;절차적&lt;/span&gt; 특성&lt;/b&gt;: 신호의 전송 절차 등에 관한 특성&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;접속 규격 표준안&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 203px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 22.3643%;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;접속 규격&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.6356%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 10.4264%; height: 133px;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;ITU-T&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.9379%; height: 57px;&quot;&gt;&lt;b&gt;V 시리즈&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.6356%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;공중 전화(&lt;b&gt;아날로그&lt;/b&gt;) 교환망(PSTN)&lt;/span&gt;을 통한 DTE/DCE 접속 규격&lt;br /&gt;- V.24: 기능적, 절차적 조건에 대한 규정&lt;br /&gt;- V.28: 전기적 조건에 대한 규정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 11.9379%; height: 76px;&quot;&gt;&lt;b&gt;X 시리즈&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.6356%; height: 76px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;공중 데이터(&lt;b&gt;디지털&lt;/b&gt;) 교환망(PSDN)을 통한&lt;/span&gt; DTE/DCE 접속 규격&lt;br /&gt;- X.20: 비동기식 전송을 위한 접속 규격&lt;br /&gt;- X.21: 동기적 전송을 위한 접속 규격&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;X.25: &lt;b&gt;패킷&lt;/b&gt; 전송을 위한 접속 규격&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;width: 10.4264%; height: 53px;&quot; rowspan=&quot;2&quot;&gt;&lt;b&gt;EIA&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.9379%; height: 36px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;RS-232C&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.6356%; height: 36px;&quot;&gt;공중&amp;nbsp;전화&amp;nbsp;교환망(PSTN)을&amp;nbsp;통한&amp;nbsp;DTE/DCE&amp;nbsp;접속&amp;nbsp;규격&lt;br /&gt;- V.24, V.28, ISO 2110을 사용하는 접속 규격과 기능적 호환성을 가져 현재 가장 많이 사용됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 11.9379%; height: 17px;&quot;&gt;&lt;b&gt;RS-449&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.6356%; height: 17px;&quot;&gt;고속 데이터 통신을 위한 DTE/DCE 접속 규격&lt;br /&gt;- RS-232C의 단점을 보완하기 위한 새로운 표준&lt;br /&gt;- 거리에 제한이 없고, RS-232C에 비해 속도가 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10.4264%; height: 17px;&quot;&gt;&lt;b&gt;ISO&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 11.9379%; height: 17px;&quot;&gt;&lt;b&gt;ISO 2110&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.6356%; height: 17px;&quot;&gt;공중 전화 교환명(PSTN)을 통한 DTE/DCE 접속 규격&lt;br /&gt;- 주로 기계적 조건에 대한 규정&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;RS-232C 커넥터&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;25핀&lt;/span&gt;으로 구성된 커넥터로 전송 거리는 15m 이하&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ITU-T에서는 V.24로 규정&lt;/span&gt;하며 OSI&amp;nbsp;참조&amp;nbsp;모델의&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;물리&amp;nbsp;계층에&amp;nbsp;관계됨&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;주요 핀의 기능&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;&lt;b&gt;핀 번호&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;&lt;b&gt;핀 이름&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;FG(Frame Ground)&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;보호용 접지 회로&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;TXD(Transmitted Data)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;송신&lt;/span&gt; 데이터, 데이터를 송신하는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;RXD(Received Data)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;수신&lt;/span&gt; 데이터, 데이터를 수신하는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;RTS(Request To Send)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;송신 요청&lt;/span&gt;, DTE에서 DCE로 송신을 요청하는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;CTS(Clear To Send)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;송신 준비 완료&lt;/span&gt;, DCE에서 CTE로 손신 준비 완료를 알리는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;DSR(Data Set Ready)&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;DCE 상태, DCE의 동작 상태를 알리는 기능(On: 동작, Off: 동작 안 함)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;SG(Signal Ground)&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;신호 접지, 모든 신호의 기준 전압&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;DCD(Data Carrier Detect)&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;수신선 신호 감지, DCE가 선로 쪽으로부터 감지할 수 있는 신호를 수신하고 있음을 DTE에 알리는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;20&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;DTR(Data Terminal Ready)&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;DTE 상태, DTE가 정상 동작을 하고 있음을 DCE에 알리는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 7.63563%;&quot;&gt;22&lt;/td&gt;
&lt;td style=&quot;width: 25.7752%;&quot;&gt;RI(Ring Indicator)&lt;/td&gt;
&lt;td style=&quot;width: 66.5891%;&quot;&gt;링 감지 신호, 상대편으로부터 링 신호가 들어오고 있다는 것을 DTE에 알리는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;신호 변환장치(DCE: Data Circuit Equipment)&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;신호 변환장치의 개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터, 단말장치의 데이터와 통신 회선에 적합한 &lt;span style=&quot;color: #ee2323;&quot;&gt;신호를 상호 변환&lt;/span&gt;하는 기능을 수행&lt;/li&gt;
&lt;li&gt;전송 회선 양쪽 끝에 위치하므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 회선 종단장치&lt;/span&gt;라고도 불림&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모뎀(MODEM)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터나 단말장치로부터 전송되는 &lt;span style=&quot;color: #ee2323;&quot;&gt;디지털 데이터를 아날로그 회선에 적합한 신호로 변환하는 변조(MOdulation)&lt;/span&gt; 과정과 &lt;span style=&quot;color: #ee2323;&quot;&gt;그 반대의 복조(DEModulation)&lt;/span&gt; 과정을 수행하며 &lt;span style=&quot;color: #ee2323;&quot;&gt;원거리 전송에 주로 이용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;디지털 데이터 공중전화 교환망(PSTN)과 같은 아날로그 통신망을 이용하여 전송할 때 사용&lt;/li&gt;
&lt;li&gt;모뎀에 포함된 &lt;span style=&quot;color: #ee2323;&quot;&gt;등화 회로(등화기, Equalizer)는 &lt;b&gt;신호의 감쇠 왜곡과 전송 지연 왜곡을 방지&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기능&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;변, 복조 기능&lt;/span&gt;, 자동 응답 기능, 반복 호출 기능, 자동 속도 조절 기능, 모뎀 시험 기능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;분류 기준&lt;/b&gt;: 변조 방식에 의한 분류, &lt;span style=&quot;color: #ee2323;&quot;&gt;동기 방식(동기식, 비동기식)에 의한 분류&lt;/span&gt;, 포트 수에 의한 분류, 통신 속도에 의한 분류&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전화기(Telephone)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;음성을 전기 신호로 상호 변환하여 상대방 간에 음성 통신을 할 수 있도록 하는 장치&lt;/li&gt;
&lt;li&gt;전화기로부터 전달된 전기 신호는 전화 회선을 통해 상대편으로 전달&lt;/li&gt;
&lt;li&gt;전화 교환기는 통화를 원하는 두 상대방의 통신 회원을 연결해 주는 역할&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전화기의 구성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;송화기(Teansmiter)&lt;/b&gt;: 음성을 전기 신호로 변환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수화기(Receiver)&lt;/b&gt;: 전기 신호를 다시 음성으로 변환&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다이얼(Dial)&lt;/b&gt;: 착신 가입자의 번호를 교환기에 알려주는 역할&lt;/li&gt;
&lt;li&gt;&lt;b&gt;훅 스위치(Hook Switch)&lt;/b&gt;: 수화기를 들면 신호 상태와 통화 상태를 자동으로 전환해 주는 역할&lt;/li&gt;
&lt;li&gt;&lt;b&gt;영구 자석&lt;/b&gt;: 수화 음성을 정확히 진동시키기 위해 사용하는 것으로, 사용하지 않으면 두 배의 주파수 음성이 되어 잡음이 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;MFC(Multi Frequency Code) 전화기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전자 교환기의 스위칭(교환) 속도에 맞추기 위해 개발된 전화기(푸시 버튼 다이얼 전화기)&lt;/li&gt;
&lt;li&gt;푸시 버튼을 눌렀을 때 만들어지는 7개의 주파수 중에서 2개의 가청 주파수를 발생시켜 전화국으로 송출하는 방식&lt;br /&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;다주파 부호 방식&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;버튼 중 0~9의 10개 버튼은 숫자 버튼이며, &lt;span style=&quot;color: #ee2323;&quot;&gt;[ * ] 버튼&lt;/span&gt;은 특수 &lt;span style=&quot;color: #ee2323;&quot;&gt;기능&lt;/span&gt; 등록, &lt;span style=&quot;color: #ee2323;&quot;&gt;[ # ] 버튼&lt;/span&gt;은 특수 &lt;span style=&quot;color: #ee2323;&quot;&gt;기능&lt;/span&gt;을 취소에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기타 신호 변환장치&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;DSU(Digital Service Unit)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터나 단말장치로부터 전송되는 디지털 데이터를 전송 회선에 적합한 디지털 신호로 변환하는 과정과 그 방대의 과정을 수행&lt;/li&gt;
&lt;li&gt;디지털 데이터를 공중 데이터 교환망(PSDN)과 같은 디지털 통신망을 이용하여 전송할 때(&lt;span style=&quot;color: #ee2323;&quot;&gt;디지털 전송 선로&lt;/span&gt;) 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;음향 결합기(Acoustic Coupler)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;단말장치와 전화기를 연결하기 위한 모뎀의 일종&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;전화기의 송, 수화기를 음향 결합기에 결합시켜서 디지털 신호를 아날로그 신호로 변환 후 전송하는 장치&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;코덱(CODEC, Coder/Decoder)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아날로그 데이터를 디지털 통신 회선에 적합한 디지털 신호로 변환(COder)하거나 그 반대 과정(DECoder)을 수행&lt;/li&gt;
&lt;li&gt;펄스 코드 변조(PCM) 방식을 이용하여 데이터를 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;다중화기(MUX: Multiplexer)&lt;/h2&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;다중화기의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 통신 회선에 여러 개의 단말장치가 동시에 접속하여 사용할 수 있도록 하는 장치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;다중화(Multiplexing)란 하나의 고속 통신 회선을 다수의 단말장치가 공유할 수 있도록 하는 것&lt;/li&gt;
&lt;li&gt;여러 단말장치가 같은 장소에 위치하는 경우, 다중화 기능을 이용하여 전송로의 수 감소 가능&lt;/li&gt;
&lt;li&gt;통신 회선을 공유함으로써 전송 효율을 높이고, 통신 회선의 경비는 줄임&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;다중화기의 종류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주파수 분할 다중화기(FDM: Frequency Division Multiplexer)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신 회선의 &lt;span style=&quot;color: #ee2323;&quot;&gt;주파수를 여러 개로 분할&lt;/span&gt;하여 다중화&lt;/li&gt;
&lt;li&gt;전송 신호에 필요한 대역폭보다 전송 매체의 유효 대역폭이 큰 경우에 사용&lt;/li&gt;
&lt;li&gt;시분할 다중화기에 비해 구조가 간단하고 가격이 저렴&lt;/li&gt;
&lt;li&gt;대역폭을 나누어 사용하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;각 채널들 간의 상호 간섭을 방지하기 위한 보호대역(Guard Band)&lt;/span&gt;이 필요&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;저속(1,200 bps 이하)의 비동기식 전송&lt;/span&gt;, 멀티 포인트(Multi-Point) 방식, 아날로그 신호 전송에 적합&lt;/li&gt;
&lt;li&gt;일정한 대역폭에 맞추어 음성과 영상 신호들을 각 채널 반송파에 할당하여 전송하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;공중파 TV 방송 신호에 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;전송된 신호는 &lt;span style=&quot;color: #ee2323;&quot;&gt;대역 여파기(필터)&lt;/span&gt;를 통해 각각의 신호(주파수)로 분리&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;시분할 다중화기(TDM: Time Division Multiplexer)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신 회선의 대역폭을 일정한 시간 폭(Time Slot)으로 나누어 다중화&lt;/li&gt;
&lt;li&gt;각 회선당 &lt;span style=&quot;color: #ee2323;&quot;&gt;고정된 프레임을 구성&lt;/span&gt;하여 전송&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;고속(2,400 bps 이상)의 전송, &lt;/span&gt;디지털 회선에서 주로 이용, &lt;span style=&quot;color: #ee2323;&quot;&gt;대부분의 데이터 통신에서 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동기식 다중화기(&lt;span style=&quot;color: #ee2323;&quot;&gt;STDM&lt;/span&gt;)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 단말기에 균등한 시간 폭을 제공&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비동기식 다중화기(ATDM)&lt;/b&gt;: 전송할 데이터가 있는 단말기에만 시간 폭을 제공&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>다중화기</category>
      <category>단말장치</category>
      <category>신호변환장치</category>
      <category>정보처리기능사</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/461</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-16-%EC%A0%95%EB%B3%B4-%ED%86%B5%EC%8B%A0-%EC%84%A4%EB%B9%84#entry461comment</comments>
      <pubDate>Fri, 4 Apr 2025 20:49:37 +0900</pubDate>
    </item>
    <item>
      <title>정보처기기능사 - 15. 정보 전송 방식</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EA%B8%B0%EA%B8%B0%EB%8A%A5%EC%82%AC-15-%EC%A0%95%EB%B3%B4-%EC%A0%84%EC%86%A1-%EB%B0%A9%EC%8B%9D</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;정보 전송 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;직렬/병렬 전송&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;직렬 전송&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 전송 매체&lt;/span&gt;를 통하여 &lt;span style=&quot;text-align: left;&quot;&gt;정보를 구성하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;각 비트들을&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;순서대로 전송&lt;/span&gt;되는 형태&lt;/li&gt;
&lt;li&gt;하나의 전송 매체만 사용하므로 전송 속도가 느리지만 구성 비용이 낮음&lt;/li&gt;
&lt;li&gt;원거리 전송에 적합, &lt;span style=&quot;color: #ee2323;&quot;&gt;대부분의 데이터 통신에 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;병렬 전송&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;여러 개의 전송 매체&lt;/span&gt;를 통하여 &lt;span style=&quot;text-align: left;&quot;&gt;정보를 구성하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;각 비트들을&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;동시에 전송&lt;/span&gt;되는 형태&lt;/li&gt;
&lt;li&gt;여러 개의 전송 매체를 사용하므로 전송 속도가 빠르지만 구성 비용이 높음&lt;/li&gt;
&lt;li&gt;근거리 전송에 적합하여 주로 컴퓨터와 주변장치 사이 데이터 전송에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;통신 방식&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단방향(Simplex) 통신&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한쪽 방향으로만 전송이 가능한 방식&lt;/li&gt;
&lt;li&gt;ex) 라디오, TV&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;반이중(Half-Duplex) 통신&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;양방향 전송&lt;/span&gt;이 가능하시만 &lt;span style=&quot;color: #ee2323;&quot;&gt;동시에 양쪽 방향에서 전송할 수 없는&lt;/span&gt; 방식&lt;/li&gt;
&lt;li&gt;2선식 선로를 사용, 송신과 수신을 번갈아 전송&lt;/li&gt;
&lt;li&gt;ex) 무전기, 모뎀을 이용한 데이터 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전이중(Full-Duplex) 통신&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;동시에 양방향 전송&lt;/span&gt;이 가능한 방식&lt;/li&gt;
&lt;li&gt;4선식 선로를 사용, 주파수 분할을 이용할 경우 2선식도 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;전송량이 많고, 전송 매체의 용량이 클 때 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ex) 전화, 전용선을 이용한 데이터 통신&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;동기 전송(동기화)&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;동기식 전송&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;미리 정해진 수만큼의 문자열을 한 블록(프레임)으로 만들어 일시에 전송하는 방식&lt;/li&gt;
&lt;li&gt;송, 수신 양쪽의 동기를 유지하기 위해 &lt;span style=&quot;color: #ee2323;&quot;&gt;타이밍 신호(클럭)를 계속적으로 공급&lt;/span&gt;하거나 동기 문자를 전송&lt;/li&gt;
&lt;li&gt;블록과 블록 사이에는 휴지 시간(Idle Time)이 없고 &lt;span style=&quot;color: #ee2323;&quot;&gt;비동기식 보다 전송 효율이 높음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;프레임 단위로 전송하므로 전송 속도가 빠름&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비동기식 전송&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송하는 문자(정보 비트) 앞뒤에&amp;nbsp;시작 비트(Start Bit)와 정지 비트(Stop Bit)를 붙여서 Byte와 Byte를 구별하여 전송하는 방식&lt;/li&gt;
&lt;li&gt;문자와 문자 사이 휴지 시간(Idle Time)이 불규칙하며 &lt;span style=&quot;color: #ee2323;&quot;&gt;동기식 보다 효율이 떨어짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;2,000bps(약 2Kbps) 이하의 저속, 단거리 전송에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;신호 변환 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주파수와 대역폭&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주파수&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단위 시간(주로 1초) 내에 신호 파형이 반복되는 횟수를 의미, 단위는 (Hz)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고주파&lt;/b&gt;: 파형의 가로폭이 좁은 것으로, 고속 전송에 사용하고 전송 거리가 짧음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저주파&lt;/b&gt;: 파형의 가로폭이 넓은 것으로, 저속 전송에 사용하고 전송 거리가 김&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/schaZ/btsM3UxKoRB/QkrKc3IKdikykEgQjo2jh0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/schaZ/btsM3UxKoRB/QkrKc3IKdikykEgQjo2jh0/img.gif&quot; data-alt=&quot;출처: http://www.rfdh.com/bas_rf/begin/whatisrf.php3&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/schaZ/btsM3UxKoRB/QkrKc3IKdikykEgQjo2jh0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/schaZ/btsM3UxKoRB/QkrKc3IKdikykEgQjo2jh0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;233&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: http://www.rfdh.com/bas_rf/begin/whatisrf.php3&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 107px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 32.0931%; height: 20px;&quot;&gt;&lt;b&gt;데이터&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.9069%; height: 20px;&quot;&gt;&lt;b&gt;주파수&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 32.0931%; height: 19px;&quot;&gt;&lt;b&gt;가청&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.9069%; height: 19px;&quot;&gt;20 ~ 20,000Hz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.0931%; height: 17px;&quot;&gt;&lt;b&gt;HF(High Frequence)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.9069%; height: 17px;&quot;&gt;3 ~ 30MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.0931%; height: 17px;&quot;&gt;&lt;b&gt;VHF(Very High Frequence)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.9069%; height: 17px;&quot;&gt;30 ~ 300MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.0931%; height: 17px;&quot;&gt;&lt;b&gt;UHF(Ultra High Frequence)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.9069%; height: 17px;&quot;&gt;300 ~ 3,000MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.0931%; height: 17px;&quot;&gt;&lt;b&gt;SHF(Super High Frequence)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.9069%; height: 17px;&quot;&gt;3,000 ~ 30,000MHz&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대역폭(Bandwidth)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주파수의 변화 범위, 즉 상한 주파수와 하한 주파수의 차이를 의미&lt;/li&gt;
&lt;li&gt;ex) HF의 대역폭은 30 - 3 = 27MHz&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;아날로그 변조 방식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;아날로그 변조란 아날로그 데이터를 아날로그 회선을 통하여 전송하기 위해 아날로그 형태로 변조하는 것을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.3256%;&quot;&gt;&lt;b&gt;변조 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.6744%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.3256%;&quot;&gt;&lt;b&gt;전폭 변조&lt;br /&gt;(AM: Amplitude Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.6744%;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변조 파형에 따라 진폭을 변조하는 방식&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;피크 투 피크(Peak to Peak, 진폭의 최대, 최소값) 전압이 변하는 형태&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;회로가 간단하고 비용이 적게 듬&lt;br /&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;잡음에 약하고, 전력 효율이 나쁨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.3256%;&quot;&gt;&lt;b&gt;주파수 변조&lt;br /&gt;(FM: Frequency Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.6744%;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변조 파형에 따라 주파수를 변조하는 방식&lt;br /&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;변조된 신호는 대역폭을 넓게 차지하지만 잡음에 강함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.3256%;&quot;&gt;&lt;b&gt;위상 변조&lt;br /&gt;(PM: Phase Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.6744%;&quot;&gt;- 변조 파형에 따라 위상을 변조하는 방식&lt;br /&gt;- 번조된 신호는 대역폭을 넓게 차지하지만 고속 전송이 가능하고 잡음에 강함&lt;br /&gt;- AM, FM 방식에 비해 회로가 복잡&lt;br /&gt;- ex) &lt;span style=&quot;color: #ee2323;&quot;&gt;4개의 위상을 갖는 신호 &amp;rarr; 4 = 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;2&lt;/span&gt; &amp;rarr; 2비트 전송 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;디지털 변조 방식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디지털 변조란&amp;nbsp;모뎀(MODEM)을 이용하여 디지털 데이터를 아날로그 신호로 변환하는 것을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.5582%;&quot;&gt;&lt;b&gt;변조 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.4418%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.5582%;&quot;&gt;&lt;b&gt;전폭 편의 변조&lt;br /&gt;(ASK: Amplitude Shift Keying)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.4418%;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt; 2진수 0과 1을 서로 다른 진폭의 신호로 변조하는 방식&lt;br /&gt;- 모뎀 구조가 간단하고, 가격이 저렴&lt;br /&gt;- 신호 변동과 잡음에 약하여 데이터 전송용으로는 거의 사용되지 않음&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.5582%;&quot;&gt;&lt;b&gt;주파수 편의 변조&lt;br /&gt;(FSK: Frequency &lt;b&gt;Shift Keying&lt;/b&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.4418%;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;-&lt;span&gt; 2진수 0과 1을 서로 다른 주파수로 변조하는 방식&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span&gt;&lt;br /&gt;- 모뎀 구조가 간단하고 &lt;span style=&quot;text-align: start;&quot;&gt;대역폭을 넓게 차지&lt;/span&gt;&lt;br /&gt;- &lt;span style=&quot;text-align: start;&quot;&gt;신호 변동과 잡음에 강하고, &lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;1,200bps 이하의 &lt;span style=&quot;color: #ee2323;&quot;&gt;저속도 &lt;b&gt;비동기식&lt;/b&gt; 모뎀&lt;/span&gt;에서 사용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.5582%;&quot;&gt;&lt;b&gt;위상 편이 변조&lt;br /&gt;(PSK: Phase &lt;b&gt;&lt;b&gt;Shift Keying&lt;/b&gt;&lt;/b&gt;)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.4418%;&quot;&gt;- 2진수 0과 1을 서로 다른 위상을 갖는 신호로 변조하는 방식&lt;br /&gt;- 일정한 진폭 또는 주파수를 갖는 정현파의 위상을 180, 90, 45도 단위로 2, 4, 8등분했을 때의 각 위치에 신호를 할당하여 전송&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;중, 고속의 &lt;b&gt;동기식&lt;/b&gt; 모뎀&lt;/span&gt;에 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.5582%;&quot;&gt;&lt;b&gt;직교 진폭 변조, 진폭 위상 변조&lt;br /&gt;(QAM: Quadrature Amplitude Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.4418%;&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;진폭과 위상을 상호 변환&lt;/span&gt;하여 신호를 얻는 변조 방식&lt;br /&gt;- 제한된 전송 대역 내에서 고속 전송이 가능(9,600bps)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;펄스 코드 변조(PCM: Pulse Code Modulation)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;펄스 코드 변조란 코덱(CODEC)을 이용하여 화상, 음성, 동영상 비디오, 가상현실 등과 같이 연속적인 시간과 진폭을 가진 아날로그 데이터를 디지털 신호로 변환하는 것을 의미&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;누화의 영향을 거의 받지 않고 레벨 변동이 거의 없으며 점유 주파수 대역폭이 큼(광대역 O, 협대역 X)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 89px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 32.4418%; height: 19px;&quot;&gt;&lt;b&gt;변조 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5582%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;width: 32.4418%; height: 36px;&quot;&gt;&lt;b&gt;펄스 진폭 변조&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(PAM: Pulse Amplitude Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5582%; height: 36px;&quot;&gt;- 펄스의 진폭을 변화시키는 변조 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4418%; height: 17px;&quot;&gt;&lt;b&gt;펄스 폭 변조&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(PWM: Pulse&lt;span&gt; Width&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5582%; height: 17px;&quot;&gt;- 펄스의 폭을 변화시키는 변조 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 32.4418%; height: 17px;&quot;&gt;&lt;b&gt;펄스 위상 변조&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(PPM: Pulse&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Phase&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5582%; height: 17px;&quot;&gt;- 펄스의 위치(위상)을 변화시키는 변조 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 32.4418%;&quot;&gt;&lt;b&gt;펄스 수 변조&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;(PNM: Pulse Number&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Modulation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 67.5582%;&quot;&gt;- 펄스의 수를 변화시키는 변조 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;펄스 코드 변조 순서&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;387&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dCi28u/btsM2bgdDpk/Hh078hz7zz8GdiiTbNeS91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dCi28u/btsM2bgdDpk/Hh078hz7zz8GdiiTbNeS91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dCi28u/btsM2bgdDpk/Hh078hz7zz8GdiiTbNeS91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdCi28u%2FbtsM2bgdDpk%2FHh078hz7zz8GdiiTbNeS91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;387&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;387&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;표&lt;/span&gt;본화(Sampling)&lt;/b&gt;: 음성, 영상 등의 연속적인 신호 파형을 일정 시간 간격으로 검출하는 단계, 샤논의 표본화 이론을 바탕으로 함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;샤논(Nyquist Shannon)의 표본화 이론&lt;/b&gt;&lt;/span&gt;: 어떤 신호 f(x)가 의미를 지니는 최고의 주파수보다 2배 이상의 속도로 균일한 시간 간격 동안 채집된다면, 이 채집된 데이터는 원래의 신호가 가진 모든 정보를 포함
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;적당 표본화 횟수 = 최고 주파수의 2배, 간격(주기) = 1 / 적당 표본화 횟수&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ex) 최고 주파수가 W[Hz]일때 적당한 표본화 횟수는 2W, 주기는 1/2W&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;양&lt;/span&gt;자화(Quantizing):&lt;/b&gt; 표본화된 PAM 신호를 유한 개의 부호에 대한 대표값으로 조정하는 과정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부&lt;/span&gt;호화(Encoding)&lt;/b&gt;: 양지화된 PCM 펄스의 진폭 크기를 2진수(1, 0)로 표시하는 과정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;복&lt;/span&gt;호화(Decoding)&lt;/b&gt;: 수신된 디지털 신호, 즉 PCM 신호를 PAM 신호로 되돌리는 과정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;여&lt;/span&gt;과화(Filtering)&lt;/b&gt;: PAM 신호를 원래의 입력 신호인 아날로그 신호로 복원하는 과정&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;  외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;변조: &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;M&lt;/span&gt;odulation(아날로그 변조)&lt;br /&gt;&lt;/b&gt;편의 변조: &lt;span style=&quot;color: #ee2323;&quot;&gt;S&lt;/span&gt;hift&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;K&lt;/span&gt;eying(디지털 변조)&lt;br /&gt;진폭: &lt;span style=&quot;color: #ee2323;&quot;&gt;A&lt;/span&gt;mplitude&lt;/b&gt;&lt;br /&gt;&lt;b&gt;위상: &lt;span style=&quot;color: #ee2323;&quot;&gt;P&lt;/span&gt;hase&lt;br /&gt;진폭 + 위상 : &lt;span style=&quot;color: #ee2323;&quot;&gt;Q&lt;/span&gt;uadrature &lt;span style=&quot;color: #ee2323;&quot;&gt;A&lt;/span&gt;mplitude&lt;br /&gt;&lt;b&gt;주파수:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;F&lt;/span&gt;requency&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;폭: &lt;span style=&quot;color: #ee2323;&quot;&gt;W&lt;/span&gt;idth&lt;/b&gt;&lt;br /&gt;&lt;b&gt;수: &lt;span style=&quot;color: #ee2323;&quot;&gt;N&lt;/span&gt;umber&lt;br /&gt;펄스 코드 변조의 순서는 &lt;span style=&quot;color: #ee2323;&quot;&gt;표 &lt;b&gt;&amp;middot; &lt;/b&gt;양 &lt;b&gt;&amp;middot; &lt;/b&gt;부 &lt;b&gt;&amp;middot; &lt;/b&gt;복 &amp;middot; 여&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전송 제어 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전송 제어 절차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 통신 회선의 접속(&lt;span style=&quot;color: #ee2323;&quot;&gt;회선 연결&lt;/span&gt;)&lt;/b&gt;: 통신 회선과 단말기를 물리적으로 접속하는 단계&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 링크의 설정(&lt;span style=&quot;color: #ee2323;&quot;&gt;링크 확립&lt;/span&gt;)&lt;/b&gt;: 접속된 통신 회선상에서 논리적 경로를 구성하는 단계&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정보 메시지 전송(&lt;span style=&quot;color: #ee2323;&quot;&gt;전문 전달&lt;/span&gt;)&lt;/b&gt;: 설정된 데이터 링크를 통해 데이터를 수신 측에서 전송하는 단계&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 링크 종결(&lt;span style=&quot;color: #ee2323;&quot;&gt;링크 단절&lt;/span&gt;)&lt;/b&gt;: 송, 수신 측 간의 논리적 경로를 절단(해체)하는 단계&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 통신 회선의 절단(&lt;span style=&quot;color: #ee2323;&quot;&gt;회선 단절&lt;/span&gt;)&lt;/b&gt;: 통신 회선과 단말기 간의 물리적 접속을 절단(해제)하는 단계&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전송 제어 문자&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전송 제어 문자란 링크 관리, 프레임의 시작 및 끝의 구별과 오류 제어 등의 기능을 하는 것을 의미&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SYN(SYNchronous idle)&lt;/b&gt;: 문자 동기&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SOH(Start Of Heading)&lt;/b&gt;: 헤딩의 시작&lt;/li&gt;
&lt;li&gt;&lt;b&gt;STX(Start of TeXt)&lt;/b&gt;: 본문(텍스트)의 시작 및 헤딩의 종료&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ETX(End of TeXt)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;본문(텍스트)의 종료, 최종 블록에 들어갈 문자&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ETB(End of Transmission Bloack)&lt;/b&gt;: 블록의 종료&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EOT(End Of Transmission)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;전송 종료&lt;/span&gt; 및 데이터 링크의 해제&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ENQ(ENQuiry)&lt;/b&gt;: 상대편에 데이터 링크 설정 및 응답 요구&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DLE(Data Link Escape)&lt;/b&gt;: 전송 제어 문자 앞에 삽입하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;전송 제어 문자임을 알림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ACK(ACKnowlege)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;수신된 메시지에 대한 긍정 응답&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NAK(Negative AcKnowlege)&lt;/b&gt;: 수신된 메시지에 대한 부정 응답&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오류 제어 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오류 발생 원인&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;오류 발생 원인&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;&lt;b&gt;현상&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;감쇠(Attenuation)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;전송 신호 세력이 전송 매체를 통과하는 과정에서 거리에 따라 약해지는 현상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;지연 왜곡(Delay Distortion)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;하나의 전송 매체를 통해 여러 신호를 전달했을 때 주파수에 따라 그 속도가 달라짐으로써 생기는 오류&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;백색 잡음(White Noise)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;전송 매체 내부에서 온도에 따라 전자의 운동량이 변화함으로써 생기는 잡음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;누화 잡음 = 혼선(Cross Talk Noise)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;인접한 전송 매체의 전자기적 상호 유도 작용에 의해 생기는 잡음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;충격성 잡음(Impulse Noise)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;외부적인 충격 또는 통신 시스템의 결함이나 파손, 불량&lt;/span&gt; 등의 기계적인 충격에 의해 생기는 잡음&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;순간적으로 일어나는 높은 진폭&lt;/span&gt;의 잡음으로, 비연속적이고 불규칙적인 진폭을 갖음&lt;br /&gt;- 디지털 데이터를 전송하는 경우 중요한 오류 발생 요인이 됨&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;위상 지터 잡음(Phase Jitter Noise)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;전송 네트워크에서 전송 신호의 위상이 연속적으로 일그러지는 현상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.4651%;&quot;&gt;&lt;b&gt;위상 히트 잡음(Phase Hit Noise)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.5349%;&quot;&gt;전송 네트워크에서 전송 신호의 위상이 불연속적으로 순간 변화가 일어나는 현상&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자동 반복 요청(ARQ: Automatic Repeat reQuest)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;오류 발생 시 수신 측에 오류 발생을 통보하고, 송신 측은 오류 발생 블록을 재전송하는 모든 절차&lt;/span&gt;를 의미&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;역채널이 존재해야 하며&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;, &lt;/span&gt;수신된 블록에 에러가 발생한 경우 &lt;span style=&quot;color: #ee2323;&quot;&gt;인터럽트가 가능해야 하고&lt;/span&gt;, 전송 중인 메시지를 저장할 &lt;span style=&quot;color: #ee2323;&quot;&gt;버퍼 기억장치 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정지-대기(Stop-and-Wait) ARQ&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;송신 측에서 한 개의 블록을 전송한 후 수신 측으로부터 응답을 기다리는 방식&lt;/li&gt;
&lt;li&gt;수신 측의 응답이 긍정 응답(ACK)이면 다음 블록을 전송, 부정 응답(NAK)이면 앞서 송신했던 블록을 재전송&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;연속(Continuous) ARQ&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Go-Back-N ARQ&lt;/b&gt;: 여러 블록을 연속적으로 전송하고, 수신 측에서 부정 응답(NAK)을 보내오면 송신 측이 오류가 발생한 블록 이후의 모든 블록을 재전송&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선택적 재전송(Selective Repeat) ARQ&lt;/b&gt;: 여러 블록을 연속적으로 전송하고, 수신 측에서 부정 응답(NAK)을 보내오면 송신 측이 오류가 발생한 블록만 재전송&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;적응적(Adaptive) ARQ&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송 효율을 최대로 하기 위해 데이터 블록의 길이를 채널의 상태에 따라 그때그때 동적으로 변경하는 방식으로 전송 효율이 제일 좋음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전진(순방향) 오류 수정(FEC: Forward Error Correction)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 전송 과정에서 발생한 오류를 검출하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;검출된 오류를 재전송 요구 없이 스스로 수정하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;송신 측에서는 문자나 프레임에 오류 검출을 위한 부가 정보를 추가시켜 전송하고, 수신 측에서 이를 활용하여 수신한 데이터에 존재하는 오류를 발견하고 수정&lt;/li&gt;
&lt;li&gt;재전송 요구가 없기 때문에 &lt;span style=&quot;color: #ee2323;&quot;&gt;역채널이 필요 없고&lt;/span&gt;, 연속적인 데이터 흐름이 가능&lt;/li&gt;
&lt;li&gt;오류 검출과 수정을 위한 방식에는 해밍 코드 방식과 상승 코드 방식이 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;오류 검출 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;패리티 검사&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전송 비트들 중 값이 1인 비트의 개수가 짝수 또는 홀수가 되도록 패리티 비트를 부여&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;가장 간단한 방식으로 오류만 검출할 수 있고, 수정은 하지 못함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;두 개의 비트에 동시에 오류가 발생하면 검출 불가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;저속 비동기 방식에서 &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;주로&lt;span&gt; 사용&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;참고) &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-3-%EC%9E%90%EB%A3%8C%EC%9D%98-%ED%91%9C%ED%98%84%EA%B3%BC-%EC%97%B0%EC%82%B0#%ED%8C%A8%EB%A6%AC%ED%8B%B0%20%EA%B2%80%EC%82%AC%20%EC%BD%94%EB%93%9C(Parity%20Check%20Code)-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;패리티&amp;nbsp;검사&amp;nbsp;코드(Parity&amp;nbsp;Check&amp;nbsp;Code)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해밍 코드(Hamming Code) 방식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;수신 측에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;오류가 발생한 비트를 검출한 후 직접 수정&lt;/span&gt;하는 방식(자기 정정 부호)&lt;/li&gt;
&lt;li&gt;1비트의 오류만 수정이 가능하며 정보 비트 외에 잉여 비트가 많이 필요&lt;/li&gt;
&lt;li&gt;전송 비트 중 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;(1, 2, 4, 8, 16, 32 ... )번째를 &lt;span style=&quot;color: #ee2323;&quot;&gt;오류 검출을 위한 패리티 비트&lt;/span&gt;로 사용(위치 변화 X)&lt;/li&gt;
&lt;li&gt;송신한 데이터와 수신한 데이터의 각 대응하는 비트 중 서로 다른 비트의 수를 해밍 거리(Hamming Distance)라고 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정정 가능 최대 오류 수(tc)&lt;/b&gt;: dmin(최소 해밍 거리) - 1 / 2&lt;/li&gt;
&lt;li&gt;참고) &lt;a style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot; href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-3-%EC%9E%90%EB%A3%8C%EC%9D%98-%ED%91%9C%ED%98%84%EA%B3%BC-%EC%97%B0%EC%82%B0#%ED%95%B4%EB%B0%8D%20%EC%BD%94%EB%93%9C(Hamming%20Code)-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;해밍 코드(Hamming Code)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;순환 중복 검사(CRC: Cyclic Redundancy Check)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다항식 코드를 사용하여 오류를 검출하는 방식&lt;/li&gt;
&lt;li&gt;집단 오류를 검출할 수 있고, 검출률이 높으므로 가장 많이 사용&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;동기식 전송에서 주로 사용되며 SDLC, HDLC&lt;/span&gt; 프레임의 FCS(프레임 검사 순서 필드)에 사용되는 방식&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>대역폭</category>
      <category>변조</category>
      <category>병렬</category>
      <category>오류 검출</category>
      <category>오류 제어</category>
      <category>전송 제어</category>
      <category>정보처리기능사</category>
      <category>주파수</category>
      <category>직렬</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/460</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EA%B8%B0%EA%B8%B0%EB%8A%A5%EC%82%AC-15-%EC%A0%95%EB%B3%B4-%EC%A0%84%EC%86%A1-%EB%B0%A9%EC%8B%9D#entry460comment</comments>
      <pubDate>Mon, 31 Mar 2025 18:43:24 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 14. 정보 전송 회신</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-14-%EC%A0%95%EB%B3%B4-%EC%A0%84%EC%86%A1-%ED%9A%8C%EC%8B%A0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;통신 회선&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단말장치에 입력된 데이터 또는 컴퓨터에서 처리된 결과가 실질적으로 전송되는 물리적인 선로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1차 정수&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;저항(R), 정전용량(C), 인덕턴스(L), 누설 컨덕턴스(G)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2차 정수&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;감쇠정수, 위상정수, 전파정수, 특성 임피던스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;전송 선로의 무왜곡 조건&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;RC = LG&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;꼬임선(Twisted Pair Wire, 이중 나선)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;두 개의 절연된 구리선을 서로 꼬아(전기적 간섭 최소화) 하나의 전송 선로를 구성, 여러 쌍(Pair)의 꼬임선들을 하나로 묶어 케이블을 형성&lt;/li&gt;
&lt;li&gt;가격이 저렴하고 설치가 간편하지만 거리 대역폭, 데이터 전송률 면에서 제약이 많고 다른 전기적 신호의 간섭이나 잡음에 영향을 받기가 쉬움&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;동축 케이블(Coaxial Cable)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중심 도체를 플라스틱 절연체를 이용하여 감싸고, 이를 다시 &lt;span style=&quot;color: #ee2323;&quot;&gt;외부 도체&lt;/span&gt;를 이용하여 감싸는 형태로 구성&lt;/li&gt;
&lt;li&gt;꼬임선에 비해 외부 간섭과 누화의 영향이 적음&lt;/li&gt;
&lt;li&gt;고주파 특성이 양호하며, 광대역 전송에 적합, &lt;span style=&quot;color: #ee2323;&quot;&gt;CATV&lt;/span&gt;, 근거리 통신말, 장거리 전화 등에서 다양하게 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;광섬유 케이블(Optical Fiber Cable, 광 케이블)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유리로 제작된 가느다란 광섬유를 여러 가닥 묶어 케이블의 형태로 만든 것, 데이터를 전기 신호가 아닌 &lt;span style=&quot;color: #ee2323;&quot;&gt;빛으로 바꾸어 전송(전반사 원리)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;유선 매체 중 가장 빠른 속도와 &lt;span style=&quot;color: #ee2323;&quot;&gt;높은 주파수 대역폭&lt;/span&gt;을 제공하여 데이터의 전송률이 높음&lt;/li&gt;
&lt;li&gt;가늘고 가벼와 취급이 용이하고 대용량, 장거리 전송이 가능하며 &lt;span style=&quot;color: #ee2323;&quot;&gt;도청이 어려워 보안성이 뛰어남&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;절연성이 좋아 &lt;span style=&quot;color: #ee2323;&quot;&gt;전자 유도의 영향을 받지 않으므로(무유도성)&lt;/span&gt;, 전자기적인 문제가 최소화되어 안정된 통신 및 &lt;span style=&quot;color: #ee2323;&quot;&gt;누화 방지 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;광통신의 3요소&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;발광기&lt;/span&gt;(LD: &lt;span style=&quot;color: #ee2323;&quot;&gt;Laser Diode&lt;/span&gt;)&lt;/b&gt;: 전광 변환(전기 에너지 -&amp;gt; 빛 에너지), 송신 측 요소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;수광기&lt;/span&gt;(PD: &lt;span style=&quot;color: #ee2323;&quot;&gt;Photo Diode&lt;/span&gt;)&lt;/b&gt;: 광전 변환(빛 에너지 -&amp;gt; 전기 에너지), 수신 측 요소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;광심선(광 케이블)&lt;/b&gt;: 중계부로 석영, 유리로 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;광섬유 케이블의 구성&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;코어(Core)&lt;/b&gt;: 빛이 전파되는 영역, 클래드보다 높은 굴절률&lt;/li&gt;
&lt;li&gt;&lt;b&gt;클래딩(Cladding)&lt;/b&gt;: 코어의 빛이 외부로 빠져나가지 못하게 보호, 코어보다 약간 낮은 굴절률&lt;/li&gt;
&lt;li&gt;&lt;b&gt;재킷(Jacket)&lt;/b&gt;: 습기, 마모, 파손 등의 위험으로부터 내부를 보호&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;라디오파&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무선 주파수를 사용하여 통신 장비의 이동이 빈번하고 통신 회선을 이용하기 어려운 지역 간의 통신하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동축 케이블이나 광섬유 케이블의 대용으로 주로 장거리 통신(음성 전송) 서비스에 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;감쇠율이 적어 동축 케이블에 비해 중계기가 훨씬 적게 듬&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;지상 마이크로파&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3~40GHz의 주파수 대역을 사용하여 라디오파와 마찬가지로 장거리 전송에 높은 전송률을 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동축 케이블에 비해 중계기가 적게 듬&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;위성 마이크로파&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지상 마이크로파를 통신 위성을 통해 변환, 증폭한 후 다른 주파수로 지상에 송신하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대역폭이 넓어 고속 대용량 통신이 가능하고 통신 비용이 거리와 무관하게 일정하므로 저렴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류율이 적어 고품질의 정보 전송 가능이 가능하지만 통신 위성을 거쳐야 하므로 전송 지연 시간이 김&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;회선 구성 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;포인트 투 포인트(Point-To-Point) 방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;중앙 컴퓨터와 단말기를 독립적(1:1)으로 연결&lt;/span&gt;하여 언제든지 데이터 전송이 가능하게 한 방식으로 전용 회선 또는 교환 회선에 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전송할 데이터의 양과 회선 사용 시간이 많을 때 효율적이고 유지보수가 쉬움&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;1124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvQKXy/btsMS3P3fbc/tMkdhD0VmNKs7H7PKGo5v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvQKXy/btsMS3P3fbc/tMkdhD0VmNKs7H7PKGo5v1/img.png&quot; data-alt=&quot;포인트 투 포인트(Point-To-Point) 방식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvQKXy/btsMS3P3fbc/tMkdhD0VmNKs7H7PKGo5v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvQKXy%2FbtsMS3P3fbc%2FtMkdhD0VmNKs7H7PKGo5v1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;604&quot; data-origin-width=&quot;744&quot; data-origin-height=&quot;1124&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;포인트 투 포인트(Point-To-Point) 방식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;멀티 드롭(Multi-Drop, 멀티 포인트, Multi-Point) 방식&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 대의 단말기들을 한 개의 통신 회선(전용 회선)에 연결하는 방식, 제어용 컴퓨터가 주국이 되고 단말기가 종국이 됨&lt;/li&gt;
&lt;li&gt;전송할 데이터의 양과 외선 사용 시간이 적을 때 효율적이고 회선을 공유하기 때문에 효용도가 높고 가격이 저렴&lt;/li&gt;
&lt;li&gt;제어 소프트웨어가 복잡하며 데이터 전송은 폴링(Polling)과 셀렉션(Selection)에 의해 수행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;※ 폴링/셀렉션(Polling/Selection) 방식&lt;/b&gt;: 주 컴퓨터에서 송수신 제어권을 가지고 있는 방식
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;폴링(Polling)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;주컴퓨터가 &lt;/span&gt;단말기에게 전송할 데이터가 있는지 물은 후 전송을 허가(주컴퓨터 &amp;larr; 단말기)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;셀렉션(Selection)&lt;/b&gt;: &lt;span style=&quot;text-align: left;&quot;&gt;주컴퓨터가 &lt;/span&gt;단말기에게 데이터를 받을 준비가 되어 있는지 물은 후 전송(주컴퓨터 &amp;rarr; 단말기)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;732&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qIbto/btsMUt7Kca8/a4AammHxo8dCvYzS09Uey1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qIbto/btsMUt7Kca8/a4AammHxo8dCvYzS09Uey1/img.png&quot; data-alt=&quot;멀티 드롭(Multi-Drop, 멀티 포인트, Multi-Point) 방식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qIbto/btsMUt7Kca8/a4AammHxo8dCvYzS09Uey1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqIbto%2FbtsMUt7Kca8%2Fa4AammHxo8dCvYzS09Uey1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;402&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;732&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;멀티 드롭(Multi-Drop, 멀티 포인트, Multi-Point) 방식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;통신 속도와 통신 용량&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;통신 속도&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;변조 속도&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1초 동안 신호 변화 수&lt;/span&gt;를 나타내는 것&lt;/li&gt;
&lt;li&gt;단위는 &lt;span style=&quot;color: #ee2323;&quot;&gt;baud&lt;/span&gt;를 사용, baud = 1/1개의 신호가 변조회는 시간(초)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;변조 속도 = 신호 속도 / 변조 시 상태 변화 수&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;신호 속도&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1초 동안 전송 가능한 비트의 수&lt;/span&gt;를 나타내는 것&lt;/li&gt;
&lt;li&gt;단위는 &lt;span style=&quot;color: #ee2323;&quot;&gt;bps(bit/sec)&lt;/span&gt;를 사용, 1Kbps = 1초에 1,000개의 비트 전송 가능을 의미&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;신호 속도 = 변조 속도 X 변조 시 상태 변화 수&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ &lt;span style=&quot;color: #ee2323;&quot;&gt;변조 시 상태 변화 수&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;모노비트(Monobit): 1&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;Bit&lt;/span&gt;, 디비트(Dibit): 2&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;Bit&lt;/span&gt;, 트리비트(Tribit): 3Bit, 쿼드비트(Quadbit): 4Bit&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전송 속도&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단위 시간에 전송되는 데이터의 양(문자, 블록, 비트, 단어 수 등)을 나타내는 것&lt;/li&gt;
&lt;li&gt;단위는 정해진 것은 없으나 보통 문자/초(분, 시간), 블록/초(분, 시간), 단어/초(분, 시간), 비트/초(분, 시간) 등과 같은 형식&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;통신 용량&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단위 시간 동안 전송 회선이 최대로 전송할 수 있는 통신 정보량을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;샤논(Shannon)의 정의&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;C(통신 용량) = W(대역폭) &amp;middot; log2(1+&lt;span style=&quot;color: #ee2323;&quot;&gt;S(신호 전력)&lt;/span&gt;/&lt;span style=&quot;color: #ee2323;&quot;&gt;N(잡음 전력)&lt;/span&gt;)[bps]&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;통신 용량을 늘리기 위한 방법으로는 주파수 대역폭 &amp;uarr;, 신호 세력 &amp;uarr;, 잡음 세력&amp;nbsp;&amp;darr;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>정보처리기능사</category>
      <category>케이블</category>
      <category>통신 속도</category>
      <category>통신 용량</category>
      <category>통신 회선</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/459</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-14-%EC%A0%95%EB%B3%B4-%EC%A0%84%EC%86%A1-%ED%9A%8C%EC%8B%A0#entry459comment</comments>
      <pubDate>Sat, 22 Mar 2025 05:35:29 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 13. 정보 통신의 개요</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-13-%EC%A0%95%EB%B3%B4-%ED%86%B5%EC%8B%A0%EC%9D%98-%EA%B0%9C%EC%9A%94</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;정보 통신(Information Communication)의 개념&lt;/h2&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;정보 통신의 개요&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터와 통신 기술의 결합에 의해 통신 처리 기능과 정보 처리 기능, 정보의 변환, 저장 과정이 추가된 형태의 통신&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이용약관은 정보통신관계법령으로 규정&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;정보 통신 = 전기 통신(정보 전송) + 컴퓨터(정보 처리)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;정보 통신과 데이터 통신&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정보 통신&lt;/b&gt;: 정보를 상호 교환하기 위해 수행되는 모든 행위(광범위한 개념)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 통신&lt;/b&gt;: 컴퓨터에서 처리된 데이터, 즉 2진 정보를 송수신하는 것을 의미&lt;/li&gt;
&lt;li&gt;그러나 통신을 통해 상호 교환되는 정보는 대부분 컴퓨터를 통한 2진 정보이므로, 데이터 통신과 정보 통신을 혼용하여 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;전기 통신(Telecommunication)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전기적인 신호를 전달 매체로 하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;아날로그 형태의 음성 정보를 송수신&lt;/span&gt;하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;데이터 통신(Data Communication)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터와 각종 통신 기기 사이에서 디지털 형태로 표현된 2진 정보를 송수신하는 것&lt;/li&gt;
&lt;li&gt;데이터 통신 = 테이터 전송 기술 + 데이터 처리 기술&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ITU-T&lt;/b&gt;: 정보를 기계로 처리하거나 처리한 정보를 전송하는 것&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정보 통신의 3요소&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정보원(Source)&lt;/b&gt;: 정보를 입력받아 전송하는 장소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수신원(Destination)&lt;/b&gt;: 전송된 정보를 수신하는 장소&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전송 매체(Transmission Medium)&lt;/b&gt;: 정보원과 수신원을 연결하는 매체(통신 회선)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;자료와 정보&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;자료(Data)&lt;/b&gt;: 관찰이나 측정을 통해 수집한 단순한 사실이나 결과값&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정보(Information)&lt;/b&gt;: 의사 결정에 도움을 줄 수 있는 유용한 형태로, 자료를 가공(처리) 한 것
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;정보는 사람에 따라 중요도가 달라질 수 있으며, 일정한 시간이 흐르면 효력이 감소&lt;/li&gt;
&lt;li&gt;정보의 가치는 연속적인 정보활동과 축적으로 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;정보화 자료의 진화 과정&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;자료(Data) -&amp;gt; 정보(Information) -&amp;gt; 지식(Knowledge) -&amp;gt; 지능(Intelligence)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;통신 부호 코드&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;BAUDOT 코드&lt;/b&gt;: 텔렉스(Telex)에 사용된 전신 부호 코드(5Bit = 32개의 정보 표현이 가능)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ASCII 코드&lt;/b&gt;&lt;/span&gt;: 국제 전기통신부호 제5호(No. 5)로 &lt;span style=&quot;color: #ee2323;&quot;&gt;데이터 통신용&lt;/span&gt;이나 PC에서 사용하는 코드(7Bit = 128개의 정보 표현이 가능)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EBCDIC 코드&lt;/b&gt;: 주로 대형 컴퓨터에서 사용하는 코드(8Bit = 256개의 정보 표현이 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정보 통신 시스템의 특징&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고속&amp;middot;고품질의 전송 가능, 고도의 오류 제어 방식을 사용하여 시스템의 신뢰도가 높음&lt;/li&gt;
&lt;li&gt;대형 컴퓨터와 대용량 파일을 공동으로 이용 가능, 대용량&amp;middot;광대역 전송 가능&lt;/li&gt;
&lt;li&gt;분산 처리가 가능, 거리와 시간의 현계를 극복&lt;/li&gt;
&lt;li&gt;통신 비밀을 유지하기 위한 보안 시스템의 개발 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정보 통신의 발달 과정(순서 중요)&lt;/span&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;음성용 전용 회선 이용&lt;/b&gt;: 전화를 이용한 송수신 방식, 모뎀을 통해 저, 중속의 데이터 통신이 이루어짐&lt;/li&gt;
&lt;li&gt;&lt;b&gt;기존 전화 교환망의 이용&lt;/b&gt;: 기존의 전화 교환망을 이용하는 방식, 비용 절감, 정보 통신의 보급 확산, 효율성 증대&lt;/li&gt;
&lt;li&gt;&lt;b&gt;광대역 회선의 이용&lt;/b&gt;: 10Kbps 이상의 전송 속도를 가지는 광대역 모뎀 사용, FDM(주파수 분할 다중화기)을 이용한 대량의 데이터를 동시에 전송&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디지털 전용 회선 이용&lt;/b&gt;: PCM 방식을 통해 음성을 디지털화하는 방식, 디지털 서비스 유닛(DSU) 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 전용 교환망 이용&lt;/b&gt;: 회선 교환이나 패킷 교환 방식 이용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;종합정보 통신망(ISDN)&lt;/b&gt;: 하나의 회선을 통해 음성, 문자, 화상 정보 등을 디지털 방식으로 통합 처리&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정보 통신 시스템의 발달 과정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SAGE(Semi-Automatic Ground Environment)&lt;/b&gt;: 미 공군에 설치된 반자동 &lt;span style=&quot;color: #ee2323;&quot;&gt;군사 분야&lt;/span&gt; 방공 시스템(1958), &lt;span style=&quot;color: #ee2323;&quot;&gt;최초의 데이터 통신 시스템&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SABRE(Semi-Automatic Business Research Environment)&lt;/b&gt;:아메리칸 에어라인 항공사에서 도입한 항공 좌석 예약 시스템(1963), 최초의 상업용 데이터 통신 시스템&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ARPANET(Advanced Research Project Agency NETwork)&lt;/b&gt;: 미 국방성에서 설치한 최초의 유선 패킷 교환 시스템(1969), 인터넷의 효시가 된 통신 시스템&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ALOHA(Additive Links On-line Hawaii Area)&lt;/b&gt;: 미 하와이 대학에서 실험적으로 설치한 최초의 무선 패킷 교환 시스템(&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;1970)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;정보 통신 시스템&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정보 통신 시스템의 기본 구성&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;991&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEaIK/btsMSv0B3gi/8i2GQLzGxcZRN3RxLWbHS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEaIK/btsMSv0B3gi/8i2GQLzGxcZRN3RxLWbHS1/img.png&quot; data-alt=&quot;정보 통신 시스템의 기본 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEaIK/btsMSv0B3gi/8i2GQLzGxcZRN3RxLWbHS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEaIK%2FbtsMSv0B3gi%2F8i2GQLzGxcZRN3RxLWbHS1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;991&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;991&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;정보 통신 시스템의 기본 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;단말장치(DTE: Data Terminal Equipment)&lt;/b&gt;: 데이터 통신 시스템과 외부 사용자의 접속점에 위치, 최종적으로 데이터를 입출력하는 장치&lt;/li&gt;
&lt;li&gt;&lt;b&gt;신호 변환 장치(DCE: Data Circuit Equipment)&lt;/b&gt;: 컴퓨터나 단말장치의 데이터 또는 통신 회선에 적합한 &lt;span style=&quot;color: #ee2323;&quot;&gt;신호로 변경하는&amp;nbsp;기능을 수행&lt;/span&gt;, 통신 회선의 종류에 따라 사용하는 기기가 달라짐&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통신 회선&lt;/b&gt;: 단말장치에 입력된 데이터 또는 컴퓨터에서 처리된 결과가 실질적으로 전송되는 전송 선로
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;유선 매체&lt;/b&gt;: 꼬임선, 동축 케이블, 광섬유, 케이블 등&lt;/li&gt;
&lt;li&gt;&lt;b&gt;무선 매체&lt;/b&gt;: 라디오파, 지상 마이크로파, 위성 마이크로파 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통신 제어장치(CCU: Communication Control Unit)&lt;/b&gt;: 통신 회선과 주 컴퓨터 사이를 전기적으로 연결하는 장치
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;기능&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;전기적 결합, 회선 제어, 전송 제어, 동기 및 오류 제어&lt;/span&gt; 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컴퓨터(Host)&lt;/b&gt;: 단말장치에 보낸 데이터를 처리하는 곳, 처리된 데이터는 다시 통신 회선을 통해 단말장치로 전달
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;하드웨어&lt;/b&gt;: 중앙처리장치, 주변장치&lt;/li&gt;
&lt;li&gt;&lt;b&gt;소프트웨어&lt;/b&gt;: 시스템 소프트웨어(운영체제), 응용 소프트웨어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;온라인 시스템의 3대 구성 요소&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;단말장치(단말기), 통신 회선(전송 매체), 전송 제어장치(TCU: Transmission Control Unit)&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전처리기(FEP: Front End Processor)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;통신 제어장치의 일종으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;호스트(중앙) 컴퓨터와 단말장치 사이에 고속 통신 회선&lt;/span&gt;으로 설치&lt;/li&gt;
&lt;li&gt;통신 회선 및 단말장치 제어, 메시지의 조립과 분해(수신한 데이터를 컴퓨터가 처리하기 쉽게 일정 크기로 묶거나, 처리된 데이터를 송신하기 위해 하나씩 나누는 작업), &lt;span style=&quot;color: #ee2323;&quot;&gt;전송 메시지 검사(보낼 상태 또는 받을 상태 검사), 오류(Error) 검출&lt;/span&gt; 등을 수행하므로 컴퓨터의 부담을 해소&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;정보 통신 시스템의 처리 형태&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오프라인 시스템(Off-Line System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단말장치와 컴퓨터가 통신 회선으로 직접 연결되어 있지 않은 형태&lt;/li&gt;
&lt;li&gt;자료 입력과 데이터의 처리를 위한 정보 운반을 사람이 직접 수행, 단말장치와 컴퓨터 사이에 데이터를 임시로 보관할 기록 매체 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;온라인 시스템(On-Line System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터가 발생한 단말장치와 데이터를 처리할 컴퓨터가 통신 회선을 통해 직접 연결된 형태&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 중앙처리장치에 통신 회선을 통하여 여러 개의 입출력 장치를 항시 연결해서 자료를 처리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;단말장치, 중앙 처리장치, 통신 제어장치, 통신 회선 등으로 구성, 실시간 처리가 요구되는 작업에 주로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;일괄 처리 시스템(Batch Processing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;처리할 데이터를 일정 양이나 &lt;span style=&quot;color: #ee2323;&quot;&gt;일정 시간 동안 모았다가 한 번에 처리&lt;/span&gt;하고, 처리된 결과 또한 일정 양이나 일정 시간 동안 모았다가 전달하는 방식&lt;/li&gt;
&lt;li&gt;급여 관리, 긴급을 요하지 않는 과학 기술 업무 등에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실시간 처리 시스템(Real Time Processing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터가 발생한 &lt;span style=&quot;color: #ee2323;&quot;&gt;즉시 처리&lt;/span&gt;하여 처리된 결과를 반환&lt;/li&gt;
&lt;li&gt;은행 업무, 예약 업무, 각종 조회 업무 등에 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;거래 처리(Transaction Processing)&lt;/b&gt;: 발생된 거래 상황을 직접 컴퓨터에 입력하여 처리한 후 결과를 바로 전달하는 방식&lt;/li&gt;
&lt;li&gt;&lt;b&gt;질의/응답(Inquiry/Response)&lt;/b&gt;: 데이터베이스에 대량의 정보를 저장한 후 필요한 정보를 질의하면 알맞은 응답을 즉시 전달하는 방식(검색, 주식 시세, 일기 예보 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메시지 교환(Message Switching)&lt;/b&gt;: 단말장치에서 입력된 데이터를 요구된 특정 단말장치로 전달하는 방식(계좌 이체 업무 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시분할 처리 시스템(Time Sharing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터를 사용할 수 있는 &lt;span style=&quot;color: #ee2323;&quot;&gt;시간을 일정하게 쪼개&lt;/span&gt; 여러 개의 단말장치가 &lt;span style=&quot;color: #ee2323;&quot;&gt;정해진 시간(Time Slice) 동안 번갈아가며 컴퓨터를 사용&lt;/span&gt;하는 방식&lt;/li&gt;
&lt;li&gt;컴퓨터의 처리 속도가 빨라져 &lt;span style=&quot;color: #ee2323;&quot;&gt;사용자는 컴퓨터를 혼자 독점하여 사용하는 것처럼 느껴짐&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;단말장치 사용자와 컴퓨터 사이의 정보 전송이 대화하듯이 수행되므로, 대화형 처리 방식이라고도 함&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>데이터 통신</category>
      <category>시분할 처리</category>
      <category>오프라인</category>
      <category>온라인</category>
      <category>일괄 처리</category>
      <category>전기 통신</category>
      <category>전처리기</category>
      <category>정보 통신</category>
      <category>정보처리기능사</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/458</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-13-%EC%A0%95%EB%B3%B4-%ED%86%B5%EC%8B%A0%EC%9D%98-%EA%B0%9C%EC%9A%94#entry458comment</comments>
      <pubDate>Sat, 22 Mar 2025 04:14:53 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 12. UNIX</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-12-UNIX</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;UNIX의 개요&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UNIX의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시분할 시스템(Time Sharing System)을 위해 설계된 운영체제로 주로 서버용 컴퓨터에서 사용&lt;/li&gt;
&lt;li&gt;소스가 공개된 개방형 시스템(Open System)으로 대부분 C언어로 작성되어 있어 크기가 작고 이해하기 쉬우며 이식성이 높고 장치와 프로세스 간의 호환성이 높음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다중 사용자(Multi-User), 다중 작업(Multi-Tasking)을 지원&lt;/span&gt;하며 많은 네트워크 기능을 제공하므로 통신망(Network) 관리용 운영체제로 적합&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;계층적 트리 구조의 파일 시스템&lt;/span&gt;을 갖고, 파일 형식은 &lt;span style=&quot;color: #ee2323;&quot;&gt;일반 파일, 디렉터리 파일, 특수 파일&lt;/span&gt; 형식 제공&lt;/li&gt;
&lt;li&gt;표준 입출력을 통해 명령어들이 파이프라인으로 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UNIX 시스템의 구성&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;1124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/weMUY/btsMRdZlvRI/Jv2wYMnQDkfnaMPKdYvz41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/weMUY/btsMRdZlvRI/Jv2wYMnQDkfnaMPKdYvz41/img.png&quot; data-alt=&quot;UNIX 시스템의 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/weMUY/btsMRdZlvRI/Jv2wYMnQDkfnaMPKdYvz41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FweMUY%2FbtsMRdZlvRI%2FJv2wYMnQDkfnaMPKdYvz41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;373&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;1124&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;UNIX 시스템의 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;커널(Kernel)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;UNIX의 가장 &lt;span style=&quot;color: #ee2323;&quot;&gt;핵심&lt;/span&gt;적인 부분으로, 컴퓨터가 부팅될 때 주기억장치에 적재된 후 상주하면서 실행&lt;/li&gt;
&lt;li&gt;하드웨어를 보호하고, 하드웨어와 프로그램 간의 인터페이스 역할을 담당, 하드웨어와 프로세스의 &lt;span style=&quot;color: #ee2323;&quot;&gt;보안 책임&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;테스트 스케줄링(Task Scheduling), 기억장치 관리(Memory Management)&lt;/span&gt;, 파일 관리, 입출력 관리, 데이터 전송 및 변환 등의 기능 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;쉘(Shell)&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자로부터 명령어를 입력받아 해석하여 커널로 처리할 수 있도록 전달해주는 &lt;span style=&quot;color: #ee2323;&quot;&gt;명령어 해석기(명령 인터프리터)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-DOS%EC%9D%98-%EA%B0%9C%EC%9A%94#%ED%8C%8C%EC%9D%BC-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DOS의 COMMAND.COM&lt;/a&gt;과 같은 기능을 수행하지만, &lt;span style=&quot;color: #ee2323;&quot;&gt;주기억장치에 상주하지 않고&lt;/span&gt; 명령어가 포함된 파일 형태로 존재하며 보조기억장치에서 교체 처리가 가능&lt;/li&gt;
&lt;li&gt;공용 Shell(&lt;span style=&quot;color: #ee2323;&quot;&gt;Bourne Shell, C Shell, Korn Shell&lt;/span&gt;)이나 사용자 자신이 만든 Shell도 사용 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Bourne Shell&lt;/b&gt;: 크기가 작아 시스템 자원을 많이 소비하지 않고, 실행이 빨라 프로그래밍에 적합&lt;/li&gt;
&lt;li&gt;&lt;b&gt;C Shell&lt;/b&gt;: 가장 많이 사용되는 Shell로 C언어와 유사, 기본 프롬프트: %&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Korn Shell&lt;/b&gt;: Bourne Shell 기반으로 C Shell의 기능을 추가한 것&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;유틸리티(Utility Program)&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자가 작성한 응용 프로그램을 처리하는 데 사용(&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-DOS%EC%9D%98-%EA%B0%9C%EC%9A%94#%EC%99%B8%EB%B6%80%20%EB%AA%85%EB%A0%81%EC%96%B4-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;DOS의 외부명령어&lt;/a&gt;에 해당)&lt;/li&gt;
&lt;li&gt;시스템 편집기(Editor), 컴파일러, 인터프리터, 디버거 등 존재
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;제공하는 시스템 편집기(Editor): vi, ed, emacs, pico, joe 등&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;UNIX 파일 시스템(File System)&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;계층적 트리 구조&lt;/span&gt; 형태로 디스크를 블록으로 분류하여 배치한 구조&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;부트 블록(Boot Block)&lt;/b&gt;: 부팅 시 필요한 코드를 저장하고 있는 블록&lt;/li&gt;
&lt;li&gt;&lt;b&gt;슈퍼 블록(Super Block)&lt;/b&gt;: 전체 파일 시스템에 대한 정보를 저장하고 있는 블록&lt;/li&gt;
&lt;li&gt;&lt;b&gt;I-node(Index node) 블록&lt;/b&gt;: 파일 및 디렉터리에 대한 모든 정보를 저장하고 있어 이를 관리하기 위해 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 블록&lt;/b&gt;: 디렉터리별로 디렉터리 엔트리와 실제  파일에 대한 데이터가 저장된 블록&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTWPHw/btsMQbOSBz2/TyvFG1f5Jz7YLlBnx7w1WK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTWPHw/btsMQbOSBz2/TyvFG1f5Jz7YLlBnx7w1WK/img.png&quot; data-alt=&quot;UNIX 파일 시스템&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTWPHw/btsMQbOSBz2/TyvFG1f5Jz7YLlBnx7w1WK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTWPHw%2FbtsMQbOSBz2%2FTyvFG1f5Jz7YLlBnx7w1WK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;426&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;724&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;UNIX 파일 시스템&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;UNIX 명령어&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;명령어의 기본 형식&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;[프롬프트] 명령어 [옵션] [매개변수]&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;프롬프트&lt;/b&gt;: 쉘(Shell)의 종류에 따라 다르게 표시($ % #)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;명령어&lt;/b&gt;: 대,소문자를 구분하여 입력&lt;/li&gt;
&lt;li&gt;명령어와 옵션 사이에는 반드시 공백이 존재, 옵션 지정 시 앞에 &quot;-&quot;을 붙혀야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시스템 및 프로세스 관련 명령어&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 250px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;kill&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현재 실행중인 프로세스 종료&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;편집 상태에서는 한 줄 전체 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;fork&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;새로운 프로세스 생성&lt;/span&gt;(하위 프로세스 호출, 프로세스 복제)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 19px;&quot;&gt;&lt;b&gt;exec&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 19px;&quot;&gt;새로운 프로세스를 수행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;finger&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시스템에 등록되어 있는 사용자 정보를 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ps&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현재 작업중인 프로세스의 상태 표시&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;옵션에 a 지정 시 모든 프로세스 상태 표시&lt;/span&gt;&lt;br /&gt;(이름, 명령어 이름, 프로세스 ID, 제어 단말기와 소유주 속성 목록, 수행된 시간 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ping&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;특정 시스템과 접속이 안 될 경우 네트워크 상의 문제 진단&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;b&gt;login&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;UNIX 작업을 위해 사용자 ID와 비밀번호를 받아 사용자 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;logout&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;UNIX 시스템에 대한 접속을 종료 (&lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl] + [D], exit&lt;/span&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;passwd&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;로그인할 때 필요한 비밀번호를 설정&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;(명령어 인수 필수 X)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;who&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;로그인한 사용자에 관한 정보 표시&lt;br /&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;단말기명, 로그인명, 로그인 일시, 사용중인 단말기 번호 등&lt;/span&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;b&gt;mount&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;파일 시스템을 마운팅/마운팅 해제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 13.6047%; height: 17px;&quot;&gt;&lt;b&gt;dump&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 86.3953%; height: 17px;&quot;&gt;주기억장치의 내용을 화면이나 프린터, 디스크 등에 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;디렉터리 관련 명령어&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 190px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;UNIX 명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;DOS 명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;pwd&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현재 작업중인 디렉터리 경로를 화면에 출력(명령어 인수 필수 X)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;ls&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;dir&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;현재&amp;nbsp;&lt;/span&gt;작업중인 디렉터리의 모든 파일을 표시&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;구분자: -(일반 파일, 이진 파일), b(블록형 특수 파일), c(문자형 특수 파일), d(디렉터리), l(링크 파일)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;mkdir&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;md&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;디렉터리 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;rmdir&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;rd&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;디렉터리 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;cd&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;다른 디렉터리로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;.&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;현재 디렉터리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;..&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;..&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;상위 디렉터리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 13.6821%; height: 19px;&quot;&gt;&lt;b&gt;/&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%; height: 19px;&quot;&gt;&lt;b&gt;\&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%; height: 19px;&quot;&gt;루트 디렉터리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일 관련 명령어&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;UNIX 명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&lt;b&gt;DOS 명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;create&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;파일 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;open&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;파일을 사용할 수 있는 상태로 준비&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;close&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;파일 닫기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;cp&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&lt;b&gt;copy, xcopy&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;파일 복사&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;rm&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&lt;b&gt;del&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;파일 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;cat&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&lt;b&gt;type&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;파일의 내용을 화면에 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;chmod&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&lt;b&gt;attrib&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;파일의 보호 모드를 설정(파일 사용 허가)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;chown&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;소유자 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;find&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;파일 찾기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;mv&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;파일 이동 및 이름 변경&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;wc&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;파일 내 라인 수, 단어 수, 문자 수 등을 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;cmp&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;두 파일을 비교하여 차이가 나는 바이트 위치와 행 번호를 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;comm&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;두 파일을 비교하여 한쪽에만 있거나 양쪽에 모두 있는 라인을 찾아 표시&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;행 단위로 비교할 때 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;diff&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&lt;b&gt;fc&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;두 파일을 비교하여 차이점을 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 13.6821%;&quot;&gt;&lt;b&gt;paste&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 12.7519%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 73.5659%;&quot;&gt;하나의 파일 끝에 다른 파일의 내용을 추가&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;파일 및 디렉터리의 소유권&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;chmod 명령어를 이용해 소유권 부여 시 UNIX 사용자는 소유자(&lt;span style=&quot;color: #ee2323;&quot;&gt;u&lt;/span&gt;ser), 그룹(&lt;span style=&quot;color: #ee2323;&quot;&gt;g&lt;/span&gt;roup), 기타 사용자(&lt;span style=&quot;color: #ee2323;&quot;&gt;o&lt;/span&gt;thers)로 나누어 8진수 숫자로 지정 가능&lt;/li&gt;
&lt;li&gt;각 &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-3-%EC%9E%90%EB%A3%8C%EC%9D%98-%ED%91%9C%ED%98%84%EA%B3%BC-%EC%97%B0%EC%82%B0#8%EC%A7%84%EC%88%98%2C%2016%EC%A7%84%EC%88%98%20-%3E%202%EC%A7%84%EC%88%98-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;8진수를 3자리의 2진수로 변환&lt;/a&gt; 시 각 자리마다 읽기(&lt;span style=&quot;color: #ee2323;&quot;&gt;r&lt;/span&gt;ead), 쓰기(&lt;span style=&quot;color: #ee2323;&quot;&gt;w&lt;/span&gt;rite), 실행(e&lt;span style=&quot;color: #ee2323;&quot;&gt;x&lt;/span&gt;ecute) 속성을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;% chmod 7(&lt;span style=&quot;color: #ee2323;&quot;&gt;u&lt;/span&gt;) 5(&lt;span style=&quot;color: #ee2323;&quot;&gt;g&lt;/span&gt;) 4(&lt;span style=&quot;color: #ee2323;&quot;&gt;o&lt;/span&gt;) {파일명}&lt;br /&gt;&amp;rarr; % chmod 111(&lt;span style=&quot;color: #ee2323;&quot;&gt;rwx&lt;/span&gt;) 101(&lt;span style=&quot;color: #ee2323;&quot;&gt;r-x&lt;/span&gt;) 100(&lt;span style=&quot;color: #ee2323;&quot;&gt;r--&lt;/span&gt;) {파일명}&lt;br /&gt;&amp;rarr; 소유자는 모든 권한, 그룹에는 쓰기&amp;amp;실행 권한, 기타 사용자에게는 읽기 권한 부여&lt;/blockquote&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 87px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;8진수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;2진수&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;권한&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;111&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;rwx&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;모든 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;110&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;rw-&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;읽기, 쓰기 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;101&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;r-x&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;읽기, 실행 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;100&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;r--&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 17px;&quot;&gt;읽기 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;011&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;-wx&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;쓰기, 실행 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;010&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;-w-&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;쓰기 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;001&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;--x&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;실행 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;000&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;---&lt;/td&gt;
&lt;td style=&quot;width: 20%;&quot;&gt;모든 권한 해제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증</category>
      <category>Unix</category>
      <category>리눅스</category>
      <category>명령어</category>
      <category>쉘</category>
      <category>유틸리티</category>
      <category>정보처리기능사</category>
      <category>커널</category>
      <category>파일 권한</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/457</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-12-UNIX#entry457comment</comments>
      <pubDate>Thu, 20 Mar 2025 21:09:55 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 11. WINDOWS(2/2)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글: &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742372902824&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;정보처리기능사 - 11. WINDOWS(1/2)&quot; data-og-description=&quot;최신 Windows의 특징 / 부팅 메뉴최신&amp;nbsp;Windows의&amp;nbsp;특징하드웨어를 효율적으로 관리하고 사용자에게는 더 편리한 컴퓨터 환경을 제공하기 위해 만들어진 개인용 컴퓨터 운영체제그래픽 사용자 인터&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/DbySU/hyYvg3djTi/fpr4GaJSauRs5JkbqBZz31/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cs7Rig/hyYr0U6NR3/PxMuLFFcsk8NWTo221NGK1/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/PRhrV/hyYufDBWXn/RHhKTDXTtkRd4GHf484oTK/img.png?width=2048&amp;amp;height=1494&amp;amp;face=0_0_2048_1494&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/DbySU/hyYvg3djTi/fpr4GaJSauRs5JkbqBZz31/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cs7Rig/hyYr0U6NR3/PxMuLFFcsk8NWTo221NGK1/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/PRhrV/hyYufDBWXn/RHhKTDXTtkRd4GHf484oTK/img.png?width=2048&amp;amp;height=1494&amp;amp;face=0_0_2048_1494');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;정보처리기능사 - 11. WINDOWS(1/2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;최신 Windows의 특징 / 부팅 메뉴최신&amp;nbsp;Windows의&amp;nbsp;특징하드웨어를 효율적으로 관리하고 사용자에게는 더 편리한 컴퓨터 환경을 제공하기 위해 만들어진 개인용 컴퓨터 운영체제그래픽 사용자 인터&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;파일과 폴더&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일과 폴더의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일은 디스트에 저장되는 기본 단위,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;폴더&lt;/span&gt;는 파일을 모아 관리하기 위한 장소(&lt;span style=&quot;color: #ee2323;&quot;&gt;DOS에서 디렉터리와 유사한 개념&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;하나의 폴더 내에는 동일한 이름의 파일이나 폴더 존재 불가(&lt;span style=&quot;color: #ee2323;&quot;&gt;* / ? \ : &amp;lt; &amp;gt; &quot; | 등 이름으로 사용 불가&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;파일은 파일명과 확장자로 구성, 마침표(.)를 이용하여 구분&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Window 탐색기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터에 설치된 응용 프로그램 관리 및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;디스크 드라이브, 파일 및 폴더&lt;/span&gt;에 관련한 모든 작업 수행&lt;/li&gt;
&lt;li&gt;탐색 창과 파일 영역(폴더 창) 두 부분으로 나누어져 컴퓨터의 모든 파일과 폴더를 계층(트리) 구조로 표시&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일/폴더 이름 바꾸기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;[파일] 메뉴 이용&lt;/b&gt;: Window 탐색기 -&amp;gt; [파일] -&amp;gt; [이름 바꾸기] 선택 -&amp;gt; 이름 입력 후 [Enter]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바로 가기 키 이용&lt;/b&gt;: [F2] -&amp;gt; 이름 이력 후 [Enter], Window 탐색기 -&amp;gt; [Alt] + [F], [M]을 차례로 누르고 이름 이력 후 [Enter]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바로 가기 메뉴 이용&lt;/b&gt;: 바로 가기 메뉴 -&amp;gt; [이름 바꾸기] 선택 -&amp;gt; 이름 입력 후 [Enter]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마우스 이용&lt;/b&gt;: 파일이나 폴더를 선택한 상태에서 이름 부분을 다시 클릭 -&amp;gt; 이름 입력 후 [Enter]&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일/폴더 선택&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;하나의 항목 선택&lt;/b&gt;: 항목을 마우스 왼쪽 버튼으로 클릭&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;연속적&lt;/span&gt;인(&lt;span style=&quot;color: #ee2323;&quot;&gt;이웃하는&lt;/span&gt;) 항목 선택&lt;/b&gt;: 선택할 항목의 범위를 마우스로 드래그, 첫 번째 항목을 클릭 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Shift]&lt;/span&gt;를 누른 상태에서 마지막 항목 클릭&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;비연속적&lt;/span&gt;인&lt;b&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;이웃하지 않는&lt;/span&gt;)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;항목 선택&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl]&lt;/span&gt;을 누른 상태에서 선택할 항목을 선택&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전체 항목 선택&lt;/b&gt;: [편집] -&amp;gt; [전체 선택]을 선택 ([Ctrl] + [A])&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선택 항목 반전&lt;/b&gt;: [편집] -&amp;gt; [선택 항목 반전]을 선택 (선택한 항목을 해제하고 나머지 항목이 선택)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일/폴더 찾기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일과 폴더의 이름을 입력하여 찾을 수 있으며, 만능 문자(와일드카드, *, ?)를 이용하여 특정 문자열을 포함한 파일 검색 가능(&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;*&quot;은 모든 자리, &quot;?&quot;는 한 자리를 나타날 때 사용)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;하위 폴더까지 검색 여부를 지정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일/폴더 복사&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;[편집] 메뉴 이용&lt;/b&gt;: [편집] -&amp;gt; [복사] 선택 -&amp;gt; 복사할 위치에서 [편집] -&amp;gt; [붙여 넣기] 선택&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바로 가기 키 이용&lt;/b&gt;: [Ctrl] + [C] -&amp;gt; 복사할 위치에서 [Ctrl] + [V]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키보드와 마우스 사용&lt;/b&gt;: 같은 드라이브에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl]&lt;/span&gt;을 누른 상태에서 마우스로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;복사&lt;/span&gt;할 위치에 드래그 앤 드롭, 다른 드라이브에서는 마우스로 복사할 위치에 드래그 앤 드롭&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일/폴더 이동&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;[편집] 메뉴 이용&lt;/b&gt;: [편집] -&amp;gt; [잘라내기] 선택 -&amp;gt; 이동할 위치에서 [편집] -&amp;gt; [붙여 넣기] 선택&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바로 가기 키 이용&lt;/b&gt;: [Ctrl] + [X] -&amp;gt; 이동할 위치에서 [Ctrl] + [V]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키보드와 마우스 이용&lt;/b&gt;: 같은 드라이브에서는 마우스로 이동할 위치에 드래그 앤 드롭, 다른 드라이브에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Shift]&lt;/span&gt;를 누른 상태에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이동&lt;/span&gt;할 위치에 드래그 앤 드롭&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;클립보드(Clipboard)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 일시적으로 보관해 두는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;임시 저장공간&lt;/span&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;일종에 버퍼 역할&lt;/span&gt;로 각 프로그램 간에 데이터를 쉽게 전달 가능&lt;/li&gt;
&lt;li&gt;클립보드에 저장된 내용은 여러 번 사용 가능하지만 가장 최근에 저장된 것만 기억, 시스템 재시작 시 모두 삭제됨&lt;/li&gt;
&lt;li&gt;복사(Ctrl + C), 잘라내기(Ctrl + X), 붙여 넣기(Ctrl + V), 활성창 복사(Alt + Print Screen), 전체 창 복사(Print Screen) 시 클립보드에 저장되고, 저장된 데이터는 클럽보드 표시기를 통해 확인, 삭제 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;휴지통 사용하기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;삭제된 파일이나 폴더가 임시 보관되는 장소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;휴지통의 크기&lt;/span&gt;는 기본적으로 드라이브 용량의 10%로 설정(0 ~ 100%까지 드라이브마다 다르게&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;설정 가능&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;휴지통에 보관된 파일이나 폴더는 복원 가능, 복원 전에는 사용 불가&lt;/li&gt;
&lt;li&gt;휴지통에 보관된 모든 항목 삭제 시 [파일] -&amp;gt; [휴지통 비우기] 선택(삭제된 파일과 폴더는 복원 불가)&lt;/li&gt;
&lt;li&gt;휴지통 등록 정보에서 휴지통을 거치지 않고 항목 바로 삭제 여부, 삭제 시 확인 메지 표시 여부 설정 가능&lt;/li&gt;
&lt;li&gt;휴지통을 거치지 않고 바로 삭제하려면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Shift] + [Delete]&lt;/span&gt;를 누르거나 [Shift]를 누른 상태에서 휴지통으로 드래그 앤 드롭&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제어판&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows에서 컴퓨터를 구성하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;프로그램과 하드웨어에 대한 설정&lt;/span&gt; 등을 변경하는 여러 가지 항목이 표시되는 곳&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제어판의 구성 항목&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;네트워크 또는 네트워크 공유 센터&lt;/b&gt;: 애랩터, 프로토콜, 서비스, 클라이언트 등의 네트워크 구성 요소 추가/제거 및 컴퓨터 이름 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인터넷 옵션&lt;/b&gt;: 인터넷 연결, 인터넷 자료 관리, 보안 영역 설정 등 인터넷 사용과 관련된 사항 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;암호 또는 사용자 계정&lt;/b&gt;: 컴퓨터의 자원 관리를 위한 암호를 설정, 여러 사용자가 다른 바탕 화면을 사용할 수 있도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장치 및 프린터&lt;/b&gt;: 컴퓨터의 연결된 장치 및 프린터의 확인 및 추가, 속성 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전원 관리 또는 전원 옵션&lt;/b&gt;: 절전 기능 설정으로 하드웨어 보호 및 전기 절약&lt;/li&gt;
&lt;li&gt;&lt;b&gt;글꼴&lt;/b&gt;: 글꼴 추가, 제거 등 관리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;사운드 또는 소리&lt;/b&gt;: 시작음, 종료음, 경고음 등 효과음 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;국가별 설정&lt;/b&gt;: 숫자, 날짜와 시간, 통화 등 국가별 기호나 단위 표시 방식 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;날짜/시간&lt;/b&gt;: 컴퓨터의 날짜와 시간 지정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;프로그램 추가/제거&lt;/b&gt;&lt;/span&gt;: 응용 프로그램이나 Windows 구성 요소의 추가/제거(&lt;span style=&quot;color: #ee2323;&quot;&gt;응용 프로그램 삭제 권장 방법&lt;/span&gt;) 및 &lt;span style=&quot;color: #ee2323;&quot;&gt;시동 디스크 작성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새 하드웨어 추가&lt;/b&gt;: 설치되어 있는 하드웨어 검색, 새 하드웨어 설치&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로그램 및 기능&lt;/b&gt;: 응용 프로그램 및 Windows 기능의 제거/변경/복구, 설치된 업데이트 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개인 설정&lt;/b&gt;: 바탕 화면의 배경 그림, 창, 색, 소리, 화면 보호기, 바탕 화면 아이콘, 마우스 포인터 등 설정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;디스플레이&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;바탕 화면의 배경 그림, 화면 배색, 화면 보호기, 해상도&lt;/span&gt; 등 화면의 표현 형식 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시스템&lt;/b&gt;: 시스템에 설치된 모든 하드웨어 장치의 이상 여부 및 충돌 상태 점검&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내게 필요한 옵션&lt;/b&gt;: 신체가 불편한 사용자를 위해 여러 가지 옵션(키보드, 마우스, 사운드, 화면 표시 등) 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;접근성 센터&lt;/b&gt;: 컴퓨터 보기, 키보드 및 마우스 사용, 기타 입력장치 사용 등을 보다 쉽게 사용할 수 있도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마우스&lt;/b&gt;: 왼손잡이용 마우스 단추 설정, 마우스 포인터 모양이나 더블클릭 속도 등 마우스 관련 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;키보드&lt;/b&gt;: 키 재입력 시간, 반복 속도, 커서 깜빡임 속도 등 키보드 관련 설정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;멀티미디어&lt;/b&gt;&lt;/span&gt;: 오디오, 비디오, &lt;span style=&quot;color: #ee2323;&quot;&gt;MIDI 출력&lt;/span&gt;, CD 재생 등 멀티미디어 장치 관련 설정, &lt;span style=&quot;color: #ee2323;&quot;&gt;작업 표시줄에 볼륨 조절 표시&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;보조프로그램&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows에 내장된 응용 프로그램, 필수적이진 않지만 컴퓨터 사용에 부가적인 도움을 주는 프로그램들로 구성&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;보조프로그램의 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[시작] -&amp;gt; [프로그램] -&amp;gt; [보조프로그램] 또는 [시작] -&amp;gt; [모든 프로그램] -&amp;gt; [보조프로그램]에서 확인 가능&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;오피스 관련 보조프로그램&lt;/b&gt;: 문서 작성, 그림 편집, 계산 등 일반 업무 처리에 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;종류&lt;/b&gt;: 그림판, 계산기, 메모장, 위드패드, 스티커 메모, 수학식 입력란, 사용자 정의 문자 편집기, 문자표, 클립보드 표시기 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;엔터테인먼트 관련 보조프로그램&lt;/b&gt;: 소리나 동영상 파일 등 멀티미디어를 재생할 때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;종류&lt;/b&gt;: 녹음기, Windows Media Player, CD 재생기, 볼륨 조절 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;통신 관련 보조프로그램&lt;/b&gt;: 통신망에 접속하거나 네트워크를 구성할 때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;종류&lt;/b&gt;: 원격 데스크톱 연결, 하이퍼터미널, 케이블 직접 연결, 전화 접속 네트워킹&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시스템 도구 관련 보조프로그램&lt;/b&gt;: 시스템을 최적화 상태로 관리하기 위해 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;종류&lt;/b&gt;: 디스크 정리, 디스크 조각 모음, 디스크 공간 늘림&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;게임 관련 보조프로그램&lt;/b&gt;: 간단한 게임을 할 때 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;종류&lt;/b&gt;: 지뢰 찾기, 카드놀이, 프리셀, 핀볼, 하트 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;메모장(Notepad)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특별한 서시 없이 &lt;span style=&quot;color: #ee2323;&quot;&gt;간단한 텍스트(ASCII) 파일&lt;/span&gt;을 작성 가능한 문서 작성 프로그램(&lt;span style=&quot;color: #ee2323;&quot;&gt;TXT 확장자&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;그림, 차트 등의 &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12#%EC%B5%9C%EC%8B%A0%C2%A0Windows%EC%9D%98%C2%A0%ED%8A%B9%EC%A7%95-1&quot;&gt;OLE 개체&lt;/a&gt;&amp;nbsp;삽입 불가, &lt;span style=&quot;color: #ee2323;&quot;&gt;특수문자 입력 가능&lt;/span&gt;, 문서 전체에 대한 글꼴의 종류, 속성, 크기 변경 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자동 줄 바꿈 기능&lt;/span&gt;을 이용해서 메모장의 가로 크기에 맞게 텍스트 표시 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;워드패드(Wordpad)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;글꼴, 글머리표, 단락 등의 다양한 서식을 적용할 수 있는 문서 작성 프로그램&lt;br /&gt;(&lt;span style=&quot;color: #ee2323;&quot;&gt;DOC, RTF, TXT, WRI 확장자, default는 DOC, WRI는 불러오기만 가능&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;날짜 및 기간,&amp;nbsp;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12#%EC%B5%9C%EC%8B%A0%C2%A0Windows%EC%9D%98%C2%A0%ED%8A%B9%EC%A7%95-1&quot;&gt;OLE 개체&lt;/a&gt;&amp;nbsp;삽입 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;그림판&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;간단한 그림을 작성 및 수정하기 위한 보조프로그램(&lt;span style=&quot;color: #ee2323;&quot;&gt;BMP, GIF, JPG, PCX 확장자, default는 BMP&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;Windows 바탕 화면 배경으로 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인쇄 작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프린터 설치&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;제어판의 프린터 또는 장치 및 프린터를 실행 -&amp;gt; 프린터 추가 -&amp;gt; 프린터 추가 마법사의 지시에 따라 설치(재설치 가능)&lt;/li&gt;
&lt;li&gt;한 대의 컴퓨터에 여러 개의 프린터를 설치할 수 있고, 네트워크를 공유하여 한 개의 프린트를 여러 대의 컴퓨터에서 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프린터 등록 정보 창&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프린터의 바로 가기 메뉴 -&amp;gt; 등록 정보에서 확인 가능&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;프린터 등록 정보 창 탭별 주요 기능&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;일반&lt;/b&gt;: 프린터 이름, 테스트 페이지 인쇄, 용지 방향, 페이지 순서, 용지 종류, 인쇄 품질, 토너 절약 모드, 해상도 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공유&lt;/b&gt;: 프린터의 공유 여부 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;포트&lt;/b&gt;: 포트 추가, 삭제, 구성 확인&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고급&lt;/b&gt;: 스풀 기능의 사용 및 해제, 인쇄 작업 시간 초과 설정, 고급 인쇄 기능, 드라이버 변경&lt;/li&gt;
&lt;li&gt;&lt;b&gt;장치 설정&lt;/b&gt;: 프린터 장치의 용지 설정 사항 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본 프린터&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인쇄 명령 수행 시 특정 프린터를 지정하지 않은 경우 자동으로 인쇄 작업이 전달되는 프린터&lt;/li&gt;
&lt;li&gt;하나만 지정 가능하며 아이콘테 체크 표시가 생김&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;스풀(Simultaneous Peripheral Operation On-Line) 기능, 스풀링&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;중앙처리장치와 같이 처리 속도가 빠른 장치와 프린터와 같이 처리 속도가 느린 &lt;span style=&quot;color: #ee2323;&quot;&gt;장치 사이 처리 속도 문제를 해결하기 위한 기능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;인쇄할 내용을 먼저 하드디스크에 저장하고 백그라운드 작업으로 CPU 여유 시간에 틈틈이 인쇄하기 때문에 인쇄 중이더라도 다른 응용프로그램 실행(포그라운드 작업) 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;문서 인쇄&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;문서를 인쇄하는 동안 작업 표시줄에 프린터 아이콘이 표시되며, 인쇄가 끝나면 없어짐&lt;/li&gt;
&lt;li&gt;클릭 시 &lt;span style=&quot;color: #ee2323;&quot;&gt;프린터 대화상자(인쇄 관리자 창)가&lt;/span&gt; 열리는데, &lt;span style=&quot;color: #ee2323;&quot;&gt;대기 중인 문서를 출력 순서 조정 및 삭제, 인쇄 작업이 시작 후에도 중간에 강제로 종료, 일시 중지, 재출력 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;시스템 유지 보수 및 최적화 도구(시스템 도구)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[보조프로그램] -&amp;gt; [&lt;span style=&quot;color: #ee2323;&quot;&gt;시스템 도구&lt;/span&gt;]에서 확인 가능&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디스크 검사&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디스크의 &lt;span style=&quot;color: #ee2323;&quot;&gt;손상된 부분을 검사하여 오류를 복구&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;CD-ROM &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;드라이브&lt;/span&gt;, &lt;/span&gt;네트워크 드라이브는 검사 불가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;컴퓨터의 전원이 갑자기 중단되어 다시 부팅 시 자동 수행, 정기적으로 실행하는 것을 권장&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;디스크 검사 결과 창&lt;/span&gt;에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;전체 디스크 공간, 불량 섹터, 폴더 수, 숨겨진 파일 용량과 파일 수, 사용자 파일 수, 사용할 수 있는 공간, 각 할당/전체 할당 단위, 사용할 수 있는 할당 단위&lt;/span&gt; 등 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;디스크 조각 모음&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단편화(Fragmentation)로 인해 분산되어 저장된 파일들을 연속된 공간으로 최적화시켜 디스크의 접근 속도와 안정성을 향상시키는 기능(&lt;span style=&quot;color: #ee2323;&quot;&gt;용량 증가 X&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Windows가 지원하지 않는 프로그램, CD-ROM 드라이브, 네트워크 드라이브는 수행 불가&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;수행하는 동안 다른 작업을 할 순 있지만 모든 작업을 중지한 상태에서 진행해야 효율적이며 걸리는 시간은 볼륨에 있는 파일의 수, 파일의 크기, 조각난 양 등에 따라 달라질 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;백업(Backup)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;원본 데이터의 손실에 대비하여 중요한 데이터를 외부 저장장치에 하나 더 만들어두는 기능&lt;/li&gt;
&lt;li&gt;플로피디스크, 자기 테이프, CD-ROM 드라이브, 네트워크 상의 다른 컴퓨터에 백업 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디스크 정리&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디스크의 여유 공간을 확보하기 위해 디스크 드라이브를 검색하여 필요 없는 파일을 삭제하는 기능&lt;/li&gt;
&lt;li&gt;임시 인터넷 파일, 오프라인 웹 페이지, 다운로드한 프로그램 파일, 휴지통 파일, 임시 파일 대상&lt;/li&gt;
&lt;li&gt;기타 옵션 탭을 이용하여 사용하지 않는 Windows 구성 요소와 설치된 프로그램 제거 가능&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>Windows</category>
      <category>그림판</category>
      <category>디스크 정리</category>
      <category>메모장</category>
      <category>시스템 도구</category>
      <category>정보처리기능사</category>
      <category>제어판</category>
      <category>파일</category>
      <category>폴더</category>
      <category>프린터</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/456</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2#entry456comment</comments>
      <pubDate>Wed, 19 Mar 2025 17:25:09 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 11. WINDOWS(1/2)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;최신 Windows의 특징 / 부팅 메뉴&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;최신&amp;nbsp;Windows의&amp;nbsp;특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하드웨어를 효율적으로 관리하고 사용자에게는 더 편리한 컴퓨터 환경을 제공하기 위해 만들어진 개인용 컴퓨터 운영체제&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;그래픽 사용자 인터페이스(&lt;span style=&quot;color: #ee2323;&quot;&gt;GUI&lt;/span&gt;) 사용&lt;/b&gt;: 키보드로 명령어를 입력하지 않고, 아이콘이나 메뉴를 마우스로 선택하여 모든 작업을 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선점형 멀티태스킹(Preemptive Multi-Tasking)&lt;/b&gt;: 실행 중 문제가 발생하면 해당 프로그램을 강제로 종료시키고 모든 시스템 자원을 반환하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;멀티태스킹&lt;/span&gt; 운영 방식&lt;/li&gt;
&lt;li&gt;&lt;b&gt;32Bit 또는 62Bit 데이터 처리&lt;/b&gt;: 대부분 32Bit, 62Bit 데이터 처리를 하기 때문에 더 많은 양의 데이터를 빠르게 처리 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NTFS 파일 시스템&lt;/b&gt;: 성능, 보안, 안정성 면에서 뛰어남, 디스크 저장 공간을 효율적으로 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;플러그 앤 플레이(pnP: Plug&amp;amp;Play)&lt;/b&gt;&lt;/span&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;자동으로 하드웨어를 인식하고 실행&lt;/span&gt;, 사용자가 직접 설정할 필요가 없음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OLE(Object Linking and Embedding)&lt;/b&gt;: 문자, 그림 등 개체(Object)를 다른 문서에 자유롭게 연결(Linking)하거나 삽입(Embedding)하여 편집 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;225자의 긴 파일 이름&lt;/b&gt;: VFAT(Virtual File Allocation Table)을 이용하여 파일 이름을 최대 255자까지 지정 가능(한글은 127까지, 공백 불가)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;향상된 네트워크 기능&lt;/b&gt;: 여러 가지 프로토콜 지원으로 네트워크 기능을 쉽게 사용할 수 있음&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DOS와 호환&lt;/b&gt;: 대부분의 DOS 응용 프로그램을 그대로 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;부팅 메뉴&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 가지 부팅 방법을 메뉴 형식으로 나열한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터에 전원을 넣어 Windows를 시작할 때 [F8]을 누르면 부팅 메뉴가 표시됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;486&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4GaB1/btsMOC5A0j5/9IYir0ypXzks4R2hs82OGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4GaB1/btsMOC5A0j5/9IYir0ypXzks4R2hs82OGk/img.png&quot; data-alt=&quot;출처: https://www.digitalcitizen.life/what-safe-mode-how-boot-safe-mode/&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4GaB1/btsMOC5A0j5/9IYir0ypXzks4R2hs82OGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4GaB1%2FbtsMOC5A0j5%2F9IYir0ypXzks4R2hs82OGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;648&quot; height=&quot;486&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;486&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.digitalcitizen.life/what-safe-mode-how-boot-safe-mode/&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;안전 모드&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Safe Mode)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;컴퓨터에 발생한 문제를 해결하기 위해 사용하는 방식&lt;br /&gt;최소한의 장치만 설정하여 부팅하기 때문에 네트워크, 사운드 카드, 모뎀 등 사용 불가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;안전모드(네트워크 사용)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Safe Mode with Networking)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;네트워크가 지원되는 안전 모드로 부팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;안전모드(명령 프롬프트 사용)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Safe Mode with Command Prompt)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;안전 모드로 부팅하되, GUI 환경이 아닌 DOS 모드로 부팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;부팅 로깅 사용&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Enable Boot Logging)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;부팅 과정을 Ntbtlog.txt 파일에 기록하며 부팅&lt;br /&gt;부팅 후 Ntbtlog.txt 파일을 읽어 문제가 발생한 부분 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;저해상도 비디오 사용(640x480)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Enable low-resolution video)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;화면 모드를 640x480 해상도로 설정하여 부팅&lt;br /&gt;그래픽 카드 드라이버를 설치 후 Windows가 제대로 실행되지 않을 때 유용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;마지막으로 성공한 구성(고급)&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Last Known Good Configuration(advanced)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;마지막으로 시스템이 문제 없이 실행, 종료되었을 때의 레지스트리 정보와 드라이버를 사용하여 부팅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;디렉터리 서비스 복원 모드&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Directory Services Restore Mode)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;디렉터리 컨트롤러에서만 사용 가능&lt;br /&gt;디렉터리 서비스를 복원할 수 있도록 Active Directory를 실행하는 Windows 도메인 컨트롤러를 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;디버깅 모드&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Debugging Mode)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;네트워크로 연결된 경우 컴퓨터 관리자에게 해당 컴퓨터의 디버그 정보를 보내면서 컴퓨터를 시작&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;시스템 오류 시 자동 다시시작 사용 안 함&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Disable automatic restart on system failure)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;시스템에 오류가 발생한 경우 시스템이 자동으로 다시 시작되지 않도록 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.9303%;&quot;&gt;&lt;b&gt;표준 모드로 WIndows 시작&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Start Windows Normally)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;한글 Windows의 기본 부팅 방식&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;마우스 사용법과 바로 가기 키&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마우스 사용법&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;클릭(Click)&lt;/b&gt;: 아이콘이나 메뉴 창을 선택할 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;더블클릭(Double Click)&lt;/b&gt;: 창이나 폴더를 열거나 응용 프로그램을 실행할 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;드래그 앤 드롭(Drag&amp;amp;Drop)&lt;/b&gt;: 동작, 파일, 폴더 등을 이동하거나 복사할 때, 창의 크기를 조정, 바로가기 아이콘을 만들 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오른쪽 단추 클릭&lt;/b&gt;: 바로 가기 메뉴를 나타낼 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바로 가기 키 (Hot Key, 단축키)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키보드의 키를 조합하여 명령어 대신 사용하는 기능&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 425px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;b&gt;바로 가기 키&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;b&gt;[F1], [F2], [F3], [F5]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;도움말 보기, 폴더/파일 이름 변경, 찾기, 최신 정보로 고침&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;b&gt;[Alt] + [&amp;rarr;], [&amp;larr;]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;현재 실행중인 화면의 다음 화면이나 이전 화면으로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;b&gt;[Alt] + [Esc]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;현재 실행중인 프로그램을 순서대로 전환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Alt] + [Tab]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현재 실행중인 프로그램들의 목록을 화면 중앙에표시&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Alt]를 누른 상태에서 [Tab]을 이용하여 이동할 작업 창 선택&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;b&gt;[Alt] + [Enter]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;선택된 항목의 등록 정보를 표시(도스 전체 화면과 도스 창 형태를 번갈아가며 표시)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Alt] + [Spacebar]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현재 열려 있는 창의 제어 상타(창 조절 메뉴)를 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Alt] + [F4]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실행중인 창(Window)이나 응용 프로그램을 종료(실행중인 프로그램이 없다면 시스템 종료)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Alt] + [Print Screen]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;현재 작업중인 활성 창을 클립보드로 복사&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Print Screen]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;화면 전체를 클립보드로 복사&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Ctrl] + [A]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;폴더 및 파일을 모두 선택&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Ctrl] + [Esc]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;시작 메뉴를 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;b&gt;[Ctrl] + [Shift]+ [Esc]&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;작업 관리자 대화상자를 실행하여 문제가 있는 프로그램을 강제로 종료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Shift] + [Delete]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;폴더나 파일을 휴지통으로 거치지 않고 바로 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Shift] + [F10]&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;바로가기 메뉴(마우스 오른쪽 단추 클릭)를 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;[Shift] + CD 삽입&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Shift]를 누른 상태에서 CD를 삽입하면 CD의 자동 실행 기능이 작동되지 않음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 17px;&quot;&gt;&lt;b&gt;[Window] &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;시작 메뉴를 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&lt;b&gt;[Window] + [R]&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실행창을 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 17px;&quot;&gt;&lt;b&gt;&lt;b&gt;[Window] + [P]&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;화면 우측에 프로젝트 바로 가기를 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 17px;&quot;&gt;&lt;b&gt;&lt;b&gt;[Window] + [E]&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;파일 탐색기를 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 17.2092%; height: 17px;&quot;&gt;&lt;b&gt;&lt;b&gt;[Window] + [M]&lt;br /&gt;&lt;b&gt;[Window] + [Shift] + [M]&lt;/b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 57.7907%; height: 17px;&quot;&gt;열려 있는 모든 창을 최소화/이전 크기로 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;바탕 화면&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바탕 화면의 구성&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ztt5q/btsMP5lPXEE/4Wo2Py5X0KJnaeYAKOzJZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ztt5q/btsMP5lPXEE/4Wo2Py5X0KJnaeYAKOzJZ0/img.png&quot; data-alt=&quot;windows 바탕 화면 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ztt5q/btsMP5lPXEE/4Wo2Py5X0KJnaeYAKOzJZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZtt5q%2FbtsMP5lPXEE%2F4Wo2Py5X0KJnaeYAKOzJZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;1494&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1494&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;windows 바탕 화면 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바탕 화면의 바로 가기 메뉴&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;바탕 화면에서 마우스 오른쪽 단추 클릭 시 표시되는 메뉴로 자주 사용하는 명령을 메뉴로 구성한 것&lt;/li&gt;
&lt;li&gt;보기, 정렬 기준, 새로 고침, 새로 만들기, 화면 해상도, 가젯, 개인 설정 등 존재&lt;/li&gt;
&lt;li&gt;바탕 화면에 있는 아이콘의 표시 유무를 지정할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정렬 기준&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이름. 크기, 항목(종류) 유형, 수정한 날짜, 자동 정렬 제공&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바탕 화면의 기본 아이콘&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;내 컴퓨터(컴퓨터)&lt;/b&gt;: 설치된 디스크 드라이브(하드웨어), 폴더, 파일 등 표시 및 관리&lt;/li&gt;
&lt;li&gt;&lt;b&gt;휴지통&lt;/b&gt;: 삭제된 파일이나 폴더가 임시로 보관되는 곳&lt;/li&gt;
&lt;li&gt;&lt;b&gt;내 문서(개인폴더)&lt;/b&gt;: 바탕 화면 아이콘 설정에서 문서를 선택하면 표시되는 아이콘(이름은 사용자의 계정), 로그인 후 작업 내용이 기본적으로 저장되는 공간, 실제 폴더 위치는 C:\사용자\사용자 계정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;네트워크 환경(네트워크)&lt;/b&gt;: 네트워크가 구축되어 있을 때만 표기되는 아이콘, 연결된 자원을 확인 및 공유 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제어판&lt;/b&gt;: 컴퓨터를 구성하는 프로그램과 하드웨어에 대한 설정 사항 등을 변경하는 여러 가지 항목이 표시되는 곳&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;바로 가기(Shortcut, 단축) 아이콘&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkCIEx/btsMPQWPOgc/C7oBFJ7lKr8D6NXEmFiaN0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkCIEx/btsMPQWPOgc/C7oBFJ7lKr8D6NXEmFiaN0/img.jpg&quot; data-alt=&quot;바로 가기(단축) 아이콘&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkCIEx/btsMPQWPOgc/C7oBFJ7lKr8D6NXEmFiaN0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkCIEx%2FbtsMPQWPOgc%2FC7oBFJ7lKr8D6NXEmFiaN0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;225&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;바로 가기(단축) 아이콘&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개요 및 특징&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자주 사용하는 문서나 프로그램을 빠르게 실행시기 위한 아이콘, 실제 실행 파일과 연결해 놓은 것&lt;/li&gt;
&lt;li&gt;사용자가 모든 개체에 대해 바로 가기 아이콘 생성 및 삭제 가능(&lt;span style=&quot;color: #ee2323;&quot;&gt;삭제하더라도 원본 파일은 삭제되지 않음&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;아이콘 왼쪽 아랫부분에 화살표 표시로 일반 아이콘과 구분 가능(&lt;span style=&quot;color: #ee2323;&quot;&gt;확장자는 LINK&lt;/span&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;만들기&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;메뉴 이용&lt;/b&gt;: Windows 탐색기 -&amp;gt; [파일] -&amp;gt; [바로 가기 만들기], [파일] -&amp;gt; [새로 만들기] -&amp;gt; [바로 가기]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;바로 가기 메뉴 이용&lt;/b&gt;: 개체 선택 후 바로 가기 메뉴에서 [바로 가기 만들기] 선택&lt;/li&gt;
&lt;li&gt;&lt;b&gt;오른쪽 버튼으로 끌기&lt;/b&gt;: 마우스 오른쪽 버튼으로 개체를 선택한 후 원하는 위치로 드래그 앤 드롭 -&amp;gt; [여기에 바로 가기 만들기] 선택&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl] + [Shift]&lt;/span&gt; + 드래그&lt;/b&gt;: 오른쪽 버튼으로 끌기와 동일&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;작업 표시줄(Task Bar) 및 시작 메뉴&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;바탕화면 맨 아래쪽에 존재하는&amp;nbsp;시작(Window) 단추,&amp;nbsp; 고정된 프로그램 단추, 실행 중인 프로그램 단추, 입력 도구 모음, 알림 영역(표시기), 바탕 화면 보기 단추를 제공하는 표시줄&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;한 번의 마우스 조작만으로 프로그램간 작업 전환 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;작업 표시줄 및 시작 메뉴 속성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;'작업 표시줄 및 시작 메뉴 속성' 대화상자에서 작업 표시줄 설정 외에 시작 메뉴에 표시할 항목과 전원 단추 동작 등 지정 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;작업 표시줄 여백에 마우스 오른쪽 버튼 -&amp;gt; [속성] 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwcL7x/btsMO7rxPnJ/twePMCVfMJlUtDS6KI7KB0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwcL7x/btsMO7rxPnJ/twePMCVfMJlUtDS6KI7KB0/img.jpg&quot; data-alt=&quot;출처: https://idsam209.com/1147&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwcL7x/btsMO7rxPnJ/twePMCVfMJlUtDS6KI7KB0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwcL7x%2FbtsMO7rxPnJ%2FtwePMCVfMJlUtDS6KI7KB0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;495&quot; data-origin-width=&quot;478&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://idsam209.com/1147&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;작업 표시줄&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;작업 표시줄 잠금&lt;/b&gt;: 작업 표시줄의 위치나 크기를 변경하지 못하도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작업 표시줄 자동 숨기기&lt;/b&gt;: 마우스를 작업 표시줄 밖으로 이동하면 작업 표시줄이 숨겨지도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;작은 아이콘 사용&lt;/b&gt;: 작업 표시줄의 프로그램 단추들을 작은 아이콘으로 변경&lt;/li&gt;
&lt;li&gt;&lt;b&gt;화면에서 작업 표시줄 위치&lt;/b&gt;: 작업 표시줄의 위치 설정(왼쪽, 오른쪽, 위쪽, 아래쪽)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;시작 메뉴&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;시작 메뉴 사용자 지정&lt;/b&gt;: 시작 메뉴에 표시할 항목, 표시할 최근 프로그램 수(최대 30), 점프 목록에 표시할 최근 항목 수(최대 60)등 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전원 단추 동적&lt;/b&gt;: 시작 메뉴에 전원 단추(시스템 종료)를 클릭하면 수행할 작업을 선택(시스템 종료, 사용자 전환, 로그오프 잠금, 다시 시작, 절전 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도구 모음&lt;/b&gt;: 작업 표시줄에 표시할 도구 모음을 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시작 메뉴&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시작(Window) 단추를 눌렀을 때 나타나는 메뉴 ([Ctrl] + [Esc] 단축키)&lt;/li&gt;
&lt;li&gt;설치된 프로그램이 표시되고 자주 사용하는 프로그램 추가 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음글: &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1742372858050&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;정보처리기능사 - 11. WINDOWS(2/2)&quot; data-og-description=&quot;파일과 폴더파일과 폴더의 특징파일은 디스트에 저장되는 기본 단위,&amp;nbsp;폴더는 파일을 모아 관리하기 위한 장소(DOS에서 디렉터리와 유사한 개념)하나의 폴더 내에는 동일한 이름의 파일이나 폴&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/FDuVX/hyYr10NvPl/ykKfpA8Kg72XROMkYKI4JK/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/wxn1f/hyYrTocJOj/d98Cx5XKgMZBvXpVNkPDgK/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/FDuVX/hyYr10NvPl/ykKfpA8Kg72XROMkYKI4JK/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/wxn1f/hyYrTocJOj/d98Cx5XKgMZBvXpVNkPDgK/img.jpg?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;정보처리기능사 - 11. WINDOWS(2/2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;파일과 폴더파일과 폴더의 특징파일은 디스트에 저장되는 기본 단위,&amp;nbsp;폴더는 파일을 모아 관리하기 위한 장소(DOS에서 디렉터리와 유사한 개념)하나의 폴더 내에는 동일한 이름의 파일이나 폴&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>자격증</category>
      <category>Booting</category>
      <category>단축키</category>
      <category>바로가기</category>
      <category>바탕화면</category>
      <category>부팅</category>
      <category>시작 메뉴</category>
      <category>작업 표시줄</category>
      <category>정보처리기능사</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/455</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-WINDOWS12#entry455comment</comments>
      <pubDate>Wed, 19 Mar 2025 15:34:38 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 10. DOS</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-DOS%EC%9D%98-%EA%B0%9C%EC%9A%94</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOS(Disk Operating System)의 개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인용 컴퓨터에서 디스크와 파일 관리를 위한 운영 체제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-9-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%9D%98-%EA%B0%9C%EC%9A%94#%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%9D%98%20%EC%A2%85%EB%A5%98-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;단일 처리 방식&lt;/a&gt;, CUI(Character User Interface) 환경의 대표적인 운영체제&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;디렉터리(Directory)&lt;/b&gt;: 효율적인 파일 사용을 위해 &lt;span style=&quot;color: #ee2323;&quot;&gt;파일에 대한 여러 정보를 저장하고 보관&lt;/span&gt;하고 있는 특수한 형태의 파일&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;부팅(Booting, Bootstrap)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터에 전원을 넣은 순간부터 &lt;span style=&quot;color: #ee2323;&quot;&gt;시스템 프로그램을 디스크로부터 주기억장치로 읽어 내어 컴퓨터를 이용할 수 있는 상태로 만들어 주는 과정&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;IO.SYS, &lt;/span&gt;MSDOS.SYS, COMMAND.COM 파일은 반드시 필요&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부팅 중 [F8]을 눌러 CONFIG.SYS 파일과 AUTOEXEC.BAT 파일의 실행&lt;/span&gt; 여부 선택 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;과정&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;컴퓨터의 전원 공급&lt;/li&gt;
&lt;li&gt;ROM BIOS를 이용하여 주기억장치와 각 장치의 이상 유무 검사&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;IO.SYS&lt;/span&gt; 파일을 주기억장치에 적재&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;MSDOS.SYS&lt;/span&gt; 파일을 주기억장치에 적재&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;CONFIG.SYS&lt;/span&gt; 파일을 읽어 시스템 환경을 설정&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;COMMAND.COM&lt;/span&gt; 파일 실행&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;AUTOEXEC.BAT&lt;/span&gt; 파일 실행&lt;/li&gt;
&lt;li&gt;명령 프롬프트 표시&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;종류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;윔 부팅(Warm Booting)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl] + [Alt] + [Delete]&lt;/span&gt;를 눌러 컴퓨터가 재부팅(소프트웨어적 부팅)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;콜드 부팅(Cold Booting)&lt;/b&gt;: 컴퓨터 본체에 &lt;span style=&quot;color: #ee2323;&quot;&gt;전원 스위치&lt;/span&gt;를 눌러 켜거나 리셋(Reset) 버튼을 눌러 재부팅&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;파일명 작성 규칙&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일명은 영문 8자 이내, 확장자 3자로 구성되며 확장자로 파일 구분 가능&lt;/li&gt;
&lt;li&gt;공백, \ / * ? ; &amp;gt; &amp;lt; | 등을 사용할 수 없음&lt;/li&gt;
&lt;li&gt;시스템 예약 파일 AUX, CON, PRN, NUL 등을 사용할 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;파일의 종류&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 114px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.3488%; height: 19px;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%; height: 19px;&quot;&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.3488%; height: 19px;&quot;&gt;&lt;b&gt;시스템 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%; height: 19px;&quot;&gt;시스템을 운용 및 관리하는 파일&lt;br /&gt;- MSDOS.SYS: 파일의 입출력 및 시스템 호출에 필요한 장치 관리(&lt;span style=&quot;color: #ee2323;&quot;&gt;숨김 속성 파일&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;IO.SYS: MSDOS.SYS의 요구에 의해 &lt;span style=&quot;color: #ee2323;&quot;&gt;실제로 입출력&lt;/span&gt;을 수행(&lt;span style=&quot;color: #ee2323;&quot;&gt;숨김 속성 파일&lt;/span&gt;)&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;COMMAND.COM: 명령어 해석기로, 부팅 시 내부 명령어를 주기억장치에 적재, 사용자 입력 명령어 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.3488%; height: 19px;&quot;&gt;&lt;b&gt;실행 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;EXE&quot;, &quot;COM&quot;, &quot;BAT&quot;&lt;/span&gt; 등의 확장자를 가진 파일, 파일명을 입력한 후 [Enter]를 누르면 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.3488%; height: 19px;&quot;&gt;&lt;b&gt;배치 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%; height: 19px;&quot;&gt;&quot;BAT&quot; 확장자를 가진 파일, 명령어가 모여 있는 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.3488%; height: 19px;&quot;&gt;&lt;b&gt;백업 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%; height: 19px;&quot;&gt;데이터 훼손을 대비하여 동일한 파일을 하나 더 만든 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.3488%; height: 19px;&quot;&gt;&lt;b&gt;텍스트 파일&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 84.6512%; height: 19px;&quot;&gt;아스키 형태의 파일&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;템플릿트(Template) 기능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 바로 전에 사용한 명령어를 저장하고 있다가 특정 키가 입력되면 그 키의 기능에 따라 문자를 프롬프트에 표시해 주는 것&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;[F1]&lt;/b&gt;: 바로 전에 입력한 명령을 한 문자씩 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;[&lt;/b&gt;F2&lt;b&gt;]&lt;/b&gt;&lt;/b&gt;: 바로 전에 입력한 명령 중 지정한 문자 앞까지 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;[&lt;/b&gt;F3&lt;b&gt;]&lt;/b&gt;&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;바로 전에 입력한 명령을 모두 표시&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;[&lt;/b&gt;F4&lt;b&gt;]&lt;/b&gt;&lt;/b&gt;: 바로 전에 입력한 명령 중 지정한 문자 앞까지 삭제하고 뒷부분 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;[&lt;/b&gt;F6&lt;b&gt;]&lt;/b&gt;&lt;/b&gt;: &quot;COPY CON&quot;(문자 파일 작성 명령어)으로 텍스트 파일을 작성한 후 저장&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOS의 배치 파일과 환경 설정 파일&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배치 파일(Batch File, 일괄 처리 파일)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자주 사용되는 일련의 명령어들을 한 그룹으로 묶은 것(확장자 &quot;BAT&quot;)&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;AUTOEXEC.BAT 파일과 사용자가 작성하여 실행하는 일반 배치 파일로 구분(편집기를 사용하여 작성 가능)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;AUTOEXEC.BAT 파일은 특수한 형태로서 부팅 시 자동으로 실행, &lt;span style=&quot;color: #ee2323;&quot;&gt;일반 배치 파일에서 사용하는 명령어 모두 사용 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;AUTOEXEC.BAT는 &lt;span style=&quot;color: #ee2323;&quot;&gt;루트 디렉터리에 존재해야만 부팅 시 자동&lt;/span&gt;으로 주기억장치에 적재&lt;/li&gt;
&lt;li&gt;COPY CON 명령으로 파일 작성 및 수정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;배치 파일 전용 명령어&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ECHO [ON/OFF]&lt;/b&gt;: 명령어의 화면 표시 여부 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PAUSE&lt;/b&gt;: 배치 파일의 실행을 일시 정지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GOTO&lt;/b&gt;: 특정 레이블로 이동&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CALL&lt;/b&gt;: 다른 배치 파일 호출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;REM&lt;/b&gt;: 주석(설명문)을 달고자 할 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FOR&lt;/b&gt;: 실행 반복&lt;/li&gt;
&lt;li&gt;&lt;b&gt;IF&lt;/b&gt;: 조건에 따라 수행이 다를 때 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;환경 설정 파일&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;도스(DOS)로 부팅될 때 필요한 시스템 환경을 설정해 주는 파일&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;CONFIG.SYS 파일은 &lt;span style=&quot;color: #ee2323;&quot;&gt;반드시 루트 디렉터리에 존재&lt;/span&gt;해야 실행&lt;/li&gt;
&lt;li&gt;디스크의 동작 속도를 향상시켜 주는 버퍼/캐시 설정 가능&lt;/li&gt;
&lt;li&gt;키보드, 마우스, 기타 주변장치 활용 방법 설정 가능&lt;/li&gt;
&lt;li&gt;COPY CON 명령으로 파일 작성 및 수정 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;환경 설정 명령어&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;LASTDRIVE&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;드라이브의 최대 개수&lt;/span&gt; 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FILES&lt;/b&gt;: 동시에 열 수 있는 파일의 수 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BREAK&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;프로그램 실행을 중지하는 [Ctrl] + [C]&lt;/span&gt;([Ctrl] + [Break])의 작동 여부 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PAUSE&lt;/b&gt;: CONFIG.SYS 파일의 실행을 일지 정지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DEVICE&lt;/b&gt;: 마우스, 스캐너와 같은 장치 사용 시 장치 드라이버 연결&lt;/li&gt;
&lt;li&gt;&lt;b&gt;BUFFERS&lt;/b&gt;: 시스템이 사용 가능한 버퍼 수 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LOAD HIGH&lt;/b&gt;: 램(RAM) 상주 명령을 UMB 영역에 상주시켜 기본 메모리를 절약&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SHELL&lt;/b&gt;: COMMAND.COM 이외의 명령 처리기를 사용할 때 지정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;INSTALL&lt;/b&gt; 램(RAM) 상주용 프로그램을 메모리에 적재&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RAMDRIVE&lt;/b&gt;: 램의 일부를 드라이브처럼 할당하여 고속 처리가 가능하도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MEM&lt;/b&gt;: 시스템이 현재 사용하고 있는 메모리와 사용 가능한 메모리의 크기 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HIMEM&lt;/b&gt;: DOS가 연속 확장 메모리를 사용할 수 있도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;EMM386&lt;/b&gt;: 연장 메모리(EMS)를 사용할 수 있도록 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;DOS 명령어&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;내부 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DOS가 부팅될 때 COMMAND.COM이 실행됨과 동시에 주기억장치에 상주&lt;/span&gt;하는 명령어&lt;/li&gt;
&lt;li&gt;주기억장치에 상주하므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;경로(Path)와 관계없이 어떤 디렉터리에서도 언제든지 실행 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CLS&lt;/b&gt;, &lt;b&gt;VER, &lt;b&gt;&lt;b&gt;VOL, &lt;b&gt;DATE&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;,&amp;nbsp;&lt;/span&gt;&lt;b&gt;TIME, &lt;b&gt;PROMPT, &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;b&gt;DIR&lt;/b&gt;, &lt;b&gt;COPY&lt;/b&gt;&lt;/span&gt;, MD, CD, RD, TYPE, DEL 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;기본 명령어&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;CLS&lt;/b&gt;&lt;/span&gt;: 현재 화면에 표시된 내용을 지움&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;VER&lt;/b&gt;&lt;/span&gt;: 현재 사용중인 DOS의 버전을 표시&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;VOL&lt;/b&gt;&lt;/span&gt;: 드라이브의 볼륨명과 일련번호를 표시&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;DATE&lt;/b&gt;&lt;/span&gt;: 현재 시스템의 날짜를 확인하거나 변경&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TIME&lt;/b&gt;&lt;/span&gt;: 현재 시스템의 시간을 확인하거나 변경&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;PROMPT&lt;/b&gt;&lt;/span&gt;: DOS의 프롬프트를 여러 가지 형태로 변경&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;외부 명렁어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;보조기억장치에 저장되어 있다가 사용자가 명령을 입력하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;주기억장치에 적재시킨 후 실행&lt;/span&gt;하는 명령어&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;독립된 파일의 형태로 DIR 명령으로 확인 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ATTRIB, FORMAT, CHKDSK, FDISK, LABEL, SCANDISK, DISKCOPY, XCOPY, SORT, SYS 등&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;필터 명령어&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MORE&lt;/b&gt;: 내용을 한 화면씩 출력&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FIND&lt;/b&gt;: 하나 또는 여러 개의 파일에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;특정한 문자열을 검색&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SORT&lt;/b&gt;: 내용을 정렬하여 화면이나 파일로 출력&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디스크 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;FORMAT&lt;/b&gt;: 디스크의 &lt;span style=&quot;color: #ee2323;&quot;&gt;읽고 쓰는 단위인 섹터를 나눠&lt;/span&gt; 데이터를 저장할 수 있도록 디스크 초기화를 진행
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: FORMAT [드라이브:] [/옵션]&lt;/li&gt;
&lt;li&gt;&lt;b&gt;옵션&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;/S&lt;/b&gt;: 포맷한 후 시스템 파일을 복사하여 부팅 가능한 디스크로 만듦&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/Q&lt;/b&gt;: 이미 사용하던 디스크의 빠른 포맷&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/V[:이름]&lt;/b&gt;: 포맷한 후 디스크의 볼륨명 부여&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/F&lt;/b&gt;: 용량을 지정하여 포맷&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/4&lt;/b&gt;: 고밀도 드라이브(1.2M)에서 360KB 형식으로 포맷&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DISKCOPY&lt;/b&gt;: 원본 디스크에 있는 모든 내용을 다른 디스크로 복사
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;DISKCOPY [원본&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;디스크:] [다른 디스크:]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CHKDISK&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;디스크의 상태를 점검&lt;/span&gt;하고 결과를 표시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: CHKDSK [드라이브:] [/옵션]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FDISK&lt;/b&gt;: 하드디스크를 논리적으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;여러 개의 디스크로 나누어&lt;/span&gt;(파티션 설정) 각 볼륨이 서로 다른 &lt;span style=&quot;color: #ee2323;&quot;&gt;별개의 드라이브로 동작&lt;/span&gt;하도록 설정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DEFRAG&lt;/b&gt;: 단편화되어 있는 &lt;span style=&quot;color: #ee2323;&quot;&gt;파일의 저장 상태를 최적화&lt;/span&gt;하여 디스크의 작동 효율을 증가&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SYS&lt;/b&gt;: 도스의 &lt;span style=&quot;color: #ee2323;&quot;&gt;시스템 파일을 디스크에 복사&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;해당 디스크로 부팅&lt;/span&gt; 가능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DISKCOMP&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;동일한 디스켓인지 비교&lt;/span&gt;(Disk Compare), DISKCOPY 명령으로 복사된 디스크가 정상적으로 복사되었는지 판별할 때 사용(&lt;b&gt;Disk Comp&lt;/b&gt;are)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SCANDISK&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;디스크 검사&lt;/span&gt; 유틸리티, 디스크의 문제점 진단 및 수정, 하드디스크의 표면을 검사하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;미미한 오류 수정 가능(can fix minor errors)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디렉터리 관련 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;MD(Make Directory)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;새로운 디렉터리 생성&lt;/span&gt;, 하나의 디렉터리 안에서 동일한 이름으로 생성 불가
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: MD [드라이브:] [경로] 디렉토리명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;RD(Remove Directory)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;디렉터리 삭제&lt;/span&gt;, 빈 디렉터리만 삭제 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: RD [드라이브:] [경로] 디렉토리명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CD(Change Directory)&lt;/b&gt;: 다른 디렉터리로 이동
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: CD [드라이브:] [경로] 디렉토리명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DELTREE&lt;/b&gt;: 디렉터리 &lt;span style=&quot;color: #ee2323;&quot;&gt;안에 있는 파일과 디렉터리까지 모두 삭제&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: DELTREE [드라이브:] [경로] 디렉토리명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;XCOPY&lt;/b&gt;: 특정한 디렉터리 내의 &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 파일 및 하위 디렉터리까지 복사&lt;/span&gt;, 숨김 파일과 시스템 파일은 복사되지 않음&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;옵션&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;/P&lt;/b&gt;: 각 파일을 복사할 때마다 취소할 수 있도록 확인 메시지 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/A&lt;/b&gt;: 파일에 저장 속성이 설정된 파일만 복사&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/S&lt;/b&gt;: 비어 있지 않은 디렉터리와 하위 디렉터리를 모두 복사&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/D&lt;/b&gt;: 특정 날짜 이후 변경된 파일만 복사&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: XCOPY [원본 드라이브:] [경로] 파일명 [대상 드라이브:] [경로] 파일명 [/옵션]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PATH&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;실행 파일을 찾는 경로&lt;/span&gt;를 설정하거나 보여주는 데 사용
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서로 다른 드라이브에 있는 파일도 PATH에 지정되면 검색 가능&lt;/li&gt;
&lt;li&gt;찾는 파일이 현재 디렉터리에 없을 때에만 PATH에서 지정한 경로를 검색&lt;/li&gt;
&lt;li&gt;경로와 경로 사이는 ;로 구분, 경로를 해체할 때는 PATH;를 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: PATH [경로] ; [경로]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;파일 명령어&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;DIR(DIRectory)&lt;/b&gt;: 디스트 내에 수록된 파일 및 디렉터리에 대한 정보를 표시
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;/P&lt;/b&gt;: 목록을 &lt;span style=&quot;color: #ee2323;&quot;&gt;한 화면&lt;/span&gt; 단위로 표시(&lt;b&gt;P&lt;/b&gt;age)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/W&lt;/b&gt;: 한 줄에 5개씩 목록을 &lt;span style=&quot;color: #ee2323;&quot;&gt;출력&lt;/span&gt;해 주는 것, &lt;span style=&quot;color: #ee2323;&quot;&gt;가장 많은 파일을 표현할 수 있는 방식&lt;/span&gt;(&lt;b&gt;W&lt;/b&gt;rite)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/O&lt;/b&gt;: 지정한 &lt;span style=&quot;color: #ee2323;&quot;&gt;정렬&lt;/span&gt; 방식으로 파일 목록을 표시하며 '/O-'로 지정하면 역순으로 표시(&lt;b&gt;O&lt;/b&gt;rder)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;D(Date)&lt;/b&gt;: 날짜 / 시간 빠른 순으로 정렬&lt;/li&gt;
&lt;li&gt;&lt;b&gt;E(Extension)&lt;/b&gt;: 확장자 순으로 정렬&lt;/li&gt;
&lt;li&gt;&lt;b&gt;N(Name)&lt;/b&gt;: 파일의 이름 순으로 정렬&lt;/li&gt;
&lt;li&gt;&lt;b&gt;S(Size)&lt;/b&gt;: 파일의 크기(Byte)가 작은 순으로 정렬&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/S&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;하위 디렉터리의 정보&lt;/span&gt;까지 표시&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/A&lt;/b&gt;: 기록 &lt;span style=&quot;color: #ee2323;&quot;&gt;속성&lt;/span&gt;이 설정된 목록을 표시(&lt;b&gt;A&lt;/b&gt;ttribute)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;/H&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;숨겨진&lt;/span&gt; 파일 목록을 표시(&lt;b&gt;H&lt;/b&gt;ide)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: DIR [드라이브:] [경로] 파일명 [/옵션]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;COPY&lt;/b&gt;: 파일을 지정한 곳에 복사하거나 여러 개의 파일을 결합
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: COPY [원본 드라이브:] 파일명 [복사할 드라이브:] 파일명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DEL=ERASE&lt;/b&gt;: 파일을 삭제
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: DEL [드라이브:] [경로] 파일명 [/옵션]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;UNDELETE&lt;/b&gt;: DEL이나 ERASE를 사용하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;삭제한 파일을 복원&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: UNDELETE [드라이브:] [경로] 파일명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;TYPE&lt;/b&gt;: 야스키 코드로 작성된 파일, CONFIG.SYS 파일, 배치 파일, COPY CON 명령으로 작성한 파일 등 &lt;span style=&quot;color: #ee2323;&quot;&gt;파일의 내용을 출력&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: TYPE [드라이브:] [경로] 파일명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;REN&lt;/b&gt;: 파일의 이름을 변경, 동일한 디렉터리 내에서만 사용 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: REN [드라이브:] [경로] 파일명 새로운 파일명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ATTRIB&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;파일의 속성을 표시&lt;/span&gt;, 해제, 지정(Attribute)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;+&lt;/b&gt;: 속성을 지정할 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;-&lt;/b&gt;: 속성을 해제할 때 사용&lt;/li&gt;
&lt;li&gt;&lt;b&gt;R&lt;/b&gt;: 읽기 전용 속성(&lt;b&gt;R&lt;/b&gt;ead)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;A&lt;/b&gt;: 저장/백업 속성(S&lt;b&gt;a&lt;/b&gt;ve)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;S&lt;/b&gt;: 시스템 파일 속성(&lt;b&gt;S&lt;/b&gt;ystem)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;H&lt;/b&gt;: 숨김 파일 속성(&lt;b&gt;H&lt;/b&gt;ide)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;형식&lt;/b&gt;: ATTRIB [+속성/-속성] [드라이브:] [경로] 파일명 [/옵션]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FC&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;두 개의 파일을 비교하여 차이를 표시&lt;/span&gt;, 파일 복사 후 확인할 때 사용&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>batch</category>
      <category>config</category>
      <category>dos</category>
      <category>명령어</category>
      <category>배치</category>
      <category>정보처리기능사</category>
      <category>환경</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/454</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-10-DOS%EC%9D%98-%EA%B0%9C%EC%9A%94#entry454comment</comments>
      <pubDate>Tue, 18 Mar 2025 15:34:37 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 9. 운영체제의 개요</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-9-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%9D%98-%EA%B0%9C%EC%9A%94</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;운영체제의 개념&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영체제(OS: Operating System)의 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;컴퓨터 하드웨어와 일반 컴퓨터 사용자 또는 응용 프로그램 중간에 위치&lt;/span&gt;하여 보다 쉽고 간편하게 컴퓨터 시스템을 이용할 수 있도록 제어하는 시스템 소프트웨어&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qmB2f/btsMOg15Xn9/M1NP0PqArq9D6cfdWl7LdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qmB2f/btsMOg15Xn9/M1NP0PqArq9D6cfdWl7LdK/img.png&quot; data-alt=&quot;운영체제의 위치&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qmB2f/btsMOg15Xn9/M1NP0PqArq9D6cfdWl7LdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqmB2f%2FbtsMOg15Xn9%2FM1NP0PqArq9D6cfdWl7LdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;185&quot; data-origin-width=&quot;1044&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;운영체제의 위치&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영체제의 목적&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반환 시간 단축, 사용 가능도 향상, 처리 능력 향상, 신뢰도 향상&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;반&lt;/b&gt;환 시간(Turn Around Time)&lt;/span&gt;: 작업을 제시하고 결과를 받을 때까지의 경과 시간&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;사&lt;/b&gt;용 가능도(Availability)&lt;/span&gt;: 필요할 때 즉시 사용 가능한 정도&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;처&lt;/b&gt;리 능력(Throughout)&lt;/span&gt;: 일정 시간 내에 시스템이 처리하는 일의 양&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;신&lt;/b&gt;뢰도(Reliability)&lt;/span&gt;: 주어진 문제를 정확하게 해결하는 정도&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; &amp;nbsp;&lt;/b&gt;&lt;b&gt;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;운영체제의 목적은 &lt;span style=&quot;color: #ee2323;&quot;&gt;반&amp;middot;사&amp;middot;처&amp;middot;신&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영체제의 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사용자와 컴퓨터 간의 인터페이스 제공&lt;/li&gt;
&lt;li&gt;시스템의 효율적인 운영 및 관리&lt;/li&gt;
&lt;li&gt;자원 스케줄링 및 주변장치 관리&lt;/li&gt;
&lt;li&gt;사용자 간의 데이터 호환&lt;/li&gt;
&lt;li&gt;각종 하드웨어와 네트워크 관리&lt;/li&gt;
&lt;li&gt;하드웨어의 메모리 관리 및 입출력 보조&lt;/li&gt;
&lt;li&gt;데이터 공유 및 관리&lt;/li&gt;
&lt;li&gt;초기 설정 기능 및 이식성 기능&lt;/li&gt;
&lt;li&gt;시스템의 오류 검사 및 복구&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영체제의 종류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행할 수 있는 작업 수에 따라 구분&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.5426%; text-align: justify;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.2868%; text-align: justify;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.1705%; text-align: justify;&quot;&gt;&lt;b&gt;OS&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.5426%; text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;단일 작업 처리 시스템&lt;br /&gt;(Single Tasking System)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.2868%; text-align: justify;&quot;&gt;컴퓨터 시스템을 한 개의 작업이 독점하여 사용하는 방식&lt;/td&gt;
&lt;td style=&quot;width: 22.1705%; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DOS&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.5426%; text-align: justify;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다중 작업 처리 시스템&lt;br /&gt;(Multi-Tasking System)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 52.2868%; text-align: justify;&quot;&gt;여러 개의 프로그램을 열어두고 다양한 작업을 동시에 진행하는 방식&lt;/td&gt;
&lt;td style=&quot;width: 22.1705%; text-align: justify;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Windows, UNIX, LINUX&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;운영체제의 구성&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GvYQT/btsMNcsHc5F/4PYRKtA2H7Dly8kgdyA5wk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GvYQT/btsMNcsHc5F/4PYRKtA2H7Dly8kgdyA5wk/img.png&quot; data-alt=&quot;운영체제의 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GvYQT/btsMNcsHc5F/4PYRKtA2H7Dly8kgdyA5wk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGvYQT%2FbtsMNcsHc5F%2F4PYRKtA2H7Dly8kgdyA5wk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;884&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;운영체제의 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제어 프로그램(Control Program)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;감&lt;/span&gt;시 프로그램(Supervisor Program)&lt;/b&gt;: 프로그램 실행과 시스템 작동 상태를 감시, 감독하는 프로그램&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;작&lt;/span&gt;업 제어 프로그램(Job Control Program)&lt;/b&gt;: 작업이 정상적으로 처리될 수 있도록 작업의 스케줄과 시스템 자원 할당 등을 관리하는 프로그램&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자료(&lt;span style=&quot;color: #ee2323;&quot;&gt;데&lt;/span&gt;이터) 관리 프로그램(Data Management Program)&lt;/b&gt;: 시스템에서&amp;nbsp;취급하는&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;파일과&amp;nbsp;데이터를&amp;nbsp;표준적인&amp;nbsp;방법으로&amp;nbsp;처리&lt;/span&gt;할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;관리하는&amp;nbsp;프로그램
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주기억장치와 보조기억장치 사이 자료 전송&lt;/li&gt;
&lt;li&gt;파일의 조작 및 처리&lt;/li&gt;
&lt;li&gt;입출력 자료와 프로그램 간의 논리적 연결&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; &amp;nbsp;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;운영체제의 제어 프로그램은 &lt;span style=&quot;color: #ee2323;&quot;&gt;감&amp;middot;작&amp;middot;데  &lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;처리 프로그램(Processing Program)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;언어 번역 프로그램(Language Translate Program)&lt;/b&gt;: 원시 프로그램(Source Program)을 기계어 형태의 목적 프로그램(Object Program)으로 번역하는 프로그램
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;어셈블러(Assembler)&lt;/b&gt;: 어셈블리어로&amp;nbsp;작성된&amp;nbsp;원시&amp;nbsp;프로그램을&amp;nbsp;기계어로&amp;nbsp;된&amp;nbsp;목적&amp;nbsp;프로그램으로&amp;nbsp;어셈블하는&amp;nbsp;프로그램&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컴파일러(Compiler)&lt;/b&gt;: 고급 언어로 작성된 프로그램 전체를 &lt;span style=&quot;color: #ee2323;&quot;&gt;목적 프로그램으로 번역&lt;/span&gt;한 후 링킹 작업을 통해 컴퓨터에서 실행 가능한 프로그램을 생성
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체를 번역하여 번역 속도가 느리지만 실행속도는 빠름&lt;/li&gt;
&lt;li&gt;FORTRAN,&amp;nbsp;COBOL,&amp;nbsp;PASCAL,&amp;nbsp;C,&amp;nbsp;C++,&amp;nbsp;PL/1&amp;nbsp;등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;인터프리터(Interpreter)&lt;/b&gt;: 고급 언어나 코드화된 중간 언어를 입력받아 &lt;span style=&quot;color: #ee2323;&quot;&gt;목적 프로그램 생성 없이&lt;/span&gt; 직접 기계어를 생성, 실행하는 프로그램
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;행, 줄을 기준으로 번역하여 번역 속도는 빠르지만 실행속도는 느림&lt;/li&gt;
&lt;li&gt;BASIC,&amp;nbsp;SNOBOL,&amp;nbsp;LISP,&amp;nbsp;APL&amp;nbsp;등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNMEyn/btsMOtmB7Hh/AEpG8nvRSChKif6bHjk68k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNMEyn/btsMOtmB7Hh/AEpG8nvRSChKif6bHjk68k/img.png&quot; data-alt=&quot;언어 번역 과정 (컴파일 -&amp;amp;gt; 링킹-&amp;amp;gt; 로딩 -&amp;amp;gt; 실행)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNMEyn/btsMOtmB7Hh/AEpG8nvRSChKif6bHjk68k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNMEyn%2FbtsMOtmB7Hh%2FAEpG8nvRSChKif6bHjk68k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;335&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;언어 번역 과정 (컴파일 -&amp;gt; 링킹-&amp;gt; 로딩 -&amp;gt; 실행)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;서비스 프로그램(Service Program)&lt;/b&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사용자의 편의를 위해&lt;/span&gt; 시스템 제공자가 미리 작성하여 사용자에게 제공해 주는 프로그램(사용 빈도가 높음)&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;링커(Linker), 연결 편집기(Linkage Editor)&lt;/b&gt;: 언어&amp;nbsp;번역&amp;nbsp;프로그램이&amp;nbsp;생성한&amp;nbsp;목적&amp;nbsp;프로그램들과&amp;nbsp;라이브러리,&amp;nbsp;또&amp;nbsp;다른&amp;nbsp;실행&amp;nbsp;프로그램(로드&amp;nbsp;모듈)&amp;nbsp;등을&amp;nbsp;연결하여&amp;nbsp;실행&amp;nbsp;가능한&amp;nbsp;로드&amp;nbsp;모듈을&amp;nbsp;만드는&amp;nbsp;프로그램&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정렬/합병 프로그램(Sort/Merge Program)&lt;/b&gt;: 데이터를&amp;nbsp;일정한&amp;nbsp;기준으로&amp;nbsp;정렬하거나&amp;nbsp;정렬된&amp;nbsp;두&amp;nbsp;개&amp;nbsp;이상의&amp;nbsp;파일을&amp;nbsp;하나로&amp;nbsp;합병하는&amp;nbsp;프로그램&lt;/li&gt;
&lt;li&gt;&lt;b&gt;라이브러리안(Librarian)&lt;/b&gt;: 프로그램&amp;nbsp;라이브러리를&amp;nbsp;유지,&amp;nbsp;관리하는&amp;nbsp;프로그램&lt;/li&gt;
&lt;li&gt;&lt;b&gt;유틸리티 프로그램(Utility Program)&lt;/b&gt;: 텍스트&amp;nbsp;에디터,&amp;nbsp;디버거&amp;nbsp;등&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;사용자의&amp;nbsp;편의를&amp;nbsp;위한&amp;nbsp;프로그램&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;로더(Loader, Module Loader)&lt;/b&gt;: 컴퓨터&amp;nbsp;내부로&amp;nbsp;정보를&amp;nbsp;들여오거나&amp;nbsp;로드&amp;nbsp;모듈을&amp;nbsp;디스크&amp;nbsp;등의&amp;nbsp;보조기억장치로부터&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;주기억장치에&amp;nbsp;적재하는&amp;nbsp;프로그램&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;할당(Allocagtion)&lt;/b&gt;&lt;/span&gt;: 실행 프로그램을 실행시키기 위해 기억장치 내에 옮겨 놓을 &lt;span style=&quot;color: #ee2323;&quot;&gt;기억 공간을 확보&lt;/span&gt;하는 기능&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;재배치(Relocation)&lt;/span&gt;&lt;/b&gt;:&amp;nbsp;보조기억장치에&amp;nbsp;저장된&amp;nbsp;프로그램이&amp;nbsp;사용하는&amp;nbsp;각&amp;nbsp;주소들을&amp;nbsp;할당된&amp;nbsp;기억장소의&amp;nbsp;실제&amp;nbsp;주소로&amp;nbsp;배치하는&amp;nbsp;기능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;적재(Loading)&lt;/b&gt;&lt;/span&gt;:&amp;nbsp;실행&amp;nbsp;프로그램을&amp;nbsp;할당된&amp;nbsp;기억공간에&amp;nbsp;실제로&amp;nbsp;옮기는&amp;nbsp;기능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;할당 -&amp;gt; &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;링킹, 연결&lt;/span&gt;&amp;nbsp;-&amp;gt; 재배치 -&amp;gt; 적재&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;문제 프로그램(Problem Program)&lt;/b&gt;: 특정 업무 및 문제 해결을 위해 사용자가 작성한 프로그램&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;운영체제의 운용 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;일괄 처리 시스템(Batch Processing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;일정량 또는 일정 기간 동안 데이터를 모아서 한꺼번에 처리하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;컴퓨터 시스템을 효율적으로 사용할 수 있고 계산 및 결산 업무에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다중 프로그래밍 시스템(Multi-Programming System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 CPU와 주기억장치를 이용하여 여러 개의 프로그램을 동시에 처리&lt;/span&gt;하는 방식&lt;/li&gt;
&lt;li&gt;하나의 주기억장치에 두 개 이상의 프로그램을 기억시켜 놓고 하나의 CPU와 대화하면서 동시에 처리(CPU의 사용률과 처리량 증가)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;시분할 시스템(Time Sharing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사용자가 일정한 시간 간격(Time Slice) 동안 CPU를 사용&lt;/span&gt;함으로써 단독으로 CPU를 사용하는 것과 같은 효과를 가지는 시스템으로 라운드 로빈(Round Robin) 방식이라고도 함&lt;/li&gt;
&lt;li&gt;한 시스템을 여러 명의 사용자가 공유하여 동시에 작업을 수행하기 때문에 효율은 좋으나 반응 속도가 느림&lt;/li&gt;
&lt;li&gt;각 작업에 대한 응답 시간을 최소한으로 줄이는 것이 목적&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다중&amp;nbsp;처리&amp;nbsp;시스템(Multi-Processing&amp;nbsp;System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;컴퓨터 한 대에 두 개 이상의 CPU를 설치하여 병렬처리&lt;/span&gt; 하는 것, 한 시스템에서 여러 개의 처리 과정을 동시에 수행&lt;/li&gt;
&lt;li&gt;하나의 CPU가 고장 나더라도 다른 CPU를 이용하여 업무를 처리할 수 있으므로 신뢰성과 안정성이 높음&lt;/li&gt;
&lt;li&gt;여러 개의 프로그램을 동시에 실행하여 CPU와 입출력장치를 최대한 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실시간 처리 시스템(Real Time Processing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 발생 또는 데이트 처리 요구가 있는 &lt;span style=&quot;color: #ee2323;&quot;&gt;즉시 처리&lt;/span&gt;하여 결과를 산출하는 방식&lt;/li&gt;
&lt;li&gt;처리 시간 단축 및 비용 절감&lt;/li&gt;
&lt;li&gt;시간에 제한을 두고 신속하게 수행되어야 하는 작업에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;분산 처리 시스템(Distributed&amp;nbsp;Processing System)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;지역적으로 분산&lt;/span&gt;된 여러 개의 컴퓨터(프로세서)를 통신 회선으로 연결하여 하나의 작업을 처리하는 방식&lt;/li&gt;
&lt;li&gt;각 컴퓨터 시스템은 고유의 운영 체제와 CPU, 메모리를 가지고 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;운영체제 운용 기법의 발달 과정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;단&lt;/b&gt;일 처리 -&amp;gt; &lt;b&gt;일&lt;/b&gt;괄 처리 시스템 -&amp;gt; 다중 &lt;b&gt;프&lt;/b&gt;로그래밍 시스템 -&amp;gt; &lt;b&gt;시&lt;/b&gt;분할 시스템 -&amp;gt; 다중 &lt;b&gt;처&lt;/b&gt;리 시스템 -&amp;gt; &lt;b&gt;실&lt;/b&gt;시간 처리 시스템 -&amp;gt; &lt;b&gt;범&lt;/b&gt;용 시스템 -&amp;gt; &lt;b&gt;분&lt;/b&gt;산 처리 시스템&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;  &lt;/b&gt;&lt;b&gt;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;- 운영체제 운용 기법의 발달 과정은 &lt;span style=&quot;color: #ee2323;&quot;&gt;단&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;middot;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;일&amp;middot;프&amp;middot;시&amp;middot;처&amp;middot;실&amp;middot;범&amp;middot;분&lt;br /&gt;&lt;/span&gt;-&amp;nbsp;다중 프로그래밍 -&amp;gt; 1개의 CPU, 다중 처리 -&amp;gt; 여러 개의 CPU&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로세스 관리 및 스케줄링&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스의 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서(처리기, CPU)에 의해 처리되는 사용자 프로그램, 즉 &lt;span style=&quot;color: #ee2323;&quot;&gt;실행 중인 프로그램&lt;/span&gt;을 의미&lt;br /&gt;작업(Job) 또는 태스크(Task)라고도 불림&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실 기억장치에 저장된 프로그램&lt;/li&gt;
&lt;li&gt;프로세서가 할당되는 실체&lt;/li&gt;
&lt;li&gt;운영체제가 관리하는 실행 단위&lt;/li&gt;
&lt;li&gt;실행 중인 프로그램&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스 상태 전이&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;675&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pBzMm/btsMMHmmxCQ/PHIXR0ROA9Bt6hPQJqNtY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pBzMm/btsMMHmmxCQ/PHIXR0ROA9Bt6hPQJqNtY0/img.png&quot; data-alt=&quot;프로세스 상태 전이&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pBzMm/btsMMHmmxCQ/PHIXR0ROA9Bt6hPQJqNtY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpBzMm%2FbtsMMHmmxCQ%2FPHIXR0ROA9Bt6hPQJqNtY0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;675&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;675&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로세스 상태 전이&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;제출(Submit)&lt;/b&gt;: 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태&lt;/li&gt;
&lt;li&gt;&lt;b&gt;접수(Hold)&lt;/b&gt;: 제출된 작업이 스풀 공간인 디스크의 할당 위치에 저장된 상태&lt;/li&gt;
&lt;li&gt;&lt;b&gt;준비(Ready)&lt;/b&gt;: 프로세스가 CPU를 할당받기 위해 준비상태 큐에 실행을 준비하는 상태(&lt;span style=&quot;color: #ee2323;&quot;&gt;CPU를 할당받기만 하면 바로 실행 가능&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;실행(Run)&lt;/b&gt;: 준비상태 큐에 있는 프로세스가 CPU를 할당받아 실행되는 상태&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대기(Wait), 보류, 블록(Block)&lt;/b&gt;: 프로세스에 입출력 처리가 필요하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;현재 프로세스가 중단되고 입출력 처리가 완료될 때까지 대기&lt;/span&gt;하고 있는 상태&lt;/li&gt;
&lt;li&gt;&lt;b&gt;종료(Terminated, Exit)&lt;/b&gt;: 프로세서의 실행이 끝나고 프로세스 할당이 해제된 상태&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디스패치(Dispatch)&lt;/b&gt;: 준비 상태에서 대기하고 있는 프로세스 중 &lt;span style=&quot;color: #ee2323;&quot;&gt;우선순위가 가장 높은 프로세스가 CPU를 할당&lt;/span&gt;받아 실행 상태로 전이되는 과정&lt;/li&gt;
&lt;li&gt;&lt;b&gt;입출력 종료 깨움(Wake Up)&lt;/b&gt;: 입출력이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스케줄링(Scheduling)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;프로세스가 실행될 때 필요한 시스템의 여러 자원을 프로세스에 할당&lt;/span&gt;하는 작업을 의미(&lt;span style=&quot;color: #ee2323;&quot;&gt;프로세스를 생성, 실행, 중단, 소멸&lt;/span&gt;)&lt;br /&gt;이를 수행하는 것을 스케줄러(Scheduler)라고 함&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;목적&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 프로세스에 공정하게 할당&lt;/li&gt;
&lt;li&gt;단위 시간당 프로세스를 처리하는 비율 증가&lt;/li&gt;
&lt;li&gt;응답 시간 및 반환 시간 최소화&lt;/li&gt;
&lt;li&gt;경과 시간의 예측이 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;종류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;비선점(Non-preemptive) 스케줄링&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;하나의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;프로세스가 이미 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 프로세스에 할당된 CPU를 강제로 빼앗아 &lt;b&gt;사용할 수 없는&lt;/b&gt;&lt;/span&gt; 스케줄링 기법
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;FCFS = FIFO&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;준비상태 큐에 도착한 순서대로 CPU를 할당&lt;/span&gt;하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;SJF(Shortest Job First)&lt;/b&gt;: 준비상태 큐에서 기다리고 있는 프로세스 중 &lt;span style=&quot;color: #ee2323;&quot;&gt;실행 시간이 가장 짧은 프로세스에 먼저 CPU를 할당&lt;/span&gt;하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;HRN&lt;/b&gt;: SJF를 보완하기 위함, 대기 시간과 서비스(실행) 시간을 이용한 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;우선순위:&lt;/b&gt; 준비상태 큐에서 기다리는 프로세스마다&lt;span style=&quot;color: #ee2323;&quot;&gt; 우선순위를 부여하여 가장 높은 프로세스에게 먼저 CPU를 할당&lt;/span&gt;하는 기법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;선점(Preemptive) 스케줄링&lt;/b&gt;&lt;br /&gt;하나의 프로세스가 이미 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 프로세스에 할당된 CPU를 강제로 빼앗아 &lt;b&gt;사용할 수 있는&lt;/b&gt;&lt;/span&gt; 스케줄링 기법&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;SRT(Shortest Remaining Time)&lt;/b&gt;: 현재 실행 중인 프로세스의 남은 시간과 준비상태 큐에 새로 도착한 프로세스의 실행 시간을 비교하여 짧은 실행 시간의 프로세스에게 CPU를 할당하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;라운드 로빈(RR: Round Robin)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;규정 시간 또는 시간 조각(Slice)&lt;/span&gt;을 미리 정의하여, 준비상태 큐에서 정의된 시간만큼 각 프로세스에 CPU를 제공하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;시분할 시스템에 적절&lt;/span&gt;한 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다단계 큐&lt;/b&gt;: 프로세스를 특정 그룹으로 분류할 수 있을 경우, 그룹마다 준비상태 큐를 사용하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다단계 피드백 큐&lt;/b&gt;: 준비상태 큐에 들어간 프로세스가 다른 그룹의 준비상태 큐로 이동할 수 없는 다단계 큐 기법에서 이동할 수 있도록 개선한 기법&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;교착 상태(Dead Lock)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다중 프로그래밍 상에서 두 개의 프로세스가 실행 중에 있을 때 점유하고 있는 자원을 다른 프로세스가 요구하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;두 프로세스 모두 실행할 수 없게 되는 현상 (impossible for any of the processes to proceed)&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;교착 상태 발생의 필요 충분 조건&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;상호 배체(Mutual Exclusion)&lt;/b&gt;: 한 번에 한 개의 프로세스만 공유 자원을 사용할 수 있어야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;점유와 대기(Hold and Wait)&lt;/b&gt;: 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;비선점(Non-preemptive)&lt;/span&gt;&lt;/b&gt;: 다른 프로세스가 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 함&lt;/li&gt;
&lt;li&gt;&lt;b&gt;환형 대기, 순환 대기(Circular Wait)&lt;/b&gt;: 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기억장치 관리 전략&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보조기억장치의&amp;nbsp;프로그램이나 데이터를 주기억장치에&amp;nbsp;적재시키는 시기, 적재 위치 등을 지정하여 주기억장치의 공간을 효율적으로 사용하기 위한 것&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;반입(Fetch) 전략&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보조기억장치에 보관 중인 프로그램이나 데이터를 언제 주기억장치로 적재할 것인지 결정하는 전략&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;요구 반입(Demand Fetch)&lt;/b&gt;: 프로그램이나 데이터 참조를 요구할 때 적재하는 방법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예상 반입(Anticipatory Fetch)&lt;/b&gt;: 프로그램이나 데이터의 참조를 미리 예상하여 적재하는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;배치(Placement) 전략&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램이나 데이터를 주기억장치 어디에 위치시킬 것인지 결정하는 전략&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;최초 적합(First Fit)&lt;/b&gt;: 첫 번째 분할 영역에 배치시키는 방법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최적 적합(Best Fit)&lt;/b&gt;: 단편화(빈 기억공간)를 가장 작게 남기는 분할 영역에 배치시키는 방법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;최악 적합(Worst Fit)&lt;/b&gt;: 단편화(빈 기억공간)를 가장 많이 남기는 분할 영역에 배치시키는 방법&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;페이지 교체(Page Replacement, 페이지 대체) 전략&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;페이지 부재(Page Fault)가 발생했을 때 주기억장치의 모든 페이지 프레임이 사용 중이면 어떤 페이지 프레임을 선택하여 교체할지 결정하는 기법&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;OPT(OPTimal replacement, 최적 교체)&lt;/b&gt;: 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;FIFO(First in First Out)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;가장 오래된(Oldest)&lt;/span&gt; 페이지를 교체하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LRU(Least Recently Used)&lt;/b&gt;:  &lt;span style=&quot;color: #ee2323;&quot;&gt;가장 오래 참조되지 않은 &lt;/span&gt;페이지를 교체하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MRU(Most Recently Used), MFU(Most Frequently Used)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;사용 빈도가 가장 많은&lt;/span&gt; 페이지를 교체하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LFU(Least Frequently Used)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;사용 빈도가 가장 적은&lt;/span&gt; 페이지를 교체하는 기법&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NUR(Not Used Recently)&lt;/b&gt;: &lt;span style=&quot;color: #ee2323;&quot;&gt;최근에 사용하지 않은&lt;/span&gt; 페이지를 교체하는 기법&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>자격증</category>
      <category>기억장치</category>
      <category>데드락</category>
      <category>운영체제</category>
      <category>정보처리기능사</category>
      <category>페이지</category>
      <category>프로세스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/453</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-9-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EC%9D%98-%EA%B0%9C%EC%9A%94#entry453comment</comments>
      <pubDate>Tue, 18 Mar 2025 02:37:27 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 8. 스프레드시트와 프레젠테이션</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-8-%EC%8A%A4%ED%94%84%EB%A0%88%EB%93%9C%EC%8B%9C%ED%8A%B8%EC%99%80-%ED%94%84%EB%A0%88%EC%A0%A0%ED%85%8C%EC%9D%B4%EC%85%98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;스프레드시트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;수치 계산과 관련된 업무&lt;/span&gt;에서 효율적으로 전표의 작성, 처리, 관리가 가능하도록 지원하는 응용프로그램(엑셀, 로터스, 1-2-3 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서 작성, 수치 계산, 차트 작성, 데이터 관리, 매크로의 기능 존재&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;워크시트의 구성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;워크시트(Workseet): 데이터 작업이 이루어지는 기본 문서, 셀로 구성되어 있음&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;셀(Cell): 행과 열이 교차되면서 만들어지는 사격형, 데이터가 입력되는 기본 단위&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;셀 포인터(Cell Pointer): 작업이 이루어지는 셀을 의미&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;활성 셀(Active Cell): 셀 포인터가 위치한 셀&lt;/li&gt;
&lt;li&gt;행 머리글: 행의 맨 왼쪽에 숫자(1 ~ 65,536)로 표시되어 있는 부분&lt;/li&gt;
&lt;li&gt;열 머리글: 열의 맨 위쪽에 문자(A ~ IV, 총 256개)로 표시되어 있는 부분&lt;/li&gt;
&lt;li&gt;시트 탭(Seet Tab): 시트의 이름을 표시하는 부분, 클릭 시 시트 선택 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 입력&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 입력할 셀로 셀 포인터를 이동한 다음 데이터를 입력하고 [Enter]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀의 데이터를 입력하면 수식 입력줄에도 입력한 내용이 표시&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;셀의 범위 지정&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;연속된 셀의 범위 지정&lt;/span&gt;: 첫 번째 셀을 클릭한 후 &lt;span style=&quot;color: #ee2323;&quot;&gt;[Shift]&lt;/span&gt;를 누른 상태에서 지정할 마지막 셀을 클릭&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서로 떨어진 셀의 범위 지정&lt;/span&gt;: 첫 번째 셀을 클릭한 후 &lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl]&lt;/span&gt;을 누른 상태에서 원하는 셀을 클릭&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;함수(수식)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램에 이미 정의된 수식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식이 입력된 셀에는 값이 표시되고 수식은 수식 입력줄에 표시(&lt;span style=&quot;color: #ee2323;&quot;&gt;=, +, -로 시작&lt;/span&gt;)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SUM(인수1, 인수2, ... ): 인수의 합계&lt;/li&gt;
&lt;li&gt;AVERAGE(인수1, 인수2, ... ): 인수의 평균&lt;/li&gt;
&lt;li&gt;MAX(인수1, 인수2, ... ): 인수 중 최댓값&lt;/li&gt;
&lt;li&gt;MIN(인수1, 인수2, ... ): 인수 중 최솟값&lt;/li&gt;
&lt;li&gt;COUNT(인수1, 인수2, ... ): 인수 중 숫자가 들어 있는 셀의 개수&lt;/li&gt;
&lt;li&gt;LEFT(텍스트, 개수): 텍스트의 왼쪽부터 지정한 개수만큼 표시&lt;/li&gt;
&lt;li&gt;MID(텍스트, 시작 위치, 개수): 텍스트의 시작 위치부터 지정한 개수만큼 표시&lt;/li&gt;
&lt;li&gt;RIGHT(텍스트, 개수): 텍스트의 오른쪽부터 지정한 개수만큼 표시&lt;/li&gt;
&lt;li&gt;NOW(): 현재 날짜와 시간을 표시&lt;/li&gt;
&lt;li&gt;TODAY(): 현재 날짜를 표시&lt;/li&gt;
&lt;li&gt;IF(조건1, 인수1, 인수2): 조건이 참일 때 인수1, 거짓일 때 인수2를 실행&lt;/li&gt;
&lt;li&gt;AND(인수1, 인수2): 인수가 모두 참일 때 참&lt;/li&gt;
&lt;li&gt;OR(인수1, 인수2): 인수 중 하나라도 참이면 참&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참조&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수식에서 특정 셀이나 셀 범위의 데이터 또는 결괏값을 사용하기 위해 주소를 지정하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;수식에 사용된 셀의 값이 변경되면 해당 셀을 참조하는 수식의 값도 자동으로 재계산&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 70px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;b&gt;참조 대상&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 19px;&quot;&gt;&lt;b&gt;참조 방법&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;[A1]부터 [A5]까지의 셀&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;A1:A5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;A1셀, B2셀 , C3셀&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;A1, B2, C3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;4행에 있는 모든 셀&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 17px;&quot;&gt;4:4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;C열에 있는 모든 셀&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;C:C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span&gt;[A1]부터 [A5]까지의 셀과 [C1]부터 [C5]까지의 셀&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;A1:A5, C1:C5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상대 참조: 셀에 위치에 따라 상대적으로 셀 주소가 변하는 형태, 수식을 복사하면 셀 주소 수식이 복사된 셀의 상대적 위치로 변경 &lt;br /&gt;ex) A1, B1&lt;/li&gt;
&lt;li&gt;절대 참조: 특정 셀의 주소를 고정시킬 때 사용하는 형태, 수식을 다른 셀로 복사해도 셀 주소는 변경되지 않음&lt;br /&gt;ex) $A$1:$B$1&lt;/li&gt;
&lt;li&gt;혼합 참조: 상대 참조와 절대 참조를 혼합하여 사용&lt;br /&gt;ex) $A1, A$1, $B1, B$1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;엑셀의 주요 기능&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;매크로&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다양한 명령들을 일련의 순서대로 기록해두었다가 필요할 때마다 키나 도구를 이용해 호출해 처리하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;작업을 일괄적으로 자동화 시켜 처리&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;차트&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워크시트에 막대나 선, 도형, 그림 등을 사용하여 시각적으로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 쉽고 직관적으로 이해할 수 있으며, 간결하게 요약 가능&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;정렬&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 기준에 따라 재배열하는 기능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셀의 값에 따라 오름차순, 내림차순으로 재배열 가능&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;레코드 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 레코드 단위로 검색, 추가, 수정, 삭제 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 자료에서 사용자가 원하는 레코드만 선택하여 표시&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;부분합&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 그룹(필드) 별로 분류하고, 그룹별로 계산을 수행하는 데이터 분석 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준이 되는 필드를 반드시 정렬해야 함&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;피벗 테이블&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 한눈에 쉽게 파악할 수 있도록 요약, 분석해서 보여주는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 행이나 열의 위치를 변경하여 다양한 형태로 표시 가능&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;필터&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;특정 조건에 맞는 데이터만 추출하여 화면에 나타내는 기능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조건을 기술하는 방법에 따라 자동 필터와 고급 필터로 구분&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;하이퍼링크&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;워크시트에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 문서나 웹으로 연결되는 링크를 설정&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;프레젠테이션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;많은 사람에게 &lt;span style=&quot;color: #ee2323;&quot;&gt;효과적으로&lt;/span&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;의미와 의사를 전달&lt;/span&gt;할 수 있도록 각종 그림이나 도표, 그래프 등으로 지원하는 응용 프로그램&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;프레젠테이션의 기능&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슬라이드 제작/편집: 준비된 자료를 입력한 후 보기 좋게 꾸밀 수 있음&lt;/li&gt;
&lt;li&gt;슬라이드 쇼 진행: 자동이나 수동으로 슬라이드 쇼를 진행하거나 애니메이션 효과를 추가&lt;/li&gt;
&lt;li&gt;개체 삽입: 각종 클립아트, 그림, 조직도, 차트, 소리, 동영상 등 삽입&lt;/li&gt;
&lt;li&gt;그림 그리기: 그리기 도구를 이용해 새로운 형태의 그림을 만들 수 있음&lt;/li&gt;
&lt;li&gt;OLE(개체 연결 및 삽입) 기능: OLE 기능을 이용하여 손쉽게 외부 자료를 활용&lt;/li&gt;
&lt;li&gt;유인물, 설명문, 개요 작성: 발표 내용을 설명문, 유인물, OHP 등으로 다양하게 제작&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;프레젠테이션의 구성&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 152px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.3953%; height: 19px;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6047%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 21.3953%; height: 57px;&quot;&gt;&lt;b&gt;슬라이드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6047%; height: 57px;&quot;&gt;- 프레젠에티션을 구성하는 내용을 &lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 화면 단위&lt;/span&gt;로 표현&lt;br /&gt;- 각 페이지의 기본 단위&lt;br /&gt;- 연속적이 선택은 &lt;span style=&quot;color: #ee2323;&quot;&gt;[Ctrl]&lt;/span&gt;를 누른 상태로 선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 21.3953%; height: 38px;&quot;&gt;&lt;b&gt;개체(Object)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6047%; height: 38px;&quot;&gt;- 한 화면을 구성하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;개개의 요소&lt;/span&gt;&lt;br /&gt;- 연속적이 선택은 [Shift]를 누른 상태로 선택&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.3953%; height: 19px;&quot;&gt;&lt;b&gt;시나리오&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6047%; height: 19px;&quot;&gt;- 프레젠테이션의 &lt;span style=&quot;color: #ee2323;&quot;&gt;흐름&lt;/span&gt;을 기획한 것&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.3953%; height: 19px;&quot;&gt;&lt;b&gt;개요&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.6047%; height: 19px;&quot;&gt;- 시나리오에 의한 프레젠테이션의 내용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증</category>
      <category>셀</category>
      <category>스프레드시트</category>
      <category>슬라이드</category>
      <category>워크시트</category>
      <category>정보처리기능사</category>
      <category>포인터</category>
      <category>프레젠테이션</category>
      <category>함수</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/452</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-8-%EC%8A%A4%ED%94%84%EB%A0%88%EB%93%9C%EC%8B%9C%ED%8A%B8%EC%99%80-%ED%94%84%EB%A0%88%EC%A0%A0%ED%85%8C%EC%9D%B4%EC%85%98#entry452comment</comments>
      <pubDate>Sun, 16 Mar 2025 15:50:13 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 7. SQL 활용</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-7-SQL-%ED%99%9C%EC%9A%A9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;SQL의 개념&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SQL(Structured Query Language)의 개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스의 표준 &lt;span style=&quot;color: #ee2323;&quot;&gt;질의어&lt;/span&gt;로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;데이터 구조 정의&lt;/b&gt;, &lt;b&gt;데이터 조작&lt;/b&gt;, &lt;b&gt;데이터 제어&lt;/b&gt;&lt;/span&gt; 기능을 수행(DBMS의 기능)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SQL의 분류&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 용도에 따라다 DDL, DML, DCL로 구분&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;DDL(Data Define Language, 데이터 정의어)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경, 삭제할 때 사용하는 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 관리자나 데이터베이스 설계자가 사용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 133px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 19px;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.2325%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.0698%; height: 19px;&quot;&gt;&lt;b&gt;표기 형식&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 19px;&quot;&gt;&lt;b&gt;CREATE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.2325%; height: 19px;&quot;&gt;SCHEMA, DOMAIN, TABLE, VIEW, INDEX &lt;span style=&quot;color: #ee2323;&quot;&gt;정의&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.0698%; height: 19px;&quot;&gt;CREATE TABLE {테이블명};&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 19px;&quot;&gt;&lt;b&gt;ALTER&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.2325%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;TABLE&lt;/span&gt;에 대한 정의 &lt;span style=&quot;color: #ee2323;&quot;&gt;변경&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.0698%; height: 19px;&quot;&gt;ALERT TABLE {&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;테이블명&lt;/span&gt;} ADD {&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;속성명&lt;/span&gt;} {&lt;span style=&quot;background-color: #f9f9f9; color: #333333; text-align: start;&quot;&gt;data-type&lt;/span&gt;};&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 10.6977%; height: 76px;&quot;&gt;&lt;b&gt;DROP&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 40.2325%; height: 76px;&quot;&gt;SCHEMA, DOMAIN, TABLE, VIEW, INDEX &lt;span style=&quot;color: #ee2323;&quot;&gt;삭제&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.0698%; height: 76px;&quot;&gt;DROP TABLE {테이블명} [CASCADE | RESTRICT];&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;CASCADE&lt;/span&gt;: 삭제할 요소를 참조하는 다른 모든 개체를 함께 삭제&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;RESTRICT&lt;/span&gt;: 삭제할 요소를 다른 개체가 참조중일 때는 삭제를 취소&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;DML(Data Manipulation Language, 데이터 조작어)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 처리하는 데 사용하는 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 사용자와 데이터베이스 관리 시스템(DBMS) 간의 인터페이스 제공&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.5116%; height: 19px;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.4884%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.5116%; height: 19px;&quot;&gt;&lt;b&gt;SELECT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.4884%; height: 19px;&quot;&gt;테이블에서 조건에 맞는 튜플(레코드)을 &lt;span style=&quot;color: #ee2323;&quot;&gt;검색&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.5116%; height: 19px;&quot;&gt;&lt;b&gt;INSERT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.4884%; height: 19px;&quot;&gt;테이블에 새로은 튜플(레코드)을 &lt;span style=&quot;color: #ee2323;&quot;&gt;삽입&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.5116%; height: 19px;&quot;&gt;&lt;b&gt;UPDATE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.4884%; height: 19px;&quot;&gt;테이블에 조건에 맞는 튜플(레코드)의 내용을 변경(&lt;span style=&quot;color: #ee2323;&quot;&gt;갱신&lt;/span&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 16.5116%; height: 19px;&quot;&gt;&lt;b&gt;DELETE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.4884%; height: 19px;&quot;&gt;테이블에 조건에 맞는 튜플(레코드)을 &lt;span style=&quot;color: #ee2323;&quot;&gt;삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;DCL(Data Control Language, 데이터 제어어)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는 데 사용하는 언어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 관리자가 데이터 관리를 목적으로 사용&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3721%;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;&lt;b&gt;COMMIT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3721%;&quot;&gt;명령에 의해 수행된 결과를 실제 물리적 디스크로 저장하고, 데이터베이스 조작 작업이 정상적으로 완료되었음을 알려줌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;&lt;b&gt;ROLLBACK&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3721%;&quot;&gt;데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래의 상태로 복구&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;&lt;b&gt;GRANT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3721%;&quot;&gt;데이터베이스 사용자에게 사용 권한 부여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6279%;&quot;&gt;&lt;b&gt;REVOKE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 83.3721%;&quot;&gt;데이터베이스 사용자의 사용 권한을 취소&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터 조작어[DML] - SELECT&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;SELECT &lt;b&gt;[DISTINCT] {필드명} [AS 별명]&lt;/b&gt;&lt;br /&gt;FROM {테이블명} &lt;br /&gt;&lt;b&gt;[WHERE 조건식]&lt;/b&gt; &lt;br /&gt;&lt;b&gt;[GROUP BY 필드명]&lt;/b&gt; &lt;br /&gt;&lt;b&gt;[HAVING 그룹조건식]&lt;/b&gt; &lt;br /&gt;&lt;b&gt;[ORDER BY 필드명 정렬방식]&lt;/b&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DISTINCT: 중복되는 레코드는 검색 시 한 번만 표시(&lt;span style=&quot;color: #ee2323;&quot;&gt;중복 제거&lt;/span&gt;)&lt;/li&gt;
&lt;li&gt;필드명: &lt;span style=&quot;color: #ee2323;&quot;&gt;모든 필드를 검색할 경우 &quot;*&quot;을 입력&lt;/span&gt;, 특정 필드를 검색할 경우 필드명을 쉼표( , )로 구분하여 표시&lt;/li&gt;
&lt;li&gt;AS: 특정 필드나 테이블의 별명(Alias)을 지정&lt;/li&gt;
&lt;li&gt;WHERE 조건식: 조건을 입력하여 조건에 맞는 레코드만 검색&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;비교 연산자: =, &amp;lt;&amp;gt;, &amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=,&amp;nbsp; IN&lt;/li&gt;
&lt;li&gt;논리 연산자: NOT, AND, OR&lt;/li&gt;
&lt;li&gt;LIKE: 특정 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플(레코드)만 검색&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GROUP BY: 특정 필드를 기준으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;그룹화&lt;/span&gt;하여 검색&lt;/li&gt;
&lt;li&gt;HAVING: &lt;span style=&quot;color: #ee2323;&quot;&gt;그룹에 대한 조건&lt;/span&gt;을 지정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;그룹 함수의 종류
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;COUNT(속성명): 그룹별 튜플 수를 구하는 함수&lt;/li&gt;
&lt;li&gt;MAX(속성명): 그룹별 최댓값을 구하는 함수&lt;/li&gt;
&lt;li&gt;MIN(속성명): 그룹별 최솟값을 구하는 함수&lt;/li&gt;
&lt;li&gt;SUM(속성명): 그룹별 합계를 구하는 함수&lt;/li&gt;
&lt;li&gt;AVG(속성명): 그룹별 평균을 구하는 함수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ORDER BY: 특정 필드를 기준으로 레코드를 &lt;span style=&quot;color: #ee2323;&quot;&gt;정렬&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;정렬방식: &lt;span style=&quot;color: #ee2323;&quot;&gt;오름차순은 ASC, 내림차순은 DESC&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;  외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;DISTINCT: 중복제거&lt;/b&gt;&lt;br /&gt;&lt;b&gt;*: 전체 필드 검색&lt;/b&gt;&lt;br /&gt;&lt;b&gt;GROUP BY: 그룹화&lt;/b&gt;&lt;br /&gt;&lt;b&gt;HAVING: 그룹화의 조건&lt;/b&gt;&lt;br /&gt;&lt;b&gt;ORDER BY: 정렬(ASC: 오름차순, DESC: 내림차순)&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;데이터 조작어[DML] - INSERT,&amp;nbsp; UPDATE, DELETE&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;INSERT(삽입문)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 튜플(레코드)을 삽입할 때 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;INSERT INTO&lt;/span&gt; {테이블명}(속성명1, 속성명2, ... ) &lt;span style=&quot;color: #ee2323;&quot;&gt;VALUES&lt;/span&gt; (데이터1, 데이터2, ... )&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대응하는 속성과 데이터는 개수와 데이터 형식이 일치해야 함&lt;/li&gt;
&lt;li&gt;테이블의 모든 속성을 사용할 때는 속성명을 생략할 수 있음(데이터는 속성에 순서에 따라 순서대로 표기)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UPDATE(갱신문)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;튜플(레코드)의 내용을 변경시킬 때 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;UPDATE&lt;/span&gt; {테이블명} &lt;span style=&quot;color: #ee2323;&quot;&gt;SET&lt;/span&gt; 속성명1=데이터1, 속성명2=데이터2 ... [&lt;span style=&quot;color: #ee2323;&quot;&gt;WHERE&lt;/span&gt; 조건식]&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DELETE(삭제문)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;튜플(레코드)을 삭제시킬 때 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DELETE FROM&lt;/span&gt; {테이블명} [&lt;span style=&quot;color: #ee2323;&quot;&gt;WHERE&lt;/span&gt; 조건식]&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모든 튜플(레코드)을 삭제할 때는 WHERE문 생략&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;DELETE -&amp;gt; 튜플(레코드 삭제), DROP -&amp;gt; 테이블 삭제&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;SELECT(검색): SELECT ~ FROM ~ WHERE ~&lt;/b&gt;&lt;br /&gt;&lt;b&gt;INSERT(삽입): INSERT ~ INTO ~ VALUES ~&lt;/b&gt;&lt;br /&gt;&lt;b&gt;UPDATE(갱신): UPDATE ~ SET ~ WHERE ~&lt;/b&gt;&lt;br /&gt;&lt;b&gt;DELETE(삭제): DELETE ~ SET ~ WHERE ~&lt;/b&gt;&lt;/blockquote&gt;</description>
      <category>자격증</category>
      <category>DCL</category>
      <category>DDL</category>
      <category>Delete</category>
      <category>dml</category>
      <category>insert</category>
      <category>query</category>
      <category>select</category>
      <category>SQL</category>
      <category>Update</category>
      <category>정보처리기능사</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/451</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-7-SQL-%ED%99%9C%EC%9A%A9#entry451comment</comments>
      <pubDate>Sun, 16 Mar 2025 14:24:47 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 6. 데이터베이스 활용</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-6-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%99%9C%EC%9A%A9</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터베이스의 개념&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스의 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 조직의 기능을 수행하는 데 필요한 상호 관련 데이터들의 모임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공동으로 사용될 데이터를 중복을 최소화하여 통합하고, 항상 쉽게 접근하여 처리할 수 있도록 저장장치에 저장하여 운영하는 데이터&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스의 특징&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.5116%; height: 19px;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.5116%; height: 19px;&quot;&gt;&lt;b&gt;실시간 접근성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%; height: 19px;&quot;&gt;-&amp;nbsp;데이터 조작 및 검색 실시간 응답 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.5116%; height: 19px;&quot;&gt;&lt;b&gt;계속적인 변화&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%; height: 19px;&quot;&gt;-&amp;nbsp;데이터의 삽입, 삭제, 갱신으로 항상 최신의 데이터 유지&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.5116%; height: 19px;&quot;&gt;&lt;b&gt;동시 공유&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%; height: 19px;&quot;&gt;-&amp;nbsp;여러 사용자가 동시에 데이터에 접근하여 이용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.5116%; height: 19px;&quot;&gt;&lt;b&gt;내용에 의한 참조&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.4884%; height: 19px;&quot;&gt;-&amp;nbsp;데이터의 주소나 위치가 아니라 데이터 내용에 의해 접근&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스의 장단점&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;- 데이터 중복 최소화&lt;br /&gt;- 데이터 공유&lt;br /&gt;- 데이터 일관성, 무결성 유지&lt;br /&gt;- 데이터 논리적, 물리적 독립성 유지&lt;br /&gt;- 데이터 저장공간 절약&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;- 전산화 비용 증가&lt;br /&gt;- 데이터 유실 시 파일 회복이 어려움&lt;br /&gt;- 시스템의 복잡화&lt;br /&gt;- 처리 속도가 느림&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;DBMS(Database Menagement System, 데이터베이스 관리 시스템)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자와 데이터베이스 사이에 위치, 데이터베이스를 관리하고 사용자의 요구에 따라 정보를 생성해 주는 소프트웨어&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;필수 기능&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.907%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.093%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.907%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정&lt;/span&gt;&lt;/b&gt;의 기능&lt;/td&gt;
&lt;td style=&quot;width: 82.093%; height: 19px;&quot;&gt;-&amp;nbsp;데이터베이스에 저장될 데이터의 타입과 구조에 대한 정의와 데이터를 이용하는 방식을 정의하는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 17.907%; height: 38px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;조&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;작 기능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.093%; height: 38px;&quot;&gt;&lt;span&gt;-&amp;nbsp;데이터의 삽입(Create), 검색(Read), 갱신(Update), 삭제(Delete) 등을 처리하기 위해 접근 수단을 정의하는 기능&lt;br /&gt;-&amp;nbsp;사용자와 데이터베이스 사이의 인터페이스를 위한 수단을 제공&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 17.907%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;제&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;어 기능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.093%; height: 19px;&quot;&gt;-&amp;nbsp;데이터의 정확성과 보안성을 유지하기 위한 무결성, 보안 및 권한 검사, 병행 제어 등의 기능을 정의하는 기능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;DBMS의 필수 기능은&lt;/b&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;정&amp;middot;조&amp;middot;제&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;고려사항&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다수 사용자의 이용에 따른 보안기능 확보&lt;/li&gt;
&lt;li&gt;장애에 대비한 백업 파일 확보&lt;/li&gt;
&lt;li&gt;효율적 운영 및 성능 최적화를 위한 데이터 구조의 표준화 추진 및 전문가 확보&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;스키마(Schema)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;데이터베이스를 구성하는 개체, 속성, 관계 등 구조에 대한 정의와 제약 조건 등을 기술&lt;/span&gt;하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자의 관점에 따라 외부, 개념, 내부 스키마로 구분&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.6512%;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.3488%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.6512%;&quot;&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;개&lt;/span&gt;념 스키마(Conceptual Schema)&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.3488%;&quot;&gt;- 기관이나 조직체의 관점에서 본 스키마&lt;br /&gt;-&amp;nbsp;데이터베이스&amp;nbsp;접근&amp;nbsp;권한,&amp;nbsp;보안&amp;nbsp;정책&amp;nbsp;무결성&amp;nbsp;규칙에&amp;nbsp;대한&amp;nbsp;정의를&amp;nbsp;포함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.6512%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;외&lt;/span&gt;부 스키마(External Schema)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.3488%;&quot;&gt;일반 사용자나 응용 프로그래머의 관점에서 본 스키마&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.6512%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;내&lt;/span&gt;부 스키마(Internal Schema)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.3488%;&quot;&gt;시스템 프로그래머 시스템 설계자의 관점에서 본 스키마&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; &amp;nbsp;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;스키마의 종류는 &lt;span style=&quot;color: #ee2323;&quot;&gt;개&lt;b&gt;&amp;middot;&lt;/b&gt;외&lt;b&gt;&amp;middot;&lt;/b&gt;내&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;데이터베이스 사용자&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 70px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 30%; height: 19px;&quot;&gt;&lt;b&gt;사용자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;데이터베이스 관리자&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(DBA: Database Administrator)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70%; height: 17px;&quot;&gt;-&amp;nbsp;데이터베이스 시스템 관리, 운영에 대한 모든 것을 책임지는 사용자&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30%; height: 17px;&quot;&gt;&lt;b&gt;응용 프로그래머&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70%; height: 17px;&quot;&gt;-&amp;nbsp;응용 프로그램 설계 및 개발을 통하여 데이터베이스에 접근하는 사용자&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 30%; height: 17px;&quot;&gt;&lt;b&gt;일반 사용자(End User)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70%; height: 17px;&quot;&gt;-&amp;nbsp;질의어를 사용하여 데이터베이스에 접근하는 사용자&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;데이터베이스 설계 순서&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;요구 조건 분석 -&amp;gt; 개념적 설계 -&amp;gt; 논리적 설계 -&amp;gt; 물리적 설계 -&amp;gt; 구현&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; &amp;nbsp;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;데이터데이스의 설계 순서는 &lt;span style=&quot;color: #ee2323;&quot;&gt;개&amp;middot;논&amp;middot;물&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;데이터베이스의 종류&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.1396%;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.8604%;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.1396%;&quot;&gt;&lt;b&gt;계층형 데이터베이스&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(HDB: Hierarchical DB)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.8604%;&quot;&gt;-&amp;nbsp;트리 구조를 이용해서 데이터 상호관계를 계층적으로 정의&lt;br /&gt;-&amp;nbsp;상위와 하위 레코드가 일대다(1:N)의 대응관계로 이루어진 구조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.1396%;&quot;&gt;&lt;b&gt;망(네트워크)형 데이터베이스&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(NDB: Network DB)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.8604%;&quot;&gt;-&amp;nbsp;그래프 구조를 이용해서 데이터 상호관계를 계층적으로 정의&lt;br /&gt;-&amp;nbsp;상위와 하위 레코드가 다대다(N:N)의 대응관계로 이루어진 구조&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.1396%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;관계형 데이터베이스&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(RDB: Relational DB)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.8604%;&quot;&gt;-&amp;nbsp;계층 모델과 망 모델의 복잡한 구조를 단순화 시킨 모델&lt;br /&gt;-&amp;nbsp;계층 구조가 아닌 &lt;span style=&quot;color: #ee2323;&quot;&gt;표(Table)를 이용하여 데이터 상호관계를 정의&lt;/span&gt;&lt;br /&gt;-&amp;nbsp;일대일(1:1), 일대다(1:N), 다대다(N:N) 관계를 자유롭게 표현 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 28.1396%;&quot;&gt;&lt;b&gt;객체 지향형 데이터베이스&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Object Oriented)&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.8604%;&quot;&gt;-&amp;nbsp;객체의 개념을 데이터베이스에 도입&lt;br /&gt;-&amp;nbsp;복잡한 관계를 가진 데이터들을 표현하는 데 효과적&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;관계형 데이터베이스의 구성 요소&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XucBL/btsMLXbpnFr/Y8hy2Mir17fExFef2zGH70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XucBL/btsMLXbpnFr/Y8hy2Mir17fExFef2zGH70/img.png&quot; data-alt=&quot;RDB의 구성 요소&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XucBL/btsMLXbpnFr/Y8hy2Mir17fExFef2zGH70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXucBL%2FbtsMLXbpnFr%2FY8hy2Mir17fExFef2zGH70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;882&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RDB의 구성 요소&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 247px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 19px;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 95px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 95px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;테이블(Table)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 95px;&quot;&gt;-&amp;nbsp;데이터들을 &lt;span style=&quot;color: #ee2323;&quot;&gt;행과 열로 표현&lt;/span&gt;한 것&lt;br /&gt;-&amp;nbsp;튜플(레코드)의 집합&lt;br /&gt;-&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;RDB에서는 릴레이션(Relation)이라고 한다.&lt;/span&gt;&lt;br /&gt;-&amp;nbsp;릴레이션 스킴(Scheme, 스키마, 구조)은 일정 수의 속성(Attribute)의 집합으로 구성&lt;br /&gt;-&amp;nbsp;릴레이션 R의 릴레이션 스킴은 시간에 따라 불변의 특성을 가지고, 릴레이션 인스턴스는 동적인 특정을 가진다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;튜플(Tuple)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 19px;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;테이블의 행&lt;/span&gt;을 구성하는 개체(레코드)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;속성(Attribute)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 38px;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;테이블의 열&lt;/span&gt;을 구성하는 항목(필드)&lt;br /&gt;-&amp;nbsp;데이터베이스를 구성하는 가장 작은 단위&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※ 기본 키: 한 개의 테이블 내에서 단 한 개의 데이터를 찾아낼 수 있는 속성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;도메인(Domain)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 38px;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;하나의 속성에서 취할 수 있는 값의 범위&lt;/span&gt;&lt;br /&gt;ex) 성별의 도메인은 남, 여&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;차수(Degree)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 19px;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;속성의 개수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 21.7442%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;기수(Cardinality)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 78.2558%; height: 19px;&quot;&gt;-&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;튜플의 개수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;키의 개념 및 종류&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;키의 개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스에서 조건에 만족하는 레코드를 찾거나 순서대로 정렬할 때 기준이 되는 속성(Attribute)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;키의 종류&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 146px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 22.4419%; height: 19px;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.5581%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 22.4419%; height: 19px;&quot;&gt;&lt;b&gt;후보키(Candidate Key)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.5581%; height: 19px;&quot;&gt;- 속성들 중 튜플을 유일하게 식별하기 위해 사용하는 속성들의 부분 집합(기본키로 사용할 수 있는 속성들)&lt;br /&gt;- 유일성(Unique): 하나의 키로 하나의 레코드만을 유일하게 식별할 수 있어야 함&lt;br /&gt;- 최소성(Minimality): 모든 레코드들을 유일하게 식별하는 데 꼭 필요한 속성으로만 구성되어야 함 -&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 22.4419%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;기본키(Primary Key)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.5581%; height: 19px;&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;한 테이블(릴레이션)에서 특정 튜플(레코드)를 유일하게 구별할 수 있는 속성&lt;/span&gt;&lt;br /&gt;- 후보키 중에서 선택한 주 키&amp;nbsp;&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 튜플(레코드)에 동일한 값이 중복되어 저장 불가&lt;/span&gt;&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;Null 값으로 저장 불가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 22.4419%; height: 19px;&quot;&gt;&lt;b&gt;외래키(Foreign Key)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.5581%; height: 19px;&quot;&gt;- 관계를 맺고 있는 다른 테이블(릴레이션)의 기본 키(Primary Key)를 참조하는 키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 22.4419%; height: 19px;&quot;&gt;&lt;b&gt;대체키(Alternate Key)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 77.5581%; height: 19px;&quot;&gt;- 후보키 중 기본키를 제외한 나머지 속성&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;액세스의 기본&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;액세스의 개요&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스를 구축하고, 데이터를 분류, 관리, 검색할 수 있으며 다양한 형태로 인쇄할 수 있는 데이터베이스 프로그램(DBMS)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본 데이터 파일 확장자는 *.mdb, 프로그래밍 언어를 모르는 사용자도 쉽게 데이터베이스를 구축하고 관리할 수 있음&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;액세스의 개체&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;테이블(Table)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 저장하고 관리하는 것, 데이터베이스에서 가장 기본이 되는 개체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 입력, 추가, 삭제, 수정, 정렬, 검색 가능&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리(Query)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블의 데이터를 다양한 조건으로 검색, 추출하거나 내용을 변경하는 개체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;여러 테이블을 연결하여 새로운 결과를 추출&lt;/span&gt;할 때 유용&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;폼(Form)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블이나 쿼리 데이터 &lt;span style=&quot;color: #ee2323;&quot;&gt;입출력 화면을 작성&lt;/span&gt;하는 개체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사용자와 데이터베이스 간의 손쉽게 데이터를 입력하거나 질의에 대한 대화형 처리 등을 편리하게 제공&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;보고서(Report)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색한 자료나 분석 자료의 출력물을 작성하는 개체&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;매크로(Macro)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반복적이고 단순한 작업을 자동화하는 개체&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;모듈(Module)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 작업을 위해 VBA(Visual Basic for Applications)로 실제 프로그램을 작성하는 개체&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>자격증</category>
      <category>DBMS</category>
      <category>RDB</category>
      <category>기본키</category>
      <category>대체키</category>
      <category>데이터베이스</category>
      <category>스키마</category>
      <category>외래키</category>
      <category>정보처리기능사</category>
      <category>쿼리</category>
      <category>후보키</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/450</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-6-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%99%9C%EC%9A%A9#entry450comment</comments>
      <pubDate>Sun, 16 Mar 2025 03:50:01 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 5. 입출력 제어 및 기억장치</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-5-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%A0%9C%EC%96%B4-%EB%B0%8F-%EA%B8%B0%EC%96%B5%EC%9E%A5%EC%B9%98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;채널/DMA&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;채널(Channel)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU의 &lt;span style=&quot;color: #ee2323;&quot;&gt;제어장치로부터 명령어를 받아&lt;/span&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;CPU 대신 독립적으로 입출력을 관리&lt;/span&gt;하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;주기억장치와 입출력장치 중간에 위치, 입출력장치와 CPU의 속도차로 인한 단점을 해결&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;채널의 종류&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 111px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 26.7442%; height: 19px;&quot;&gt;&lt;b&gt;채널&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.2558%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 26.7442%; height: 19px;&quot;&gt;&lt;b&gt;Selector Channel(선택 채널)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.2558%; height: 19px;&quot;&gt;특정한 한개의 고속 입출력장치 제어하는 채널&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;width: 26.7442%; height: 54px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Multiplexer Channel&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Byte Multiplexer Channel&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(다중 채널)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.2558%; height: 54px;&quot;&gt;동시에 여러개의 저속 입출력장치를 제어하는 채널&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 26.7442%; height: 19px;&quot;&gt;&lt;b&gt;Block Multiplexer Channel&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.2558%; height: 19px;&quot;&gt;동시에 여러개의 고속 입출력장치를 제어하는 채널&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;DMA(Direct Memory Access, 직접 메모리 접근)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU의 참여 없이 &lt;span style=&quot;color: #ee2323;&quot;&gt;입출력장치와 메모리가 직접 데이터를 주고받는 것&lt;/span&gt;, 시스템의 전방적인 속도가 향상&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;주요 구성 요소&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인터페이스 회로&lt;/li&gt;
&lt;li&gt;주소 &lt;span style=&quot;color: #ee2323;&quot;&gt;레지스터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;데이터 카운터 &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;레지스터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;제어 &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;레지스터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;데이터 &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;레지스터&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;버퍼링과 스풀링&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 53px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;버퍼링&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;스풀링&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;b&gt;목표&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6666%; height: 17px;&quot; colspan=&quot;2&quot;&gt;입출력장치와 CPU간의 속도 차리 해결&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;&lt;b&gt;저장장치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;주기억장치&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;보조기억장치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;운영장치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;단일 작업&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;다중 작업&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;b&gt;구현방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;하드웨어&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;소프트웨어&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;인터럽트(Interrupt)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우, 현재 실행 중인 작업을 즉시 중단하고 발생된 상황을 우선 처리한 후 실행 중인 작업으로 복귀하여 계속 처리하는 것(끼어들기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터럽트가 발생하면 &lt;span style=&quot;color: #ee2323;&quot;&gt;인터럽트를 처리하고 되돌아올 주소를 스택(Stack)에 저장&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터럽트 우선순위 판별&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동시에 여러 인터럽트가 발생할 경우 &lt;span style=&quot;color: #ee2323;&quot;&gt;우선순위 판별 방법&lt;/span&gt;에는 &lt;span style=&quot;color: #ee2323;&quot;&gt;소프트웨어 방법으로는 폴링&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;하드웨어 방법으로는 데이지 체인, 병렬 우선 처리&lt;/span&gt;가 존재&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;인터럽트의 종류 및 발생 원인&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 106px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 28.0233%; height: 19px;&quot;&gt;&lt;b&gt;인터럽트&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%; height: 19px;&quot;&gt;&lt;b&gt;발생원인&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.0233%; height: 17px;&quot;&gt;&lt;b&gt;정전 인터럽트(하드웨어)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%; height: 17px;&quot;&gt;정전이 되거나 전원의 이상에 의해 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.0233%; height: 17px;&quot;&gt;&lt;b&gt;기계 착오 인터럽트&lt;b&gt;(하드웨어)&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%; height: 17px;&quot;&gt;CPU의 기능적인 오류 동작에 의해 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.0233%; height: 17px;&quot;&gt;&lt;b&gt;외부 인터럽트&lt;b&gt;(하드웨어)&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;입출력장치, 타이밍 장치, 오퍼레이터의 조작에 의해 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 28.0233%; height: 17px;&quot;&gt;&lt;b&gt;입출력(I/O) 인터럽트&lt;b&gt;(하드웨어)&lt;/b&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;입출력 조작의 종료 및 입출력 착오 등에 의해 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 28.0233%; height: 19px;&quot;&gt;&lt;b&gt;소프트웨어 인터럽트&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 71.9767%; height: 19px;&quot;&gt;프로그램 처리 중 명령의 요청에 의해 발생 (SVC: SuperVisor Call)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주기억장치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU가 직접 접근하여 데이터를 처리할 수 있는 기억장치(Memory)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 수행되는 &lt;span style=&quot;color: #ee2323;&quot;&gt;프로그램과 데이터를 저장&lt;/span&gt;하고 &lt;span style=&quot;color: #ee2323;&quot;&gt;주소(Address)&lt;/span&gt;에 의해 저장된 위치를 구분&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ROM(Read Only Memory, 롬)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기억된 내용을 읽을 수만 있는 기억장치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원이 꺼져도 기억된 내용이 지워지지 않는 &lt;span style=&quot;color: #ee2323;&quot;&gt;비휘발성 메모리&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ROM의 종류와 특징&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용의 수정 가능 여부 및 기록 방법에 따라 분류&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 19px;&quot;&gt;&lt;b&gt;종류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 19px;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 19px;&quot;&gt;&lt;b&gt;Mask ROM&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 19px;&quot;&gt;제조 과정에서 미리 내용을 기억, 사용자가 임의로 수정할 수 없음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 19px;&quot;&gt;&lt;b&gt;PROM(Programmable ROM)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 19px;&quot;&gt;특수 프로그램을 이용하여 한번만 기록 가능, 이후엔 읽기만 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;EPROM(Erasable PROM)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 19px;&quot;&gt;자외선을 이용하여 내용을 기록 및 여러 번 수정 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.4961%; height: 19px;&quot;&gt;&lt;b&gt;EEPROM(Electrically EPROM)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 47.1705%; height: 19px;&quot;&gt;전기적인 방법을 이용하여 내용을 기록 및 여러번 수정 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;RAM(Random Access Memory, 램)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;자유롭게 읽고(Read) 쓸(Write) 수 있는 기억장치&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원이 꺼지면 기억된 내용이 사라지는 &lt;span style=&quot;color: #ee2323;&quot;&gt;휘발성 메모리&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;RAM의 종류와 특징&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재충전 여부에 따라 분류&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 152px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;&lt;b&gt;동적 램(DRAM: Dynamic RAM)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;&lt;b&gt;정적 램(SRAM: Static RAM)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;구성 소자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;콘덴서&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;플립플롭&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;전원이 공급되어도 일정 시간이 지나면 전하가 방전되므로 주기적인 &lt;span style=&quot;color: #ee2323;&quot;&gt;재충전(Refresh) 필요&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;전원이 공급되는 동안에는 기억 내용이 유지&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;전력 소모&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;접근 속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;느림&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;집적도(밀도)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;높음&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;낮음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;가격&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;저가&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;고가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 15.6589%; height: 19px;&quot;&gt;&lt;b&gt;용도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 41.8216%; height: 19px;&quot;&gt;일반적인 주기억장치&lt;/td&gt;
&lt;td style=&quot;width: 42.5194%; height: 19px;&quot;&gt;캐시 메모리&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;기타 메모리&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.5349%;&quot;&gt;&lt;b&gt;명칭&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.4651%;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.5349%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;캐시 메모리(Cache Memory)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.4651%;&quot;&gt;CPU와 주기억장치 사이에 위치, 컴퓨터의 처리 속도 향상&lt;br /&gt;접근 속도가 가장 빠른 정적 램(SRAM) 사용&lt;br /&gt;캐시 적중률(Cache Hit Ratio)이 높을수록 시스템 속도 향상&lt;br /&gt;일반 메모리보다 고가&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.5349%;&quot;&gt;&lt;b&gt;가상 메모리(Virtual Memory)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.4651%;&quot;&gt;보조기억장치(하드디스크)의 일부를 주기억장치처럼 사용하는 메모리 기법&lt;br /&gt;주기억장치보다 큰 프로그램을 불러와 실행해야 할 때 유용하게 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.5349%;&quot;&gt;&lt;b&gt;버퍼 메모리(Buffet Memory)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.4651%;&quot;&gt;두 개의 장치가 데이터를 주고받을 때 속도 차이를 해결하기 위해 중간에 데이터를 임시로 저장해 두는 공간&lt;br /&gt;캐시 메모리도 일종의 버퍼&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.5349%;&quot;&gt;&lt;b&gt;연관 메모리(Accociative Memory)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.4651%;&quot;&gt;주소를 참조하지 않고 저장된 내용의 일부를 이용하여 접근 후 데이터를 읽어오는 기억장치&lt;br /&gt;가상 메모리나 캐시 메모리의 주소 변환 데이블에서 사용&lt;br /&gt;검색 자료(데이터), 레지스터, 키(마스크), 레지스터, 매치 레지스터(일치 지시기)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.5349%;&quot;&gt;&lt;b&gt;플래시 메모리(Flash Memory)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 70.4651%;&quot;&gt;EEPROM의 일종으로 비휘발성 메모리&lt;br /&gt;MP3플레이어, 개인용 정보단말기, 휴대전화, 디지털 카메라 등 널리 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;보조기억장치&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주기억장치의 단점을 보완하기 위한 기억장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주기억장치에 비해 속도는 느리지만 용량이 크고, 전원이 차단되어도 내용이 그대로 유지&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;자기 테이프(Magnetic Tape)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;SASD&amp;nbsp;방식으로 데이터가 처리&lt;/span&gt;되는 대용량 저장 매체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가격이 저렴하고 용량이 커서 자료 백업용으로 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※ 순차 접근 저장 매체(SASD: Sequential Access Storage Device)&lt;/span&gt;&lt;br /&gt;자료가 저장된 위치에 접근할 때, 처음부터 순서대로 접근하여 원하는 위치를 검색하는 메모리&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;자기 테이프의 구조 및 관련 용어&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1744&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qfdti/btsMLzaTMwU/OGerKxCGbSyHrXXNfqb2Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qfdti/btsMLzaTMwU/OGerKxCGbSyHrXXNfqb2Ck/img.png&quot; data-alt=&quot;자기 테이프&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qfdti/btsMLzaTMwU/OGerKxCGbSyHrXXNfqb2Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqfdti%2FbtsMLzaTMwU%2FOGerKxCGbSyHrXXNfqb2Ck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1744&quot; height=&quot;604&quot; data-origin-width=&quot;1744&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자기 테이프&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 119px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;용어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;BOT(Beginning Of Tape)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;자기 테이프의 시작 위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;EOT(End Of Tape)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;자기 테이프의 끝 위치&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;BPI(Byte Per Inch)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;1인치에 기억할 수 있는 Byte 수(기록밀도)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;GAP&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;레코드와 레코드 사이의 데이터를 기록할 수 없는 공간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;IRG(Inter Record Gap)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;레코드와 레코드 사이의 갭&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 25.2326%; height: 17px;&quot;&gt;&lt;b&gt;IBG(Inter Block Gap)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%; height: 17px;&quot;&gt;블록과 블록 사이의 갭&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25.2326%;&quot;&gt;&lt;b&gt;Block&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 74.7674%;&quot;&gt;한 개 이상의 논리 레코드의 집합으로 입출력의 단위(물리 레코드)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;블로킹(Blocking)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 개 이상의 논리 레코드를 묶어서 테이프에 기록하는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;많은 데이터를 저장, 처리 속도를 향상, 기억공간 낭비 감소, 입출력 횟수 감소를 위해 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSCs6w/btsMMDpGD6q/z2zxx9VZ66LMQBmum5pbm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSCs6w/btsMMDpGD6q/z2zxx9VZ66LMQBmum5pbm0/img.png&quot; data-origin-width=&quot;884&quot; data-origin-height=&quot;604&quot; data-is-animation=&quot;false&quot; style=&quot;width: 46.2123%; margin-right: 10px;&quot; data-widthpercent=&quot;46.76&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSCs6w/btsMMDpGD6q/z2zxx9VZ66LMQBmum5pbm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSCs6w%2FbtsMMDpGD6q%2Fz2zxx9VZ66LMQBmum5pbm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;884&quot; height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dT5RfE/btsMM3BFrfE/2hbsZwoVbMaxcT1Blt1Yfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dT5RfE/btsMM3BFrfE/2hbsZwoVbMaxcT1Blt1Yfk/img.png&quot; data-origin-width=&quot;880&quot; data-origin-height=&quot;528&quot; data-is-animation=&quot;false&quot; style=&quot;width: 52.6249%;&quot; data-widthpercent=&quot;53.24&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dT5RfE/btsMM3BFrfE/2hbsZwoVbMaxcT1Blt1Yfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdT5RfE%2FbtsMM3BFrfE%2F2hbsZwoVbMaxcT1Blt1Yfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;880&quot; height=&quot;528&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;블로킹(Blocking) / 비블로킹(Unblocking)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※ 블록화 인수(BF: Blocking Factor)&lt;/span&gt;&lt;br /&gt;하나의 블록을 구성하는 논리 레코드의 개수 (위 이미지의 블록화 인수는 3)&lt;/blockquote&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;자기 디스크(Magnetic Disk)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자성 물질을 입힌 금속 원판을 여러 장 겹쳐서 만든 기억매체, 용량이 크고 접근 속도가 빠름&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;순차, 비순차(직접) 처리가 모두 가능한 &lt;span style=&quot;color: #ee2323;&quot;&gt;DASD 방식으로 데이터 처리&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※ 직접 접근 저장 매체(DASD: Direct Access Storage Device)&lt;/span&gt;&lt;br /&gt;순서를 거치치 않고 자료가 저장된 위치를 직접 접근할 수 있는 메모리(자기 테이프를 제외한 모든 기억장치)&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※ 디스크의 양면 기록&lt;/span&gt;&lt;br /&gt;디스크는 양면에 기록할 수 있지만, 디스크 팩의 가장 윗면과 가장 아랫면은 데이터를 기록하지 못함&lt;br /&gt;예를 들어 디스크 팩이 6장으로 구성되었을 때 기록할 수 있는 면은 10장&lt;br /&gt;6 x 2(양면) = 12 - 2(윗면, 아랫면) = 10&lt;/blockquote&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;자기 디스크 관련 용어&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nCgTI/btsMMmofYJ7/LH9MUf0KY5PtJTLBwIwqO0/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nCgTI/btsMMmofYJ7/LH9MUf0KY5PtJTLBwIwqO0/img.gif&quot; data-alt=&quot;출처: https://www.datarecoverytools.co.uk/2009/12/22/chs-lba-addressing-and-their-conversion-algorithms&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nCgTI/btsMMmofYJ7/LH9MUf0KY5PtJTLBwIwqO0/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/nCgTI/btsMMmofYJ7/LH9MUf0KY5PtJTLBwIwqO0/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;545&quot; height=&quot;464&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: https://www.datarecoverytools.co.uk/2009/12/22/chs-lba-addressing-and-their-conversion-algorithms&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 226px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;용어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;트랙(Track)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;회전축(스핀들 모터)를 중심으로 데이터가 기록되는 공간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;섹터(Sector)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;트랙을 일정하게 나눈 구간으로 정보 저장의 기본 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;실린더(Cylinder)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;여러 장의 디스크 판에서 같은 위치에 있는 트랙의 모임&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;실린더의 수는 트랙의 수와 일치&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;클러스터(Cluster)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;여러 개의 섹터를 모은 것, 운영체제가 관리하는 파일 저장의 기본 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;TPI(Tracks Per Inch)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;1인치(Inch)에 기록할 수 있는 트랙의 수, 디스크의 기록밀도 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;Seek Time(탐색 시간)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;읽기/쓰기 헤드가 지정된 트랙(실린더)에 도달하는 데 걸리는 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 38px;&quot;&gt;&lt;b&gt;Search Time&lt;br /&gt;(Latency Time, 지연 시간)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 38px;&quot;&gt;읽기/쓰기 헤드가 지정된 트랙(실린더)를 찾은 후 원판이 회전하며 원하는 섹터의 읽기/쓰기가 시작될 때까지의 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 19px;&quot;&gt;&lt;b&gt;Transmission Time(전송 시간)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 19px;&quot;&gt;읽은 데이터를 주기억장치로 보내는 데 걸리는 시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 36px;&quot;&gt;
&lt;td style=&quot;width: 33.3721%; height: 36px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Access Time(접근 시간)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6279%; height: 36px;&quot;&gt;데이터를 읽고 쓰는 데 걸리는 시간의 합&lt;br /&gt;(Seek Time + Search Time + Transmission Time)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;기억 용량의 단위&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 74px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;단위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;Byte&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;KB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;MB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;GB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;TB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;PB&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;&lt;b&gt;EB&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;&lt;b&gt;읽기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;바이트&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;키로 바이트&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;메가 바이트&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;기가 바이트&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;테라 바이트&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;페타 바이트&lt;/td&gt;
&lt;td style=&quot;width: 10%;&quot;&gt;엑사 바이트&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 10%; height: 55px;&quot; rowspan=&quot;3&quot;&gt;&lt;b&gt;용량&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;8Bit&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1,024Byte&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1,024KB&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1,024MB&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1,024GB&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1,024TB&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 17px;&quot;&gt;1,024PB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2진수 표기&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;10&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;20&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;30&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;40&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;50&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;60&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10진수 표기&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;9&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;12&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;15&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 10%; height: 19px;&quot;&gt;10&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;18&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;크기 비교 : Byte &amp;lt; KB &amp;lt; MB &amp;lt; GB &amp;lt; TB &amp;lt; PB &amp;lt; EB&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;하드디스크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자성 물질을 입힌 금속 원판을 여러 장 겹쳐서 만든 기억매체, 개인용 컴퓨터에서 보조기억장치로 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저장 용량이 크고, 데이터 접근 속도가 빠르나 충격에 약해 본체 내부에 고정시켜 사용(이동이 불편)&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;CD-ROM(Compact Disk Read Only Memory)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두께 1.2mm, 지름 12cm 크기에 약 650MB의 대용량 정보를 저장하는 매체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화상이나 음성 정보 등의 멀티미디어 데이터를 저장하기에 적합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기 디스크와 달리 연속된 나선형 트랙을 사용하므로 섹터의 길이가 일정&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt; DVD(Digital Video Disk, Digital Versatile Disk)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화질과 음질이 뛰어난 멀티미디어 데이터를 저장할 수 있는 대용량 저장매체&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CD와 같은 크기지만 양면을 모두 사용 가능, 4.7 ~ 17GB의 대용량 데이터 기록 가능&lt;/p&gt;</description>
      <category>자격증</category>
      <category>DMA</category>
      <category>RAM</category>
      <category>ROM</category>
      <category>보조기억장치</category>
      <category>인터럽트</category>
      <category>자기 디스크</category>
      <category>자기 테이프</category>
      <category>정보처리기능사</category>
      <category>주기억장치</category>
      <category>채널</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/449</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-5-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%A0%9C%EC%96%B4-%EB%B0%8F-%EA%B8%B0%EC%96%B5%EC%9E%A5%EC%B9%98#entry449comment</comments>
      <pubDate>Sun, 16 Mar 2025 01:56:37 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 4. 명령어 및 제어</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-4-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%B0%8F-%EC%A0%9C%EC%96%B4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;명령어&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;명령어의 구성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;명령어 = 연산자부(OP-Code: Operation Code) +&amp;nbsp;&lt;/span&gt;자료부(Operand)&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;연산자부(명령코드 부, OP-Code: Operation Code)&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수행해야 할 동작에 맞는 연산자를 표시(명령어 형식, 동작코드, 데이터의 종류 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;nBit일 때 최대 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;개의 명령어 사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기능에는 함수 연산, 자료 전달, 제어, 입출력 기능이 존재&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;함수 연산 기능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산술 연산과 비수치적인 논리 연산 존재&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;산술 연산: ADD, SUB, MUL, DIV, 산술 Shift 등&lt;/li&gt;
&lt;li&gt;논리 연산: NOT, AND, OR, XOR, 논리적 Shift, Rotate, Complement, Clear 등&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 피연산자 수에 따른 연산자의 분류&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;단항 연산자: 피연산자가 1개만 필요한 연산자(NOT, Shift, Rotate, Move 등)&lt;/li&gt;
&lt;li&gt;이항 연산자: 피연산자가 2개 필요한 연산자(사칙연산, AND, OR, XOR, XNOR 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;자료 전달 기능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU와 기억장치 사이에서 정보를 교환&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Load: 기억장치에 기억되어 있는 정보를 CPU로 가져오는 명령&lt;/li&gt;
&lt;li&gt;Store: CPU에 있는 정보를 기억장치에 기억시키는 명령&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;제어 기능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령의 실행 순서를 변경시킬 때 사용&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;무조건 분기 명령: GOTO, Jump(JMP) 등&lt;/li&gt;
&lt;li&gt;조건 분기 명령: IF 조건&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;입출력기능&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU 또는 메모리와 I/O 장치 사이에 자료 전달&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;연산&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AND(Masking Operation)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 문자 또는 특정 비트를 &lt;span style=&quot;color: #ee2323;&quot;&gt;삭제(Clear)&lt;/span&gt; 시키는 연산(Masking 연산)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제할 부분의 비트를 0과 AND 연산시켜 삭제&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 01&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;0&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;101 AND 11&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;1&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;111 = 01&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;0&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;101(※ &lt;span style=&quot;color: #ee2323; text-align: left;&quot;&gt;Mask Bit: &lt;/span&gt;대응시키는 0인 비트)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;OR(Selective-Set)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 문자를 &lt;span style=&quot;color: #ee2323;&quot;&gt;삽입&lt;/span&gt;하거나 특정 비트에 1을 &lt;span style=&quot;color: #ee2323;&quot;&gt;세트 시키는&lt;/span&gt; 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삽입하거나 세트 시킬 비트에 삽입할 문자 또는 1을 OR 연산&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 1&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;0110&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;0 OR 0&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;0000&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;0 = 1&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;0110&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;0&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;XOR(Compare, 비교)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개의 데이터를 &lt;span style=&quot;color: #ee2323;&quot;&gt;비교&lt;/span&gt;하거나 특정 비트를 &lt;span style=&quot;color: #ee2323;&quot;&gt;반전&lt;/span&gt;시킬 때 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반전시킬 비트와 1을 XOR 연산, XOR 연산 결과에 1Bit라도 1이 있다면 서로 다른 데이터를 의미&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 1000&lt;span style=&quot;color: #ee2323;&quot;&gt;1001&lt;/span&gt; XOR 0000&lt;span style=&quot;color: #ee2323;&quot;&gt;1111&lt;/span&gt; = 1000&lt;span style=&quot;color: #ee2323;&quot;&gt;0110&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;NOT(Complement, 보수)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 비트의 값을 반전시키는 연산, &lt;span style=&quot;color: #ee2323;&quot;&gt;보수&lt;/span&gt;를 구할 때 사용&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 10001001 NOT = 01110110&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;논리 Shift&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왼쪽 또는 오른쪽으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;1Bit씩 자리를 이동&lt;/span&gt;시키는 연산, 이동한 후 비어있는 비트에는 0 삽입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 직렬 전송(Serial Transfer)에 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uUKLo/btsMLKwzkki/KZcDzJ7obYeEc0h95fNJs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uUKLo/btsMLKwzkki/KZcDzJ7obYeEc0h95fNJs0/img.png&quot; data-origin-width=&quot;1524&quot; data-origin-height=&quot;676&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.4835%; margin-right: 10px;&quot; data-widthpercent=&quot;50.07&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uUKLo/btsMLKwzkki/KZcDzJ7obYeEc0h95fNJs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuUKLo%2FbtsMLKwzkki%2FKZcDzJ7obYeEc0h95fNJs0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1524&quot; height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3qhB8/btsMK3J973y/XAzpzh0nKLlorKX6HjVrxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3qhB8/btsMK3J973y/XAzpzh0nKLlorKX6HjVrxk/img.png&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;676&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.3537%;&quot; data-widthpercent=&quot;49.93&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3qhB8/btsMK3J973y/XAzpzh0nKLlorKX6HjVrxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3qhB8%2FbtsMK3J973y%2FXAzpzh0nKLlorKX6HjVrxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1520&quot; height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Shift Left Logical / Shift Right Logical&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt; Rotate&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shift 연산에서 밀려나서 삭제되는 비트의 값을 반대편으로 입력하는 연산&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자 위치를 변환할 때 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cC4nAT/btsMK34sFt7/VouHZo8yTAFrM2j7aXUP41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cC4nAT/btsMK34sFt7/VouHZo8yTAFrM2j7aXUP41/img.png&quot; data-origin-width=&quot;1496&quot; data-origin-height=&quot;676&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.8301%; margin-right: 10px;&quot; data-widthpercent=&quot;50.42&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cC4nAT/btsMK34sFt7/VouHZo8yTAFrM2j7aXUP41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcC4nAT%2FbtsMK34sFt7%2FVouHZo8yTAFrM2j7aXUP41%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1496&quot; height=&quot;676&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ny61X/btsMLrqvaBd/m1X7IFUfElqnqdrMTirkLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ny61X/btsMLrqvaBd/m1X7IFUfElqnqdrMTirkLk/img.png&quot; data-origin-width=&quot;1480&quot; data-origin-height=&quot;680&quot; data-is-animation=&quot;false&quot; style=&quot;width: 49.0071%;&quot; data-widthpercent=&quot;49.58&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ny61X/btsMLrqvaBd/m1X7IFUfElqnqdrMTirkLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fny61X%2FbtsMLrqvaBd%2Fm1X7IFUfElqnqdrMTirkLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1480&quot; height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;Left Rotate / Right Rotate&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Move&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레지스터에 기억된 자료를 그대로 &lt;span style=&quot;color: #ee2323;&quot;&gt;다른 레지스터로 옮길 때 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;AND -&amp;gt; 삭제&lt;/b&gt;&lt;br /&gt;&lt;b&gt;OR -&amp;gt; 삽입, Set&lt;/b&gt;&lt;br /&gt;&lt;b&gt;XOR -&amp;gt; 비교, 반전&lt;/b&gt;&lt;br /&gt;&lt;b&gt;NOT -&amp;gt; 보수&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Shift -&amp;gt; 1Bit씩 이동, 0 삽입&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Rotate -&amp;gt; 1Bit씩 이동, 삭제된 비트 삽입&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Move -&amp;gt; 레지스터 이동&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;명령어 형식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3주소 명령어(3 Address Instruction)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;OP-Code부(명령부)와&amp;nbsp;&lt;/span&gt;Operand부(자료부)가 3개로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;연산 후 입력 자료가 변하지 않고 보존, 명령어 한 개의 길이가 길어짐&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 개의 범용 레지스터(GPR)를 가진 컴퓨터에서 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;3 Address Instruction = OP-Code + Operand1 + Operand2 + Operand3&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2주소 명령어(2 Address Instruction)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;OP-Code부(명령부)와&amp;nbsp;&lt;/span&gt;Operand부(자료부)가 2개로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;연산 결과가 Operand1에 저장되므로 Operand1에 저장되어 있던 원래의 자료는 파괴&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 일반적으로 널리 사용되며 여러 개의 범용 레지스터(GPR)를 가진 컴퓨터에서 사용&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;2 Address Instruction = OP-Code + Operand1 + Operand2&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1주소 명령어(1 Address Instruction)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;OP-Code부(명령부)와 Operand부(자료부)가 1개로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;연산 결과를 누산기(AC: Accumulator)에 저장&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;1 Address Instruction = OP-Code + Operand1&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;0주소 명령어(0 Address Instruction)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Operand부(자료부) 없이 OP-Code부만으로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;주소의 사용 없이 스택(Stack)을 사용해 연산, 스택을 사용하기 때문에 원래의 자료는 남지 않음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※ Stack 명령어 - Push : 자료 삽입, Pop: 자료 삭제&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;0 Address Instruction = OP-Code&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;주소지정방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;접근 방식에 따른 분류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;암시적 주소지정방식(Implied Mode)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;주소(번지)를 지정하지 않고&lt;/span&gt; 0주소 명령어(0 Address Instruction)에서 Stack의 Top 포인터가 가리키는 Operand를 암시하여 이용&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;즉치(즉시)적 주소지정방식(Immediate Mode)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Operand에 주소(번지) 대신 즉시 사용할 수 있는 자료를 지정한 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;메모리를 참조하지 않아 실행 속도가 빠름&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L54KA/btsMMGfEUIi/3EMlS4ImhdiPUIhkPohgS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L54KA/btsMMGfEUIi/3EMlS4ImhdiPUIhkPohgS0/img.png&quot; data-alt=&quot;즉치(즉시)적 주소지정방식(Immediate Mode)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L54KA/btsMMGfEUIi/3EMlS4ImhdiPUIhkPohgS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL54KA%2FbtsMMGfEUIi%2F3EMlS4ImhdiPUIhkPohgS0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;138&quot; data-origin-width=&quot;832&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;즉치(즉시)적 주소지정방식(Immediate Mode)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;직접 주소지정방식(Direct Mode)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Operand에 자료가 기억된 주소(번지)를 지정한 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;메모리를 1번 참조&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1848&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEalgW/btsMLLPMS1M/a7YxuOckDckFs1Cy9YxtDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEalgW/btsMLLPMS1M/a7YxuOckDckFs1Cy9YxtDk/img.png&quot; data-alt=&quot;직접 주소지정방식(Direct Mode)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEalgW/btsMLLPMS1M/a7YxuOckDckFs1Cy9YxtDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEalgW%2FbtsMLLPMS1M%2Fa7YxuOckDckFs1Cy9YxtDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1848&quot; height=&quot;544&quot; data-origin-width=&quot;1848&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;직접 주소지정방식(Direct Mode)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;간접 주소지정방식(Indirect Mode)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Operand에 자료가 기억된 주소(번지)를 가지고 있는 메모리 주소(번지)를 지정한 방식&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;메모리를 2번 참조하므로 실행 속도가 느림&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2008&quot; data-origin-height=&quot;544&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1U3b2/btsMNgU6fUO/xdbflwvhsyk6ehMLT5ZbSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1U3b2/btsMNgU6fUO/xdbflwvhsyk6ehMLT5ZbSK/img.png&quot; data-alt=&quot;간접 주소지정방식(Indirect Mode)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1U3b2/btsMNgU6fUO/xdbflwvhsyk6ehMLT5ZbSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1U3b2%2FbtsMNgU6fUO%2Fxdbflwvhsyk6ehMLT5ZbSK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2008&quot; height=&quot;544&quot; data-origin-width=&quot;2008&quot; data-origin-height=&quot;544&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;간접 주소지정방식(Indirect Mode)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;계산에 의한 주소지정방식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Operand부(주소부) + CPU의 특정 레지스터로 유효 주소를 계산&lt;/span&gt;하는 방식(&lt;span style=&quot;color: #ee2323;&quot;&gt;주소 일부분을 생략하는 약식주소&lt;/span&gt;)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;상대 주소(Relative Mode)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유효 주소: Operand + PC(Program Counter)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자신의 기억장소를 기준으로 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;상대적으로&amp;nbsp;&lt;/span&gt;데이터 위치를 지정&lt;/span&gt;하는 방식&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;베이스 레지스터(Base Register Mode)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유효 주소: Operand + Base&amp;nbsp;Register&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램 재배치(Relocation)할 때 이용&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;인덱스 레지스터(Index Register, 색인 주소지정방식)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유효 주소: Operand + Index Register&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2개의 레지스터를 사용&lt;/span&gt;하며, &lt;span style=&quot;color: #ee2323;&quot;&gt;순차적인 주소 지정에 유리&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;실제 기억공간 주소에 따른 구분&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주소를 실제 기억공간과 연관시키는 방법&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;절대 주소(Absolute Address)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 주소로 기억장치의 맨 처음부터 1Byte마다 순서대로 &lt;span style=&quot;color: #ee2323;&quot;&gt;16진수의 번호가 차례대로 지정&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;상대 주소(Relative Address)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기준주소를 기준으로 하여 상대적으로 얼마만큼 떨어져 있는지 변위(Displacement: Offset)로 표현하는 주소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;절대 주소로 변환해야만 실제 데이터에 접근 가능&lt;/p&gt;</description>
      <category>자격증</category>
      <category>명령어</category>
      <category>연산</category>
      <category>연산자</category>
      <category>정보처리기능사</category>
      <category>주소지정방식</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/448</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-4-%EB%AA%85%EB%A0%B9%EC%96%B4-%EB%B0%8F-%EC%A0%9C%EC%96%B4#entry448comment</comments>
      <pubDate>Sat, 15 Mar 2025 23:40:29 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 3. 자료의 표현과 연산</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-3-%EC%9E%90%EB%A3%8C%EC%9D%98-%ED%91%9C%ED%98%84%EA%B3%BC-%EC%97%B0%EC%82%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;자료 구성의 단위&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 190px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;단위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;비트(Bit, B&lt;/b&gt;&lt;b&gt;inary Digit)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- 0과 1을 표시하는 &lt;span style=&quot;color: #ee2323;&quot;&gt;2진수 1자리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;니블(Nibble)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;4Bit&lt;/span&gt;로 구성되며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;16진수 1자리 표현하기에 적합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;바이트(Byte)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;8Bit&lt;/span&gt;로 구성되며, 영문자나 숫자 한글자는 1Byte, 한글, 한자 한글자는 2Byte&lt;br /&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;8Bit = 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;8&lt;/span&gt; = 256가지의 정보 표현 가능&lt;/span&gt;&lt;br /&gt;- 주기억장치 자료표현의 최소 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;워드(Word)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- CPU가 한 번에 처리할 수 있는 명령 단위&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- 반워드(Half Word): 2Byte = 16Bit&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- 전워드(Full Word): 4Byte = 32Bit&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- 더블워드(Double Word): 8Byte = 62Bit&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;필드(Field)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- 파일 구성의 최소 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;레코드(Record)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- 하나 이상의 필드가 모여서 구성&lt;br /&gt;- 논리 레코드(Logical Record)와 동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;블록(Block)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- 하나 이상의 레코드가 모여서 구성&lt;br /&gt;- 물리 레코드(Physical Record)와 동일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;파일(File)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- 여러 레코드가 모여서 구성&lt;br /&gt;- 프로그램 구성 의 기본 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 23.0233%; height: 19px;&quot;&gt;&lt;b&gt;데이터베이스(Database)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 76.9767%; height: 19px;&quot;&gt;- 여러 파일(File)의 집합&lt;br /&gt;- 관계형, 계층형, 망형&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;크기 : 비트 &amp;lt; 니블 &amp;lt; 바이트 &amp;lt; 반워드 &amp;lt; 전워드 &amp;lt; 더블워드 &amp;lt; 필드 &amp;lt; 레코드(논리 레코드) &amp;lt; 블록(물리 레코드) &amp;lt; 파일 &amp;lt; 데이터페이스&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;수의 표현 및 진법 변환&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;진법의 개념 및 종료&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2진법(Binary): 0과 1 두 개의 숫자로 표현&lt;/li&gt;
&lt;li&gt;8진법(Octal): 0~7까지의 숫자로 표현, 8진수 1자리 = 2진수 3자리&lt;/li&gt;
&lt;li&gt;16진법(Hexadecimal): 0~9까지의 숫자와 10~15를 의미하는 A~F 문자로 표현, 16진수 1자리 = 2진수 4자리&lt;/li&gt;
&lt;li&gt;10진법(Decimal): 0~9 숫자로 표현&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;10진수 -&amp;gt; 2진수, 8진수, 16진수 변환&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;10진수의 정수 부분은 변환하려는 진수로 나누어지지 않을 때까지 나누어 나머지를 역순으로 나열,&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;소수 부분은 변환하려는 진수로 소수 부분이 0이 될때까지 곱하여 몪을 순서대로 나열&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ex) 10진수 47.625를 2진수로 변환 -&amp;gt; 정수 부분을 2로 나누고, 소수 부분을 2를 곱하여 변환 -&amp;gt; 101111.101&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPsMhE/btsMKAsRcFo/rvHADBk1n8WSjI4qSzahGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPsMhE/btsMKAsRcFo/rvHADBk1n8WSjI4qSzahGK/img.png&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;840&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;32.59&quot; style=&quot;width: 32.2118%; margin-right: 10px;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPsMhE/btsMKAsRcFo/rvHADBk1n8WSjI4qSzahGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPsMhE%2FbtsMKAsRcFo%2FrvHADBk1n8WSjI4qSzahGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;840&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhdIKH/btsMICsl4nb/TsQBrMm3Lr4A27DTpNAzF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhdIKH/btsMICsl4nb/TsQBrMm3Lr4A27DTpNAzF1/img.png&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;636&quot; data-is-animation=&quot;false&quot; style=&quot;width: 66.6254%;&quot; data-widthpercent=&quot;67.41&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhdIKH/btsMICsl4nb/TsQBrMm3Lr4A27DTpNAzF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhdIKH%2FbtsMICsl4nb%2FTsQBrMm3Lr4A27DTpNAzF1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;996&quot; height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;10진수 -&amp;gt; 2진수 변환(정수 부분 / 소수 부분)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10진수 -&amp;gt; 8진수 변환은 정수 부분을 8로 나누고, 소수 부분을 8을 곱하여 변환&lt;/li&gt;
&lt;li&gt;10진수 -&amp;gt; 16진수 변환은 정수 부분을 16로 나누고, 소수 부분을 16을 곱하여 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2진수, 8진수, 16진수 -&amp;gt; 10진수 변환&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정수 부분과 소수 부분을 나누어 변환하려는 각 진수의 자릿값과 자리의 지수승을 곱한 결과값을 모두 더하여 계산&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정수 부분의 지수승은 0부터 증가, 소수 부분의 지수승은 -1씩 감소&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ex) 2진수 101111.101을 10진수로 변환 -&amp;gt; 각 자리값과 자리의 2의 지수승을 곱하고 모두 더하여 계산 -&amp;gt; 47.625&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWWuYb/btsMJN7g30d/9LnaO0gNBIRZWWZNJAHfb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWWuYb/btsMJN7g30d/9LnaO0gNBIRZWWZNJAHfb0/img.png&quot; data-alt=&quot;2진수 -&amp;amp;gt; 10진수 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWWuYb/btsMJN7g30d/9LnaO0gNBIRZWWZNJAHfb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWWuYb%2FbtsMJN7g30d%2F9LnaO0gNBIRZWWZNJAHfb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1584&quot; height=&quot;492&quot; data-origin-width=&quot;1584&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2진수 -&amp;gt; 10진수 변환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;8진수 -&amp;gt; 10진수 변환은 각 자리값과 자리의 8의 지수승을 곱하고 모두 더하여 계산&lt;/li&gt;
&lt;li&gt;16진수 -&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;10진수 변환은 각 자리값과 자리의 16의 지수승을 곱하고 &lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;모두 더하여 계산&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2진수 -&amp;gt;&lt;span&gt; 8진수, 16진수&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;8진수로 변환 시 정수 부분은 소수점 기준 왼쪽 방향으로 3자리 씩, 소수 부분은 오른쪽 방향으로 3자리씩 변환(2진수 -&amp;gt; 10진수)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;16진수로 변환 시 정수 부분은 소수점 기준 왼쪽 방향으로 4자리 씩, 소수 부분은 오른쪽 방향으로 4자리씩 변환(2진수 -&amp;gt; 10진수)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;소수 부분의 모자른 자리수는 0으로 채움&lt;/li&gt;
&lt;li&gt;ex) 2진수 111001011.10101을 8진수로 변환 -&amp;gt; 713.52&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTGsOV/btsMKcFQg1I/6hchrdkNMwMTl6uGjkM6lK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTGsOV/btsMKcFQg1I/6hchrdkNMwMTl6uGjkM6lK/img.png&quot; data-alt=&quot;2진수 -&amp;amp;gt; 8진수 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTGsOV/btsMKcFQg1I/6hchrdkNMwMTl6uGjkM6lK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTGsOV%2FbtsMKcFQg1I%2F6hchrdkNMwMTl6uGjkM6lK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2040&quot; height=&quot;392&quot; data-origin-width=&quot;2040&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2진수 -&amp;gt; 8진수 변환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;8진수, 16진수 -&amp;gt; 2진수&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;8진수를 변환 시 1자리를 2진수 3자리로, 16진수를 변환 시 1자리를 4자리로 변환 (10진수 -&amp;gt; 2진수)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;ex) 8진수 713.52를 2진수로 변환 -&amp;gt; 111001011.10101&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DkI6s/btsMJbulyQ3/KdLT3EgUkeKax1wSuvqvI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DkI6s/btsMJbulyQ3/KdLT3EgUkeKax1wSuvqvI0/img.png&quot; data-alt=&quot;8진수 -&amp;amp;gt; 2진수 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DkI6s/btsMJbulyQ3/KdLT3EgUkeKax1wSuvqvI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDkI6s%2FbtsMJbulyQ3%2FKdLT3EgUkeKax1wSuvqvI0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1880&quot; height=&quot;400&quot; data-origin-width=&quot;1880&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;8진수 -&amp;gt; 2진수 변환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;8진수 &amp;lt;-&amp;gt; 16진수&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;8진수를 16진수로 변환 시 2진수로 변환 후 16진수로 변환 &lt;span style=&quot;color: #ee2323;&quot;&gt;(8진수 -&amp;gt; 2진수 -&amp;gt; 16진수)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;16진수를 8진수로&amp;nbsp;변환 시 2진수로 변환 후 8진수로 변환 &lt;span style=&quot;color: #ee2323;&quot;&gt;(16진수 -&amp;gt; 2진수 -&amp;gt; 8진수)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;보수&amp;nbsp;&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터가 수행하는 덧셈 연상을 이용하여 뺄셈을 수행하기 위해 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10진법에는 10의 보수, 9의 보수 존재, 2진법에는 2의 보수, 1의 보수 존재&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10의 보수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;보수를 구할 숫자에 자리수 만큼 0으로 채우고 가장 왼쪽에 1을 추가하여 기준&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex)&amp;nbsp;33에&amp;nbsp;10의&amp;nbsp;보수는?&amp;nbsp;-&amp;gt;&amp;nbsp;67
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;33 + x = 100 (1 + 33의 자리수는 2 -&amp;gt; 00)&lt;/li&gt;
&lt;li&gt;x = 100 - 33&lt;/li&gt;
&lt;li&gt;x = 67&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9의 보수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;보수를 구할 &lt;span style=&quot;text-align: start;&quot;&gt;숫자에&lt;/span&gt; 자리수 만큼 9로 채워 기준&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 33에 9의 보수는? -&amp;gt; 66
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;33 + x = 99 (1 + 33의 자리수는 2 -&amp;gt; 99)&lt;/li&gt;
&lt;li&gt;x = 99 - 33&lt;/li&gt;
&lt;li&gt;x = 66&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2의 보수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1의 보수를 구해 1을 더함&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 10101에 2의 보수는? -&amp;gt; 01011
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;10101의 1의 보수 -&amp;gt; 01010&lt;/li&gt;
&lt;li&gt;01010 + 1 = 01011&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 01100에 2의 보수는? -&amp;gt; 10100
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;01100의 1의 보수 -&amp;gt; 10011&lt;/li&gt;
&lt;li&gt;10011 + 1 = 10100&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1의 보수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;주어진 각 자릿값의 보수(NOT)값으로 변환&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 10101에 1의 보수는? -&amp;gt; 01010&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;자료의 내부적 표현&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 내부의서 연산을 하거나 데이터를 처리할 때 사용&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10진 연산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;10진수 1자리를 2진수 4자리로 변환&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;언팩(Unpack) 연산(=존 10진 형식)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1Byte(8Bit)로 10진수 1자리를 표현, &lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;연산이 불가하여 입출력에 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;4개의 존(Zone)과 4개의 숫자(Digit)로 표현, 마지막 존 부분은 부호로 사용 (부호 없음=F, 양수=C 또는 F, 음수=D)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdQEAP/btsMKt1B5En/MKBxXAnNUeVK4sypQNnglk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdQEAP/btsMKt1B5En/MKBxXAnNUeVK4sypQNnglk/img.png&quot; data-alt=&quot;언팩(Unpack) 연산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdQEAP/btsMKt1B5En/MKBxXAnNUeVK4sypQNnglk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdQEAP%2FbtsMKt1B5En%2FMKBxXAnNUeVK4sypQNnglk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;666&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;언팩(Unpack) 연산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;팩(pack) 연산&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1Byte(8Bit)로 10진수 2자리를 표현, &lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;연산 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 존(Zone)이 없이 숫자(Digit)로 표현, &lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;마지막 4Bit를 부호로 사용&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;(&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;부호 없음=F, 양수=C 또는 F, 음수=D)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;850&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWVYQL/btsMKaOOytp/KkLjfpWMu2kMszBo5nPpf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWVYQL/btsMKaOOytp/KkLjfpWMu2kMszBo5nPpf0/img.png&quot; data-alt=&quot;팩(pack) 연산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWVYQL/btsMKaOOytp/KkLjfpWMu2kMszBo5nPpf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWVYQL%2FbtsMKaOOytp%2FKkLjfpWMu2kMszBo5nPpf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;850&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;850&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;팩(pack) 연산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2진 연산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2진 정수 데이터 표현에 사용, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;10진수의 전체 값을 2진수로 변환&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;표현할 수 있는 범위가 작지만 연산 속도가 빠름&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;첫 번째 Bit를 부호로 사용 (양수=0, 음수=1)&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;양수 표현 방식&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10진수를 2진수로 변환&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;음수 표현 방식&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부호화 절대치: 음수의 절대값(10진수)을 2진수로 표현한 후 부호 비트만 1로 변경&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부호화 1의 보수 방식: 음수의 절대값(10진수)을 2진수로 표현한 후 1의 보수로 변환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부호화 2의 보수 방식: &amp;nbsp;음수의 절대값(10진수)을 2진수로 표현한 후 2의 보수로 변환(1의 보수 + 1)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;498&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7F5IR/btsMJqSrh6P/euHLZsSomnRqyhptEs7RKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7F5IR/btsMJqSrh6P/euHLZsSomnRqyhptEs7RKK/img.png&quot; data-alt=&quot;2진 연산 음수 표현 방식&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7F5IR/btsMJqSrh6P/euHLZsSomnRqyhptEs7RKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7F5IR%2FbtsMJqSrh6P%2FeuHLZsSomnRqyhptEs7RKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;498&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;498&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2진 연산 음수 표현 방식&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;부동 소수점 연산&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실수 데이터 표현과 연산에 사용, &lt;span style=&quot;color: #ee2323;&quot;&gt;고정 소수점 연산(2진 연산, 10진 연산)에 비해 실행 시간이 많이 걸리나 매우 큰 수나 매우 작은 수를 표현하는데 적합&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;부호(1Bit), 지수부(7Bit), 가수부(소수부)로 나누어 표현&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;335&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/40ICF/btsMKQbfFil/XUkKX8icWCFp3WWzwHitX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/40ICF/btsMKQbfFil/XUkKX8icWCFp3WWzwHitX1/img.png&quot; data-alt=&quot;부동 소수점 연산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/40ICF/btsMKQbfFil/XUkKX8icWCFp3WWzwHitX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F40ICF%2FbtsMKQbfFil%2FXUkKX8icWCFp3WWzwHitX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;335&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;335&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;부동 소수점 연산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;자료의 외부적 표현&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BCD(Binary Code Decimal, 2진화 10진 코드)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;6Bit 코드&lt;/b&gt;&lt;/span&gt;로 1개의 문자를 &lt;span style=&quot;color: #ee2323;&quot;&gt;2개(2Bit)의 존(Zone)과 4개(4Bit)의 Digit 비트&lt;/span&gt;로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;6Bit = 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;6&lt;/span&gt;&amp;nbsp; = 64가지 문자 표현 가능&lt;/span&gt;, 영문 소문자는 표현하지 못함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c10Thp/btsMKTy2cT9/k4CVWY6FpJ5ojqW5q3VF6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c10Thp/btsMKTy2cT9/k4CVWY6FpJ5ojqW5q3VF6k/img.png&quot; data-alt=&quot;BCD&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c10Thp/btsMKTy2cT9/k4CVWY6FpJ5ojqW5q3VF6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc10Thp%2FbtsMKTy2cT9%2Fk4CVWY6FpJ5ojqW5q3VF6k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2012&quot; height=&quot;484&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BCD&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;ASCII 코드(American Standard Code for Information Interchange)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;7Bit 코드&lt;/b&gt;&lt;/span&gt;로 1개의 문자를 &lt;span style=&quot;color: #ee2323;&quot;&gt;3&lt;span style=&quot;text-align: start;&quot;&gt;개(3Bit)의 존(Zone)과 4개(4Bit)의 Digit 비트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;로 표현&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;7Bit = 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;7&lt;/span&gt;&amp;nbsp; = 128가지 문자 표현 가능&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;,  마이크로컴퓨터의 기본 코드로 사용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8VMp8/btsMK6EUgzq/YcG9BIkoVLeBWjJ2DiQI21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8VMp8/btsMK6EUgzq/YcG9BIkoVLeBWjJ2DiQI21/img.png&quot; data-alt=&quot;ASCII&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8VMp8/btsMK6EUgzq/YcG9BIkoVLeBWjJ2DiQI21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8VMp8%2FbtsMK6EUgzq%2FYcG9BIkoVLeBWjJ2DiQI21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;426&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ASCII&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;EBCDIC(Extended BCD Interchange Code, 확장 2진화 10진 코드)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;8Bit 코드&lt;/b&gt;&lt;/span&gt;로 1개의 문자를 &lt;span style=&quot;color: #ee2323;&quot;&gt;4&lt;span style=&quot;text-align: start;&quot;&gt;개(2Bit)의 존(Zone)과 4개(4Bit)의 Digit 비트&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;로 표현&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;8Bit = 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;8&lt;/span&gt;&amp;nbsp; = 256가지 문자 표현 가능&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;, 대형 컴퓨터에서 사용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c70C91/btsMIqyOi3B/WsLLFbRBWE4uVAa16bEkrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c70C91/btsMIqyOi3B/WsLLFbRBWE4uVAa16bEkrk/img.png&quot; data-alt=&quot;EBCDIC&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c70C91/btsMIqyOi3B/WsLLFbRBWE4uVAa16bEkrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc70C91%2FbtsMIqyOi3B%2FWsLLFbRBWE4uVAa16bEkrk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;375&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;EBCDIC&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;기타 자료의 표현 방식&lt;/h2&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;BCD 코드 (8421 코드)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;10진수 1자리의 수를 2진수 4Bit로 표현&lt;/span&gt;, BCD에서 Zone Bit를 생략한 형태, 대표적인 &lt;span style=&quot;color: #ee2323;&quot;&gt;가중치 코드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4Bit의 2진수 각 Bit가 8(2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;2&lt;/span&gt;), 4(2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;2&lt;/span&gt;), 2(2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;1&lt;/span&gt;), 1(2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;0&lt;/span&gt;)의 자리값을 가지므로 &lt;span style=&quot;color: #ee2323;&quot;&gt;8421 코드&lt;/span&gt;라고도 불림&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 6(10진수) Excess-3 코드로 표현
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;6(10진수) -&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2진수로 변환 -&amp;gt; 0110&lt;/li&gt;
&lt;li&gt;0110 + 3(11) -&amp;gt; 1001&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Excess-3 코드 (3 초과 코드)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;BCD 코드에 3(10진수)을 더하여 만든 코드&lt;/span&gt;, 대표적인 &lt;span style=&quot;color: #ee2323;&quot;&gt;자기 보수 코드&lt;/span&gt;이며, &lt;span style=&quot;color: #ee2323;&quot;&gt;비가중치 코드&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 6(10진수) Excess-3 코드로 표현
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;6(10진수) -&amp;gt; 2진수로 변환 -&amp;gt; 0110&lt;/li&gt;
&lt;li&gt;0110 + 3(11) -&amp;gt; 1001&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Gray 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;BCD 코드에 XOR을 연산하여 만든 코드&lt;/span&gt;, &lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;비가중치 코드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1Bit만 변하기 때문에 하드웨어적인 오류가 적어 &lt;span style=&quot;color: #ee2323;&quot;&gt;하드웨어 동작 제어에 적합&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;아날로그-디지털 변환, 데이터 전송(입출력장치)&lt;/span&gt;에 주로 사용&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2진수 -&amp;gt; Gray 코드 변환&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;첫 번째 2진수 1Bit는 그대로 내려쓴다.&lt;/li&gt;
&lt;li&gt;두 번째 2진수 Bit 부터는 이전 Bit와 XOR 연산하여 내려쓴다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 2진수 1011을 Gray 코드로 변환&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u6Lfl/btsMK0Npl6P/pXmzIph1ulf6CL68sIhlh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u6Lfl/btsMK0Npl6P/pXmzIph1ulf6CL68sIhlh1/img.png&quot; data-alt=&quot;2진수 -&amp;amp;gt; Gray 코드 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u6Lfl/btsMK0Npl6P/pXmzIph1ulf6CL68sIhlh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu6Lfl%2FbtsMK0Npl6P%2FpXmzIph1ulf6CL68sIhlh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;232&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2진수 -&amp;gt; Gray 코드 변환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Gray 코드 -&amp;gt; 2진수 변환&lt;/h4&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;첫 번째 2진수 1Bit는 그대로 내려쓴다.&lt;/li&gt;
&lt;li&gt;두 번째 2진수 Bit 부터는 이전에 내려쓴 값과 XOR 연산하여 내려쓴다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) Gray 코드 1110을 2진수로 변환&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvU8wl/btsMLLIYJkF/I4WtlCuvqqaRYTkzCgs49K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvU8wl/btsMLLIYJkF/I4WtlCuvqqaRYTkzCgs49K/img.png&quot; data-alt=&quot;Gray 코드 -&amp;amp;gt; 2진수 변환&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvU8wl/btsMLLIYJkF/I4WtlCuvqqaRYTkzCgs49K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvU8wl%2FbtsMLLIYJkF%2FI4WtlCuvqqaRYTkzCgs49K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;232&quot; data-origin-width=&quot;1208&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Gray 코드 -&amp;gt; 2진수 변환&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;패리티 검사 코드(Parity Check Code)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;코드의 오류를 검사하기 위해 사용&lt;/span&gt;, 1Bit의 패리티 체크 비트를 추가하기 때문에 1Bit의 오류만 검출 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1의 개수의 따라 Odd(기수) 패리티, Even(우수) 패리티로 구분&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Odd Parity(기수 패리티)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1인 비트의 수가 홀수가 되도록 0이나 1을 추가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 10100001과 11100010에 홀수 패리티는?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10100001 -&amp;gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;1의 개수가 홀수이므로 0을 추가&lt;/span&gt; -&amp;gt; 10100001&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;11100010&amp;nbsp;-&amp;gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;1의 개수가 짝수이므로 1을 추가&lt;/span&gt; -&amp;gt; 11100010&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Even Parity(우수 패리티)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1인 비트의 수가 짝수가 되도록 0이나 1을 추가&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ex) 10100001과 11100010에 짝수 패리티는?
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10100001 -&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1의 개수가 홀수이므로 1을 추가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-&amp;gt; 10100001&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;11100010&amp;nbsp;-&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1의 개수가 짝수이므로 0을 추가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-&amp;gt; 11100010&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;  외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Even -&amp;gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;4글자 짝수&lt;/span&gt; -&amp;gt; 짝짝꿍이 잘 맞아 &lt;span style=&quot;color: #ee2323;&quot;&gt;우수&lt;/span&gt;함&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Odd -&amp;gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;3글자 홀수&lt;/span&gt; -&amp;gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;기수&lt;/span&gt;&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;해밍 코드(Hamming Code)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;오류를 스스로 검출하여 교정이 가능한 코드&lt;/span&gt;, 2Bit의 오류를 검출할 수 있고, 1Bit의 오류를 교정 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;번째는 오류 검출을 위한 패리티 비트(1, 2, 4, 8, 16 ... 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 다음 해밍코드 &lt;span style=&quot;color: #ee2323;&quot;&gt;10&lt;/span&gt;1&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;011의 패리티 비트는? -&amp;gt; 1번째 1, 2번째 0, 4번째 1&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;코드의 분류&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.4186%;&quot;&gt;&lt;b&gt;분류&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.5814%;&quot;&gt;&lt;b&gt;코드 종류&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.4186%;&quot;&gt;&lt;b&gt;가중치 코드&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Weight Code)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.5814%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;BCD(8421)&lt;/b&gt;&lt;/span&gt;, 2421, 84-2-1, Biquinary(5043210), 51111, Ring-Counter(9876543210)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.4186%;&quot;&gt;&lt;b&gt;비가중치 코드&lt;/b&gt;&lt;br /&gt;&lt;b&gt;(Non-Weight Code)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.5814%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Excess-3&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Gray&lt;/b&gt;&lt;/span&gt;, Jonson, 2-out-of-5, 3-out-of-5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.4186%;&quot;&gt;&lt;b&gt;자기 보수 코드&lt;/b&gt;&lt;br /&gt;&lt;b&gt;Self-Complement Code)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.5814%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Excess-3&lt;/b&gt;&lt;/span&gt;, 2421, 51111, 84-2-1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 24.4186%;&quot;&gt;&lt;b&gt;오류 검출용 코드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 75.5814%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;해밍 코드&lt;/b&gt;&lt;/span&gt;, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;패리티 검사 코드&lt;/b&gt;&lt;/span&gt;, Biquinary(5043210), Ring-Counter(9876543210), 2-out-of-5, 3-out-of-5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자격증</category>
      <category>10의 보수</category>
      <category>10진연산</category>
      <category>1의 보수</category>
      <category>2의 보수</category>
      <category>2진연산</category>
      <category>9의 보수</category>
      <category>bcd</category>
      <category>단위</category>
      <category>보수</category>
      <category>정보처리기능사</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/447</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-3-%EC%9E%90%EB%A3%8C%EC%9D%98-%ED%91%9C%ED%98%84%EA%B3%BC-%EC%97%B0%EC%82%B0#entry447comment</comments>
      <pubDate>Sat, 15 Mar 2025 21:59:32 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 2. 논리회로</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-2-%EB%85%BC%EB%A6%AC%ED%9A%8C%EB%A1%9C</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;불대수&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 명제가 참 또는 거짓인지 판단하는 데 이용되는 수학적인 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1과 0의 두 가지 상태로만 표현하여 처리하는 2진 논리회로로 구성&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;기본적인 논리함수&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;AND: 입력 자료가 모두 1일 때 결과는 1 (A AND B 또는 A &amp;middot; B 또는 AB로 표현)&lt;/li&gt;
&lt;li&gt;OR: 입력 자료 중 1개라도 1이면 결과는 1 (A OR B 또는 A+B로 표현)&lt;/li&gt;
&lt;li&gt;NOT: 입력되는 정보의 반대값 출력 (NOT A 또는 A' 또는 &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;로 표현)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;불 대수의 기본 공식&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 63.1386%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;b&gt;기본 공식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 49.0805%;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;표현식&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;b&gt;멱등법칙&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;A+A = A&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;A&amp;sdot;A = A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;b&gt;보수법칙&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;A+A' = 1&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;A&amp;sdot;A' = 0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;b&gt;항등법칙&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;A+0 = A, A+1 = 1&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;A&amp;sdot;0 = 0, A&amp;sdot;1 = A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;b&gt;교환법칙&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;A+B = B+A&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;A&amp;sdot;B = B&amp;sdot;A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;b&gt;결합법칙&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;A+(B+C) = (A+B)+C&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;A&amp;sdot;(B&amp;sdot;C) = (A&amp;sdot;B)&amp;sdot;C&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;분배법칙&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A&amp;sdot;(B+C) = A&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;sdot;&lt;/span&gt;&lt;/b&gt;B + A&amp;sdot;C&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;A+B&amp;sdot;C=(A+B)&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;sdot;&lt;/span&gt;&lt;/b&gt;(A+C)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15.0775%;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;드모르간 법칙&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1472%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-decoration: overline;&quot;&gt;(A+B)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;=&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;&amp;sdot;&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.9333%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;text-decoration: overline;&quot;&gt;(A&amp;sdot;B) &lt;/span&gt;= &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;+&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;논리 게이트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리회로를 구성하는 기본적인 전자소자, 0 또는 1을 입력과 출력함&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;AND 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhjSpY/btsMJJp3TRL/6zbKPpRI7ciHooevF7IGW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhjSpY/btsMJJp3TRL/6zbKPpRI7ciHooevF7IGW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhjSpY/btsMJJp3TRL/6zbKPpRI7ciHooevF7IGW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhjSpY%2FbtsMJJp3TRL%2F6zbKPpRI7ciHooevF7IGW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;AND 게이트&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;137&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력이 모두 1일 때 1 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = A &amp;middot; B, Y = AB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;OR 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cocS0F/btsMJ2XfpSM/uaiHDExH4q6sSKO6Kriv1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cocS0F/btsMJ2XfpSM/uaiHDExH4q6sSKO6Kriv1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cocS0F/btsMJ2XfpSM/uaiHDExH4q6sSKO6Kriv1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcocS0F%2FbtsMJ2XfpSM%2FuaiHDExH4q6sSKO6Kriv1k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;OR 게이트&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;135&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력 중 1개만 1이어도 1 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = A+B&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;NOT 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oLRX0/btsMKHkKtG6/Bk0KrlHefMgUeLMftUXpsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oLRX0/btsMKHkKtG6/Bk0KrlHefMgUeLMftUXpsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oLRX0/btsMKHkKtG6/Bk0KrlHefMgUeLMftUXpsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoLRX0%2FbtsMKHkKtG6%2FBk0KrlHefMgUeLMftUXpsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;135&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 값을 반대로 변환하여 출력 (0 -&amp;gt; 1, 1 -&amp;gt; 0)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = A', Y = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인버터(Inverter)라고도 불림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;BUFFER 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXCHse/btsMKDQcDZk/o4jezfvYzuXE6KjvE9b6Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXCHse/btsMKDQcDZk/o4jezfvYzuXE6KjvE9b6Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXCHse/btsMKDQcDZk/o4jezfvYzuXE6KjvE9b6Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXCHse%2FbtsMKDQcDZk%2Fo4jezfvYzuXE6KjvE9b6Rk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;143&quot; data-origin-width=&quot;680&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 값을 그대로 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = A&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;NAND 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mvxfD/btsMIMVoLOF/XD4XHvsNAJ7c16PlDKJ6L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mvxfD/btsMIMVoLOF/XD4XHvsNAJ7c16PlDKJ6L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mvxfD/btsMIMVoLOF/XD4XHvsNAJ7c16PlDKJ6L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmvxfD%2FbtsMIMVoLOF%2FXD4XHvsNAJ7c16PlDKJ6L0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;135&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NOT + AND, AND의 부정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&amp;sdot;B&lt;/span&gt;, Y = &lt;span style=&quot;text-decoration: overline;&quot;&gt;AB&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;NOR 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/897pq/btsMH5OYYiC/eEdW5UKgk8UTDGLrU663ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/897pq/btsMH5OYYiC/eEdW5UKgk8UTDGLrU663ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/897pq/btsMH5OYYiC/eEdW5UKgk8UTDGLrU663ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F897pq%2FbtsMH5OYYiC%2FeEdW5UKgk8UTDGLrU663ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;135&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NOT + OR, OR의 부정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A+B&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;XOR(E&lt;span style=&quot;background-color: #ffffff; color: #202122; text-align: start;&quot;&gt;xclusive OR)&lt;/span&gt; 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PtMxf/btsMKgA13St/NKZY6CbLOx2is9tfpNNqE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PtMxf/btsMKgA13St/NKZY6CbLOx2is9tfpNNqE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PtMxf/btsMKgA13St/NKZY6CbLOx2is9tfpNNqE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPtMxf%2FbtsMKgA13St%2FNKZY6CbLOx2is9tfpNNqE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;135&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 값이 모두 같으면 0, 한 개라도 다르면 1 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = A&amp;oplus;B, Y = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;B+A&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;XNOR 게이트&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bu9hUZ/btsMI6MUy9z/3w6br88LKxqXc5b572BeRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bu9hUZ/btsMI6MUy9z/3w6br88LKxqXc5b572BeRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bu9hUZ/btsMI6MUy9z/3w6br88LKxqXc5b572BeRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbu9hUZ%2FbtsMI6MUy9z%2F3w6br88LKxqXc5b572BeRk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;300&quot; height=&quot;135&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NOT + XOR, XOR의 부정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Y = A⊙B, Y = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&amp;oplus;B&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;조합논리회로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전의 입력에는 관계없이 현재의 입력(0 또는 1)에 의해서만 출력이 결정되는 논리회로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기억 기능이 없고&lt;/span&gt; 반가산기, 전가산기, 디코더, 인코더, 멀티플래서, 디멀티플래서 등이 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;반가산기(HA: Half Adder)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1Bit짜리 2진수 &lt;span style=&quot;color: #ee2323;&quot;&gt;2개(A, B)를 덧셈&lt;/span&gt;한 합(S)과 자리올림수(C)를 구하는 조합논리회로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
  &lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;S(Sum) = &lt;span style=&quot;text-decoration: overline;&quot;&gt;A&lt;/span&gt;B+A&lt;span style=&quot;text-decoration: overline;&quot;&gt;B&lt;/span&gt; = A&amp;oplus;B&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;C(Carry) = AB&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZLIfa/btsMKrihqm5/GpoPeXEjy2bSzYGRH7yNl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZLIfa/btsMKrihqm5/GpoPeXEjy2bSzYGRH7yNl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZLIfa/btsMKrihqm5/GpoPeXEjy2bSzYGRH7yNl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZLIfa%2FbtsMKrihqm5%2FGpoPeXEjy2bSzYGRH7yNl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;반가산기&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;240&quot; data-origin-width=&quot;1040&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 46.6265%; height: 104px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 261.211%; height: 19px;&quot; colspan=&quot;4&quot;&gt;&lt;b&gt;진리표&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.9999%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.9869%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;B&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9808%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;S&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 186.243%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;C&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.9999%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 24.9869%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 25.9808%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 186.243%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.9999%; text-align: left; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.9869%; text-align: left; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9808%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 186.243%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.9999%; text-align: left; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.9869%; text-align: left; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9808%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 186.243%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 23.9999%; text-align: left; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.9869%; text-align: left; height: 17px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25.9808%; text-align: left; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 186.243%; text-align: left; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;전가산기(FA: Full Adder)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1Bit짜리 2진수 2개(A, B)뿐만 아니라 이전 단계에서 전달된 자리올림수(Ci)까지 &lt;span style=&quot;color: #ee2323;&quot;&gt;3개(A, B, Ci)를 덧셈&lt;/span&gt;하여 합(S)과 자리올림수(Co)를 구하는 조합논리회로&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;S(Sum) = (A&amp;oplus;B)&amp;oplus;Ci&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Co(Carry) = (A&amp;oplus;B)Ci + AB&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; text-align: start;&quot;&gt;2개의 반가산기(HA)와 1개의 OR 게이트로 구성&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n9iYZ/btsMJfi2gkB/4mM82q7VE5EQZtkvKnyOjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n9iYZ/btsMJfi2gkB/4mM82q7VE5EQZtkvKnyOjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n9iYZ/btsMJfi2gkB/4mM82q7VE5EQZtkvKnyOjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn9iYZ%2FbtsMJfi2gkB%2F4mM82q7VE5EQZtkvKnyOjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;285&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;972&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 67.4111%; height: 99px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 14px;&quot;&gt;
&lt;td style=&quot;width: 343.017%; height: 14px;&quot; colspan=&quot;5&quot;&gt;&lt;b&gt;진리표&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4708%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;B&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;Ci&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;S&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;Co&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4708%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4708%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4708%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 18.4708%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.4708%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.4708%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.4708%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 18.4708%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 18.9668%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.5517%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20.7883%; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 263.239%; text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;디코더(Decoder)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;n개의 입력선으로 입력된 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;개의 출력선으로 번역하는 회로, 주로 AND 게이트로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2진 코드 -&amp;gt; 다른 코드로 변환&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I5Pec/btsMIpsOzp3/kXUl3sNlWpAt8dTPFi1SVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I5Pec/btsMIpsOzp3/kXUl3sNlWpAt8dTPFi1SVk/img.png&quot; width=&quot;500&quot; data-origin-width=&quot;1580&quot; data-origin-height=&quot;1168&quot; data-is-animation=&quot;false&quot; style=&quot;width: 43.3563%; margin-right: 10px;&quot; data-widthpercent=&quot;43.87&quot; id=&quot;kEditorPhotosEditingImage-10&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I5Pec/btsMIpsOzp3/kXUl3sNlWpAt8dTPFi1SVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI5Pec%2FbtsMIpsOzp3%2FkXUl3sNlWpAt8dTPFi1SVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1580&quot; height=&quot;1168&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nrgWv/btsMKz8j98K/VNB00vhzVuz90yeo3yjlGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nrgWv/btsMKz8j98K/VNB00vhzVuz90yeo3yjlGK/img.png&quot; width=&quot;500&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;580&quot; data-origin-width=&quot;1004&quot; style=&quot;width: 55.4809%;&quot; data-widthpercent=&quot;56.13&quot; id=&quot;kEditorPhotosEditingImage-11&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nrgWv/btsMKz8j98K/VNB00vhzVuz90yeo3yjlGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnrgWv%2FbtsMKz8j98K%2FVNB00vhzVuz90yeo3yjlGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1004&quot; height=&quot;580&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 58.7658%; height: 99px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 14px;&quot;&gt;
&lt;td style=&quot;height: 14px; width: 81.9571%;&quot; colspan=&quot;5&quot;&gt;&lt;b&gt;진리표&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 281.313%;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.505%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;A&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3962%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;B&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.6673%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;D0&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.146%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;D1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.2426%; height: 17px; text-align: left;&quot;&gt;&lt;b&gt;D2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 281.313%; text-align: left;&quot;&gt;&lt;b&gt;D3&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.505%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3962%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.6673%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.146%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 17.2426%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 281.313%; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.505%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3962%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.6673%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 17.146%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.2426%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 281.313%; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.505%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3962%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;0&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.6673%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 17.146%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 17.2426%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 281.313%; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 14.505%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 15.3962%; height: 17px; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.6673%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 17.146%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 17.2426%; height: 17px; text-align: left;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 281.313%; text-align: left;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;인코더(Encoder)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디코더의 반대 기능, 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;개의 입력선으로 입력된 값을 n개의 출력선으로 코드화해서 출력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정보를 다른 곳으로 전송하기 위하여 일정한 규칙에 따라 암호로 변환하는 장치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;다른 코드 -&amp;gt; 2진 코드로 변환&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tSHbY/btsMKqp5OGd/JfjvCy2ksUw8hK22TiJzV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tSHbY/btsMKqp5OGd/JfjvCy2ksUw8hK22TiJzV1/img.png&quot; data-alt=&quot;블록(Block)도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tSHbY/btsMKqp5OGd/JfjvCy2ksUw8hK22TiJzV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtSHbY%2FbtsMKqp5OGd%2FJfjvCy2ksUw8hK22TiJzV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;300&quot; data-origin-width=&quot;972&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;블록(Block)도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;멀티플렉서(MUX: Multiplexer)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;개의 입력선 중 1개를 선택하여 그 선으로부터 입력된 값을 1개의 출력선으로 출력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzey0k/btsMKbzU07Z/HxhYbvyG19MDYkHsYnQJlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzey0k/btsMKbzU07Z/HxhYbvyG19MDYkHsYnQJlK/img.png&quot; data-alt=&quot;블록(Block)도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzey0k/btsMKbzU07Z/HxhYbvyG19MDYkHsYnQJlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdzey0k%2FbtsMKbzU07Z%2FHxhYbvyG19MDYkHsYnQJlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;412&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;블록(Block)도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;디멀티플렉서(DeMUX: DeMultiplexer)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1개의 입력선으로 들어오는 정보를 2&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;n&lt;/span&gt;개의 출력선 중 1개를 선택하여 출력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;784&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXlhqu/btsMJo7Pjl0/kPngdcDdzkI2S7t5aLV9V0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXlhqu/btsMJo7Pjl0/kPngdcDdzkI2S7t5aLV9V0/img.png&quot; data-alt=&quot;블록(Block)도&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXlhqu/btsMJo7Pjl0/kPngdcDdzkI2S7t5aLV9V0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXlhqu%2FbtsMJo7Pjl0%2FkPngdcDdzkI2S7t5aLV9V0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;410&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;784&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;블록(Block)도&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;-  디코더: 2진 코드 -&amp;gt; 다른 코드 변환&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- 인코더: 다른 코드 -&amp;gt; 2진 코드 변환&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- 멀티플렉서: 2n개의 입력선을 1개로 변환&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;- 디멀티플렉서: 1개의 입력선을 2n개로 변환&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;순서논리회로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부로부터의 입력과 현재 상태에 따라 출력이 결정되는 회로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기억 기능이 있으며&lt;/span&gt;, 플립플롭과 논리 게이트로 구성&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;플립플롭(FF: Flip-Flop)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전원이 공급되는 한, 상태의 변화를 위한 신호가 발생할 때까지 현재 상태를 그대로 유지하는 논리회로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플립플롭 1개가 1Bit를 저장할 수 있으며 기본적인 플립플롭은 2개의 NAND 또는 NOR 게이터를 이용하여 구성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;680&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FrabP/btsMKs9fIg2/olE2FhSK6RcIzpF0Kek6ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FrabP/btsMKs9fIg2/olE2FhSK6RcIzpF0Kek6ak/img.png&quot; data-alt=&quot;플립플롭(FF) 회로&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FrabP/btsMKs9fIg2/olE2FhSK6RcIzpF0Kek6ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFrabP%2FbtsMKs9fIg2%2FolE2FhSK6RcIzpF0Kek6ak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;400&quot; height=&quot;272&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;680&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;플립플롭(FF) 회로&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;RS 플립플롭(Reset-Set FF)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플립플론의 기본으로, S와 R선의 입력을 조절하여 &lt;span style=&quot;color: #ee2323;&quot;&gt;그대로 유지시키거나, 무조건 0 또는 1의 값을 기억&lt;/span&gt;시키기 위해 사용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2S148/btsMIq6ot2f/HgKe5kkZbQR4B3CT5Or70K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2S148/btsMIq6ot2f/HgKe5kkZbQR4B3CT5Or70K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2S148/btsMIq6ot2f/HgKe5kkZbQR4B3CT5Or70K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2S148%2FbtsMIq6ot2f%2FHgKe5kkZbQR4B3CT5Or70K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;275&quot; data-origin-width=&quot;1380&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 56.4906%; height: 99px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 155.602%; height: 19px;&quot; colspan=&quot;4&quot;&gt;&lt;b&gt;특성표&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;※ 순서논리회로에서는 진리표가 아닌 특성표&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20.1111%; height: 19px;&quot;&gt;&lt;b&gt;S&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 21.0308%; height: 19px;&quot;&gt;&lt;b&gt;R&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.5714%; height: 19px;&quot;&gt;&lt;b&gt;Q(t+1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 90.8883%; height: 19px;&quot;&gt;&lt;b&gt;상태&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20.1111%; height: 19px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 21.0308%; height: 19px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 23.5714%; height: 19px;&quot;&gt;Q(t)&lt;/td&gt;
&lt;td style=&quot;width: 90.8883%; height: 19px;&quot;&gt;상태 변화 없음&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(무)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20.1111%; height: 19px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 21.0308%; height: 19px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 23.5714%; height: 19px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 90.8883%; height: 19px;&quot;&gt;Reset&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(공)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20.1111%; height: 19px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 21.0308%; height: 19px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 23.5714%; height: 19px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 90.8883%; height: 19px;&quot;&gt;Set&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(일)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 20.1111%; height: 38px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 21.0308%; height: 38px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 23.5714%; height: 38px;&quot;&gt;동작 안 됨&lt;/td&gt;
&lt;td style=&quot;width: 90.8883%; height: 38px;&quot;&gt;동작 안 됨&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(불)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※&amp;nbsp;Q(t): 입력 값,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Q(t+1): 출력 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;D 플립플롭&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RS FF의 R선에 인버터(Inverter)를 추가하여 S선과 하나로 묶어 입력선을 하나만 구성한 플립플롭 (D FF = RS FF + NOT Gate)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;입력하는 값 그대로 저장하는 기능을 수행&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;744&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cnc1C/btsMKvStS9T/KixOzTUP4F3IxiLy7bHvLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cnc1C/btsMKvStS9T/KixOzTUP4F3IxiLy7bHvLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cnc1C/btsMKvStS9T/KixOzTUP4F3IxiLy7bHvLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCnc1C%2FbtsMKvStS9T%2FKixOzTUP4F3IxiLy7bHvLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;247&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;744&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 55.5549%; height: 99px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 159.532%;&quot; colspan=&quot;3&quot;&gt;&lt;b&gt;특성표&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 43.6988%;&quot;&gt;&lt;b&gt;D&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.1174%;&quot;&gt;&lt;b&gt;Q(t+1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 91.7156%;&quot;&gt;&lt;b&gt;상태&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 43.6988%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 24.1174%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 91.7156%;&quot;&gt;Reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 43.6988%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 24.1174%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 91.7156%;&quot;&gt;Set&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※&amp;nbsp;Q(t): 입력 값,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Q(t+1): 출력 값&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;JK 플립플롭&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;RS FF에서 S = R = 1 일때 동작되지 않는 결점을 보완한 플립플롭&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;(JK FF =&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;RS FF + AND Gate 2개)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;모든 플립플롭을 대용할 수 있으므로 응용 범위가 넓고, 가장 널리 사용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;488&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vFiSW/btsMJLuK4z8/FvCDVabxzXPlq0FKGEIKeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vFiSW/btsMJLuK4z8/FvCDVabxzXPlq0FKGEIKeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vFiSW/btsMJLuK4z8/FvCDVabxzXPlq0FKGEIKeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvFiSW%2FbtsMJLuK4z8%2FFvCDVabxzXPlq0FKGEIKeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;253&quot; data-origin-width=&quot;964&quot; data-origin-height=&quot;488&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 56.8358%; height: 114px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 163.211%;&quot; colspan=&quot;4&quot;&gt;&lt;b&gt;특성표&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 16.6328%;&quot;&gt;&lt;b&gt;J&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 25.1472%;&quot;&gt;&lt;b&gt;K&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 26.2915%;&quot;&gt;&lt;b&gt;Q(t+1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 95.1396%;&quot;&gt;&lt;b&gt;상태&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 16.6328%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 25.1472%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 26.2915%;&quot;&gt;Q(t)&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 95.1396%;&quot;&gt;상태 변화 없음&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(무)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 16.6328%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 25.1472%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 26.2915%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 95.1396%;&quot;&gt;Reset&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(공)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 16.6328%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 25.1472%;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 26.2915%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 95.1396%;&quot;&gt;Set&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(일)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px; width: 16.6328%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 25.1472%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 26.2915%;&quot;&gt;Q(t)'&lt;/td&gt;
&lt;td style=&quot;height: 19px; width: 95.1396%;&quot;&gt;반전&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;(보&lt;/b&gt;&lt;/span&gt;수&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※&amp;nbsp;Q(t): 입력 값,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Q(t+1): 출력 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;T 플립플롭&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JK FF의 두 입력선을 묶어서 1개의 입력선으로 구성한 플립플롭&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;원 상태와 보수 상태의 2가지 상태가 서로 전환, 토글(Toggle) 스위치에 사용&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceqHvh/btsMKNFnpen/XaAV4ywsK4z4x8GrOKzkoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceqHvh/btsMKNFnpen/XaAV4ywsK4z4x8GrOKzkoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceqHvh/btsMKNFnpen/XaAV4ywsK4z4x8GrOKzkoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceqHvh%2FbtsMKNFnpen%2FXaAV4ywsK4z4x8GrOKzkoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;245&quot; data-origin-width=&quot;1004&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 60.9119%; height: 72px;&quot; border=&quot;1&quot; data-ke-style=&quot;style8&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 174.582%; height: 19px;&quot; colspan=&quot;3&quot;&gt;&lt;b&gt;특성표&amp;nbsp;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 37.5259%; height: 19px;&quot;&gt;&lt;b&gt;T&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 24.0126%; height: 19px;&quot;&gt;&lt;b&gt;Q(t+1)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 113.043%; height: 19px;&quot;&gt;&lt;b&gt;상태&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 37.5259%; height: 17px;&quot;&gt;0&lt;/td&gt;
&lt;td style=&quot;width: 24.0126%; height: 17px;&quot;&gt;Q(t)&lt;/td&gt;
&lt;td style=&quot;width: 113.043%; height: 17px;&quot;&gt;Reset&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 37.5259%; height: 17px;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 24.0126%; height: 17px;&quot;&gt;Q(t)'&lt;/td&gt;
&lt;td style=&quot;width: 113.043%; height: 17px;&quot;&gt;Set&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;span style=&quot;text-align: start;&quot;&gt;※&amp;nbsp;Q(t): 입력 값,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Q(t+1): 출력 값&lt;/div&gt;
&lt;div&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 외우기&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;- RS FF: 무공일불&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;- D: 무&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;- JK FF: 무공일보&lt;/b&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;- T: 보&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;</description>
      <category>자격증</category>
      <category>논리 게이트</category>
      <category>디멀티플랙서</category>
      <category>디코더</category>
      <category>멀티플랙서</category>
      <category>반가산기</category>
      <category>불대수</category>
      <category>인코더</category>
      <category>전가산기</category>
      <category>정보처리기능사</category>
      <category>플립플롭</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/446</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-2-%EB%85%BC%EB%A6%AC%ED%9A%8C%EB%A1%9C#entry446comment</comments>
      <pubDate>Thu, 13 Mar 2025 17:11:55 +0900</pubDate>
    </item>
    <item>
      <title>정보처리기능사 - 1. 컴퓨터 시스템의 구성</title>
      <link>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-1-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EA%B5%AC%EC%84%B1</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;컴퓨처(EDPS, ADPS)의 개념&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 자료(Data)를 처리하여 출력하는 전자 자료처리 시스템&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;컴퓨터의 특징&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;대&lt;/span&gt;용량성: 많은 양의 데이터를 처리 및 보관&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;범&lt;/span&gt;용성: 컴퓨터를 여러가지 용도로 사용&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;호&lt;/span&gt;환성: 컴퓨터의 기종과 상관없이 여러 컴퓨터에서 사용 가능&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정&lt;/span&gt;확성: 사용자의 요구사항 충족&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;신&lt;/span&gt;뢰성: 고장없이 기능을 원활하게 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;컴퓨터의 특징은 &lt;span style=&quot;color: #ee2323;&quot;&gt;대&amp;middot;범&lt;span style=&quot;text-align: left;&quot;&gt;&amp;middot;&lt;/span&gt;호&lt;span style=&quot;text-align: left;&quot;&gt;&amp;middot;&lt;/span&gt;정&lt;span style=&quot;text-align: left;&quot;&gt;&amp;middot;&lt;/span&gt;신&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;컴퓨터의 구성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;컴퓨터 = 하드웨어 + 소프트웨어
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;하드웨어 = 중앙처리장치(제어장치 + 연산장치 + 레지스터) + 주변장치(입출력장치 + 보조기억장치)&lt;/li&gt;
&lt;li&gt;소프트웨어 = 시스템 소프트웨어 + 응용 소프트웨어&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;중앙처리장치(CPU)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴퓨터 시스템에 부착된 모든 장비를 제어하는 장치, 제어장치 + 연산장치 + 레지스터로 구성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;제어장치(Control Unit)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령 레지스터에서 읽은 명령어를 해독하여 제어신호를 보내 다른 장치를 제어&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;구성 장치&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;프로그램 카운터(PC: Program Counter)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;명령어 레지스터(IR)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;부호기(제어신호 발생기)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;명령어, 번지 해독기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;명령어의 실행 단계&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인출(Fetch) -&amp;gt; 간접(Indirect) -&amp;gt; 실행(Execute) -&amp;gt; 인터럽트(Interrupt)&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;프로그램 카운터(PC)에 저장된 주소(값)를 번지 레지스터에 옮김&lt;/li&gt;
&lt;li&gt;명령어를 주기억장치로부터 인출(Fetch)&lt;/li&gt;
&lt;li&gt;프로그램 카운터(PC) 증가&lt;/li&gt;
&lt;li&gt;명령 코드를 명령 레지스터로 이동&lt;/li&gt;
&lt;li&gt;명령 레지스터의 내용을 해독하여 실행&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;연산장치(ALU: Arithmetic &amp;amp; Logic Unit)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치 명렁에 따라 연산을 수행하는 장치&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;구성 장치&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;가산기(Adder)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;누산기(AC: Accumulator)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;보수기(Complementor)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;데이터 레지스터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;상태 레지스터&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;오버플로 검출기&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;시프트 레지스터(Shift Register)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;수행 연산&lt;/h4&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;산술연산, 논리연산, 관계연상, 이동(Shift) 등&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;연산 수행 단위&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;LIPS: 초당 1개의 연산 수행&lt;/li&gt;
&lt;li&gt;KIPS: 초당 1,000개의 연산 수행&lt;/li&gt;
&lt;li&gt;MIPS: 초당 1,000,000개의 연산 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;레지스터(Register)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CPU 내부에서 처리할 명령어나 데이터를 일시적으로 기억하는 임시 저장소&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;특징&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;메모리 중 속도가 가장 빠름&lt;/li&gt;
&lt;li&gt;새로운 데이터가 전송되면 기존 데이터는 삭제&lt;/li&gt;
&lt;li&gt;연산 속도를 향상시키기 위해 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 380px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 19px;&quot;&gt;&lt;b&gt;레지스터&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 19px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;프로그램 카운터(PC: Program Counter),&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;프로그램 계수기&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;※ 제어장치&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 57px;&quot;&gt;다음 실행할 명령어를 기억&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;명령 레지스터(IR: Instruction Register)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;※&amp;nbsp;제어장치&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 38px;&quot;&gt;현재 실행중인 명령어 기억&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;누산기(AC: Accumulator)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※ 연산장치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 38px;&quot;&gt;연산 결과를 일시적으로 저장, 연산의 중심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;상태 레지스터(Status Register),&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;PSWR(Program Status Word Register),&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;플래그 레지스터(Flag Register)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※ 연산장치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 57px;&quot;&gt;오버플로, 언더플로, 자리올림, 인터럽트 등의 PSW를 저장&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(PSW: 시스템 내부 순간 상태가 기록된 정보)&lt;/span&gt;&lt;br /&gt;제어장치와 연산장치의 실행 순서를 제어하기 위해 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;메모리 주소 레지스터(MAR: Memory Address Register)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※ 제어장치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 19px;&quot;&gt;기억장치를 출입하는 데이터의 번지를 기억&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;메모리 버퍼 레지스터(MBR: Memory Buffer Register)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※ 제어장치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 38px;&quot;&gt;기억장치를 출입하는 데이터가 잠시 기억되는 레지스터&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;(버퍼: 두 장치간 속도차이를 극복하기 위해 사용)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;인덱스 레지스터(Index Register)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;※ 연산장치&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 19px;&quot;&gt;주소의 변경, 서브루틴 연결 및 프로그램에서 반복 연산의 횟수를 세는 레지스터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;데이터 레지스터(Data Register)&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※ 연산장치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 19px;&quot;&gt;연산에 사용될 데이터를 기억&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 45.2326%; height: 76px;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;시프트 레지스터(Shift Register),&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;2배 길이 레지스터&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;※ 연산장치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 54.7674%; height: 76px;&quot;&gt;클럭 펄스(Clock Pulse)에 의해 기억된 내용을 왼쪽 또는 오른쪽으로 1Bit 씩 자리를 이동&lt;br /&gt;(클럭 펄스: 컴퓨터 내부의 각 장치와 회로의 동작을 일정하게 유지시키기 위해 규칙적으로 발생하는 전기적인 신호)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;마이크로프로세서(Microprocessor)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제어장치, 연산장치, 레지스터가 하나의 대규모 집적회로 칩(IC)에 내장된 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설계 방식에 따라 RISC, CISC로 구분&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 190px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;RISC&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;CISC&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;명령어&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;명령어 길이&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;고정&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;가변&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;실행 사이클&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;단일&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;다중&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;주소 지정&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;간단&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;복잡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;레지스터&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;많음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;적음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;전력 소모&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;적음&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;많음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;처리 속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;빠름&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;느림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;프로그래밍&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;복잡함&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;간단함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;&lt;b&gt;용도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;서버, 위크스테이션&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px;&quot;&gt;개인용 컴퓨터(PC)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;마이크로프로세서에서 &lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;R&lt;/span&gt;ISC는 &lt;span style=&quot;color: #ee2323;&quot;&gt;레&lt;/span&gt;지스터, 프로그래밍을 제외하고 &lt;span style=&quot;color: #ee2323;&quot;&gt;적고, 간단하고 빠름&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;C&lt;/span&gt;ISC는 RISC의 반대, 개인용 컴퓨터(P&lt;span style=&quot;color: #ee2323;&quot;&gt;C&lt;/span&gt;)로 사용&lt;/b&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;입출력장치&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입력장치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그램을 외부로부터 읽어 들여 컴퓨터로 처리할 수 있게 자료를 코드로 변환하여 주기억장치로 전달&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;키보드, 마우스, 스캐너, 라이트 펜, OMR(컴퓨터용 수성 사인펜 판독), OCR(인쇄된 문자 판독), MICR(자성 잉크를 판독), BCR(바코드 판독)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;출력장치&lt;/h3&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처리된 데이터를 사람이 알아볼 수 있도록 변환하여 표시하는 장치&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;모니터, 프린터, 플로터&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;보조기억장치&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입출력 겸용장치로 주기억장치의 단점을 보완하기 위해 사용, 주기억장치보다 속도는 느리지만 용량이 크다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자기 디스크, 자기 테이프, CD-ROM, 하드디스크&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;컴퓨터의 발전 과정&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;컴퓨터의 세대별 특징&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 304px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;세대&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;논리소자&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 19px;&quot;&gt;&lt;b&gt;주기억장치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.3953%; height: 19px;&quot;&gt;&lt;b&gt;연산 속도&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 23.6047%; height: 19px;&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;제1세대&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;진공관&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;자기 드럼&lt;/td&gt;
&lt;td style=&quot;width: 16.3953%; height: 57px;&quot;&gt;ms&lt;/td&gt;
&lt;td style=&quot;width: 23.6047%; height: 57px;&quot;&gt;기계어 사용&lt;br /&gt;하드웨어 중심&lt;br /&gt;일괄 처리 시스템&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 76px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 76px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;제2세대&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 76px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;트랜지스터(TR)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 76px;&quot;&gt;자기 코어&lt;/td&gt;
&lt;td style=&quot;width: 16.3953%; height: 76px;&quot;&gt;㎲&lt;/td&gt;
&lt;td style=&quot;width: 23.6047%; height: 76px;&quot;&gt;고급언어 개발&lt;br /&gt;운영체제 도입&lt;br /&gt;온라인 실시간 처리&lt;br /&gt;다중 프로그램&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;제3세대&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 38px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;직접회로(IC)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 38px;&quot;&gt;집접회로(IC)&lt;/td&gt;
&lt;td style=&quot;width: 16.3953%; height: 38px;&quot;&gt;ns&lt;/td&gt;
&lt;td style=&quot;width: 23.6047%; height: 38px;&quot;&gt;사분할 처리, 다중 처리&lt;br /&gt;OCR, OMR, MICR, MIS 도입&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;제4세대&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;고밀도 직접회로(LSI)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;고밀도 직접회로(LSI)&lt;/td&gt;
&lt;td style=&quot;width: 16.3953%; height: 57px;&quot;&gt;ps&lt;/td&gt;
&lt;td style=&quot;width: 23.6047%; height: 57px;&quot;&gt;개인용 컴퓨터 개발&lt;br /&gt;마이크로프로세서 개발&lt;br /&gt;네트워크 분산 처리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 57px;&quot;&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;제5세대&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;초고밀도 직접회로(VLSI)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 20%; height: 57px;&quot;&gt;초고밀도 직접회로(VLSI)&lt;/td&gt;
&lt;td style=&quot;width: 16.3953%; height: 57px;&quot;&gt;fs&lt;/td&gt;
&lt;td style=&quot;width: 23.6047%; height: 57px;&quot;&gt;인터넷, 인공지능, 퍼지 이론, 패턴 인식, 전문가 시스템 등 신기술 개발&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;처리 속도 단위&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 57px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;단위&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;ms&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;㎲&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;ns&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;ps&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.9834%; height: 19px;&quot;&gt;&lt;b&gt;fs&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.588%; height: 19px;&quot;&gt;&lt;b&gt;as&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;읽기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;밀&lt;/span&gt;리 초&lt;br /&gt;(Milli Second)&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;마&lt;/span&gt;이크로 초&lt;br /&gt;(Micro Second)&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;나&lt;/span&gt;노 초&lt;br /&gt;(Nano Second)&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;피&lt;/span&gt;코 초&lt;br /&gt;(Pico Second)&lt;/td&gt;
&lt;td style=&quot;width: 14.9834%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;펨&lt;/span&gt;토 초&lt;br /&gt;(Femto Second)&lt;/td&gt;
&lt;td style=&quot;width: 13.588%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;아&lt;/span&gt;토 초&lt;br /&gt;(Atto Second)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;b&gt;수치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;text-align: center;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;&amp;minus;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;&amp;minus;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;&amp;minus;9&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.2857%; height: 19px;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;&amp;minus;12&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.9834%; height: 19px;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;&amp;minus;15&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.588%; height: 19px;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;font-size: smaller; vertical-align: super;&quot;&gt;&amp;minus;18&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;느림 &amp;lt;--------------------------------------------------------------------------------------------&amp;gt; 빠름&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;처리 속도 단위는 &lt;span style=&quot;color: #ee2323;&quot;&gt;밀&amp;middot;마&amp;middot;나&amp;middot;피&amp;middot;펨&amp;middot;아&lt;/span&gt;, &lt;/b&gt;&lt;b&gt;-3승씩 증가&lt;/b&gt;&lt;/blockquote&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;컴퓨터의 분류&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;처리 능력에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;슈퍼 컴퓨터(초대형 컴퓨터): 초당 30~50TFlops의 속도, 인공위성 제어, 일기예보, 시뮬레이션 등의 특수 분야에서 사용&lt;/li&gt;
&lt;li&gt;메인 프레인(대형 컴퓨터): 수백명 동접 가능, 은행, 병원, 정부기관 등에서 사용&lt;/li&gt;
&lt;li&gt;미니 컴퓨터(중형 컴퓨터): 학교, 연구소 등의 업무 처리나 과학 기술 계산에 사용&lt;/li&gt;
&lt;li&gt;마이크로 컴퓨터(소형 컴퓨터): 마이크로프로세서를 CPU로 사용, 워크스테이션, 데스크톱, 노트북 등 사용&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;데이터 취급에 따른 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디지털 컴퓨터(Digital Computer): 문자나 숫자화된 비연속적인 데이터를 처리, 일반적으로 사용하는 컴퓨터&lt;/li&gt;
&lt;li&gt;아날로그 컴퓨터(Analog Computer): 온도, 전류, 속도 등과 같이 연속적으로 변화하는 데이터를 처리, 특수 목적용&lt;/li&gt;
&lt;li&gt;하이브리드 컴퓨터(Hybrid Computer): 디지털 컴퓨터의 장점 + 아날로그 컴퓨터의 장점&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;사용 용도에 따른 컴퓨터 분류&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;범용 컴퓨터: 여러 분야에서 다양한 용도로 사용, 디지털 컴퓨터&lt;/li&gt;
&lt;li&gt;전용 컴퓨터: 특수한 목적에만 사용, 아날로크 컴퓨터&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt; 외우기&lt;/b&gt;&lt;br /&gt;&lt;b&gt;데이터의 개수를 셀 수 있다면 디지털 데이터, 셀 수 없다면 아날로그 데이터&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;디지털 컴퓨터는 범용&lt;/span&gt;적이고 가격이 고가, &lt;span style=&quot;color: #ee2323;&quot;&gt;아날로그 컴퓨터는 특수 목적용&lt;/span&gt;이고 가격이 저가&lt;/b&gt;&lt;/blockquote&gt;</description>
      <category>자격증</category>
      <category>CPU</category>
      <category>레지스터</category>
      <category>연산장치</category>
      <category>정보처리기능사</category>
      <category>제어장치</category>
      <category>컴퓨터</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/445</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%A0%95%EB%B3%B4%EC%B2%98%EB%A6%AC%EA%B8%B0%EB%8A%A5%EC%82%AC-1-%EC%BB%B4%ED%93%A8%ED%84%B0-%EC%8B%9C%EC%8A%A4%ED%85%9C%EC%9D%98-%EA%B5%AC%EC%84%B1#entry445comment</comments>
      <pubDate>Thu, 13 Mar 2025 12:48:57 +0900</pubDate>
    </item>
    <item>
      <title>카프카 프로세서(Processor) API 사용 예제</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9CProcessor-API-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;※&amp;nbsp;예제&amp;nbsp;코드의&amp;nbsp;스펙은&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;br /&gt;-&amp;nbsp;JDK&amp;nbsp;21&lt;br /&gt;-&amp;nbsp;Spring&amp;nbsp;Boot&amp;nbsp;3.4.2&lt;br /&gt;-&amp;nbsp;Kafka&amp;nbsp;Streams&amp;nbsp;3.5.1&lt;br /&gt;-&amp;nbsp;confluentinc/cp-kafka:latest(Docker&amp;nbsp;Image,&amp;nbsp;2025-02-24&amp;nbsp;기준,&lt;br /&gt;sha256:e6b87a4a8ca07aadba9c04d86515a340f67cd11ca6160c9b07205f3d88dfb5f1)&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt; 구현 예제&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서(Processor) API에서 로직을 구현하기 위해서는 스트림 프로세서 역할을 하는 Processor 인터페이스를 구현해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88DSL-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EA%B8%B0%EB%8A%A5-%EC%98%88%EC%A0%9C#%08filter()-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스트림즈(Streams)DSL의 filter() 메서드&lt;/a&gt;와 동일한 기능을 하는 FilterProcessor를 구현해 보겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Processor&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림 프로세서 클래스를 생성하기 위해서는 카프카 스트림즈(kafka streams) 라이브러리에서 제공하는 Processor 또는 Transformer 인터페이스를 구현해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1740365513328&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.apache.kafka.streams.processor.api.Processor;
import org.apache.kafka.streams.processor.api.ProcessorContext;
import org.apache.kafka.streams.processor.api.Record;

public class FilterProcessor implements Processor&amp;lt;String, String, String, String&amp;gt; {

  private ProcessorContext context;

  @Override
  public void init(ProcessorContext context) {
    this.context = context;
  }

  @Override
  public void process(Record&amp;lt;String, String&amp;gt; record) {
    if (record.value().length() &amp;gt; 5) {
      context.forward(record);
    }
    context.commit();
  }

  @Override
  public void close() {
    // 사용한 리소스 해체 로직
  }

}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Processor&amp;lt;KIn, VIn, KOut, VOut&amp;gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서 클래스에서 제네릭 변수들에 대한 설명은 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;KIn&lt;/b&gt;: 전달받을 메시지 키의 유형&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VIn&lt;/b&gt;: 전달받을 메시지 값의 유형&lt;/li&gt;
&lt;li&gt;&lt;b&gt;KOut&lt;/b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;:&lt;span&gt; 전달할&amp;nbsp;메시지 키의 유형&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;VOut&lt;/b&gt;: 전달할 메시지 값의 유형&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;ProcessorContext&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ProcessorContext는 프로세서 내부에서 사용할 수 있는 컨텍스트 객체로 프로세서에 대한 정보를 담고 있어, 현재 스트림 처리 중인 토폴로지의 토픽 정보, 애플리케이션 아이디를 조회할 수 있습니다. 프로세싱 처리에 제공하고 있는 메서드는 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;currentSystemTime() &lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 시스템 시간을 밀리초 단위로 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;currentStreamTime()&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;스트림즈의 이벤트 시간(스트림 시간)을 반환합니다. 이벤트 시간은 Kafka에서 설정한 타임스탬프를 기준으로 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;topic()&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 처리 중인 토픽 이름을 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;partition()&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 처리 중인 파티션 번호를 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;offset()&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 처리 중인 레코드의 오프셋(offset)을 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;getStateStore(String storeName)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;State Store에 접근하여 데이터를 읽고 쓸 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;forward(Record&amp;lt;KOut, VOut&amp;gt; record)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재 처리된 데이터를 다음 프로세서로 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;schedule(Duration interval, PunctuationType type, Punctuator callback)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 시간 후에 실행될 작업을 예약합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;commit()&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;현재의 상태 저장소에서 변경된 내용을 커밋합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;close()&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세서가 종료될 때 호출됩니다. 리소스를 정리하거나 상태 저장소를 닫는 등의 작업을 처리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Processor 인터페이스를 구현한 클래스를 addProcessor 메서드를 사용해 추가합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1740369596900&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Properties properties = new Properties();
properties.put(StreamsConfig.APPLICATION_ID_CONFIG, &quot;streams-test&quot;);
properties.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, &quot;localhost:9092&quot;);
properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());

Topology topology = new Topology();
topology.addSource(&quot;Source&quot;, &quot;processor-test-1&quot;)
  .addProcessor(&quot;Process&quot;, FilterProcessor::new, &quot;Source&quot;)
  .addSink(&quot;Sink&quot;, &quot;processor-test-2&quot;, &quot;Process&quot;);

KafkaStreams streams = new KafkaStreams(topology, properties);
streams.start();&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Topology&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Topology 클래스는 포톨리지를 구성할 수 있으며 제공하는 메서드는 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5259&quot; data-start=&quot;5219&quot;&gt;&lt;b&gt;addSource(String name, String... topics)&lt;/b&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5259&quot; data-start=&quot;5219&quot;&gt;데이터를 읽어올 소스 노드(Source Node)를 추가하는 메서드입니다.&lt;/li&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;name: 노드명 설정&lt;/li&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;topics: 데이터를 가져올 토픽명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5303&quot; data-start=&quot;5260&quot;&gt;&lt;b&gt;addProcessor(String&amp;nbsp;name,&amp;nbsp;ProcessorSupplier&amp;lt;KIn,&amp;nbsp;VIn,&amp;nbsp;KOut,&amp;nbsp;VOut&amp;gt;&amp;nbsp;supplier,&amp;nbsp;String...&amp;nbsp;parentNames)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5303&quot; data-start=&quot;5260&quot;&gt;데이터를 변환, 필터링, 집계하는 핵심 로직을 정의하는 프로세서 노드(Processor Node)를 추가하는 메서드입니다.&lt;/li&gt;
&lt;li data-start=&quot;5304&quot; data-end=&quot;5340&quot;&gt;name: 노드명 설정&lt;/li&gt;
&lt;li data-start=&quot;5304&quot; data-end=&quot;5340&quot;&gt;supplier: 프로세서 로직을 정의하는 메서드(함수형 인터페이스)&lt;/li&gt;
&lt;li data-start=&quot;5304&quot; data-end=&quot;5340&quot;&gt;parentNames: 데이터를 전달받을 노드명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;&lt;b&gt;addSink(String&amp;nbsp;name,&amp;nbsp;String&amp;nbsp;topic,&amp;nbsp;String...&amp;nbsp;parentNames)&amp;nbsp;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;데이터를 출력하는 싱크 노드(Sink Node)를 추가하는 메서드입니다.&lt;/li&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;name: 노드명 설정&lt;/li&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;topic: 데이터를 전달할 토픽명&lt;/li&gt;
&lt;li data-end=&quot;5340&quot; data-start=&quot;5304&quot;&gt;parentNames: 데이터를 전달받을 노드명&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5381&quot; data-start=&quot;5341&quot;&gt;&lt;b&gt;addStateStore(StoreBuilder&amp;lt;?&amp;gt;&amp;nbsp;storeBuilder,&amp;nbsp;String...&amp;nbsp;processorNames)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5381&quot; data-start=&quot;5341&quot;&gt;특정 프로세서에서 사용할 수 있는 State Store를 추가하는 메서드입니다. 이를&amp;nbsp;통해&amp;nbsp;데이터를&amp;nbsp;저장하고&amp;nbsp;다시&amp;nbsp;검색할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/li&gt;
&lt;li data-end=&quot;5381&quot; data-start=&quot;5341&quot;&gt;storeBuilder: Key, Value Store 객체&lt;/li&gt;
&lt;li data-end=&quot;5381&quot; data-start=&quot;5341&quot;&gt;processorNames: 해당 Store을 사용할 수 있는 프로세서 노드명&amp;nbsp;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5381&quot; data-start=&quot;5341&quot;&gt;&lt;b&gt;describe()&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;5381&quot; data-start=&quot;5341&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;현재 &lt;/span&gt;Topology의 구조를 문자열로 반환&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;하는 메서드입니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 토픽에 데이터를 추가해 보면 5자 이상인 데이터만 필터링되어 다른 토픽으로 전송된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckdzGC/btsMsLiSqeM/KWTl3qlq26uA89xp4XCSP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckdzGC/btsMsLiSqeM/KWTl3qlq26uA89xp4XCSP1/img.png&quot; data-alt=&quot;processor-test-1 topic 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckdzGC/btsMsLiSqeM/KWTl3qlq26uA89xp4XCSP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FckdzGC%2FbtsMsLiSqeM%2FKWTl3qlq26uA89xp4XCSP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2250&quot; height=&quot;248&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;processor-test-1 topic 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2568&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rXrtL/btsMtavDdLd/cSil5sY7uFoYvMqvSwomU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rXrtL/btsMtavDdLd/cSil5sY7uFoYvMqvSwomU1/img.png&quot; data-alt=&quot;processor-test-2 topic 데이터 consume&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rXrtL/btsMtavDdLd/cSil5sY7uFoYvMqvSwomU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrXrtL%2FbtsMtavDdLd%2FcSil5sY7uFoYvMqvSwomU1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2568&quot; height=&quot;166&quot; data-origin-width=&quot;2568&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;processor-test-2 topic 데이터 consume&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서 API를 활용하는 추가적인 정보는 &lt;a href=&quot;https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식 가이드 문서&lt;/a&gt;에서 확인할 수 있습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1740383260906&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apache Kafka&quot; data-og-description=&quot;Apache Kafka: A Distributed Streaming Platform.&quot; data-og-host=&quot;kafka.apache.org&quot; data-og-source-url=&quot;https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html&quot; data-og-url=&quot;https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/biqyEB/hyYju2smxp/eWYAPjsKmGf3jcGoE5ClBK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200&quot;&gt;&lt;a href=&quot;https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kafka.apache.org/documentation/streams/developer-guide/processor-api.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/biqyEB/hyYju2smxp/eWYAPjsKmGf3jcGoE5ClBK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apache Kafka&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Apache Kafka: A Distributed Streaming Platform.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kafka.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>API</category>
      <category>DSL</category>
      <category>Kafka</category>
      <category>processor</category>
      <category>processorcontext</category>
      <category>Streams</category>
      <category>Topology</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/444</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9CProcessor-API-%EC%82%AC%EC%9A%A9-%EC%98%88%EC%A0%9C#entry444comment</comments>
      <pubDate>Mon, 24 Feb 2025 16:49:08 +0900</pubDate>
    </item>
    <item>
      <title>카프카 프로세서(Processor) API의 기본 개념</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9CKafka-Processor-API%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로세서(Processor) API란?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서(Processor) API는 카프카 스트림즈(Kafka Streams) 라이브러리에서 제공하는 강력한 API 중 하나로, 데이터를 스트림 처리할 때 저수준(하위 계층)에서 직접 처리할 수 있도록 해주는 API입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서 API는 &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;스트림즈DSL(Streams DSL)&lt;/a&gt;보다 투박한 코드를 가지지만 토폴로지를 기준으로 데이터를 처리한다는 관점에서는 동일한 역할을 하지만 프로세서 API는 KStream, KTable, GlobalKTable의 개념을 사용하지 않으며, 추가적인 상세 로직의 구현이 필요하다면 프로세서 API를 활용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서 API에서는 스트림 데이터를 직접 다루기 때문에 개발자가 데이터의 흐름을 완전히 사용자 정의(커스텀) 할 수 있도록 지원하고 이를 통해 데이터 변환, 필터링, 집계, 분기(branching) 등의 작업을 더욱 세밀하게 조정할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;157&quot; data-end=&quot;200&quot;&gt;&lt;b&gt;프로세서 API의 장점과 단점&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;1610&quot; data-start=&quot;1598&quot; data-ke-size=&quot;size23&quot;&gt;✅ 장점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2649&quot; data-start=&quot;1611&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1714&quot; data-start=&quot;1611&quot;&gt;&lt;b&gt;완전한 유연성 제공&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1714&quot; data-start=&quot;1634&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1676&quot; data-start=&quot;1634&quot;&gt;스트림즈DSL에서 불가능한 복잡한 데이터 흐름을 구현할 수 있음.&lt;/li&gt;
&lt;li data-end=&quot;1714&quot; data-start=&quot;1680&quot;&gt;예: 특정 조건에 따라 데이터를 여러 개의 토픽으로 분기.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2441&quot; data-start=&quot;1716&quot;&gt;&lt;b&gt;사용자 정의 프로세서 구현 가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2441&quot; data-start=&quot;1746&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1798&quot; data-start=&quot;1746&quot;&gt;Processor 인터페이스를 직접 구현하여 원하는 방식으로 데이터를 처리할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2544&quot; data-start=&quot;2443&quot;&gt;&lt;b&gt;State Store를 자유롭게 관리 가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2544&quot; data-start=&quot;2479&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2544&quot; data-start=&quot;2479&quot;&gt;스트림즈DSL에서 제공하는 기본 State Store 이외에도, 커스텀 상태 저장소를 구현할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2649&quot; data-start=&quot;2546&quot;&gt;&lt;b&gt;Kafka 외부 시스템과의 긴밀한 연동 가능&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2649&quot; data-start=&quot;2583&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2649&quot; data-start=&quot;2583&quot;&gt;HTTP API 호출, 파일 시스템 접근, 데이터베이스 업데이트 등 다양한 외부 시스템과의 연동이 필요할 때 유용.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-end=&quot;2668&quot; data-start=&quot;2656&quot; data-ke-size=&quot;size23&quot;&gt;❌ 단점&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2926&quot; data-start=&quot;2669&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;2750&quot; data-start=&quot;2669&quot;&gt;&lt;b&gt;개발이 복잡하고 코드가 길어짐&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2750&quot; data-start=&quot;2698&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2750&quot; data-start=&quot;2698&quot;&gt;스트림즈DSL보다 훨씬 많은 코드가 필요하며, 직접 Topology를 구성해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2843&quot; data-start=&quot;2752&quot;&gt;&lt;b&gt;내부 최적화 기능을 직접 관리해야 함&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2843&quot; data-start=&quot;2785&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2843&quot; data-start=&quot;2785&quot;&gt;스트림즈DSL이 자동으로 처리하는 병렬 실행, 상태 저장, 장애 복구 등을 직접 고려해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2926&quot; data-start=&quot;2845&quot;&gt;&lt;b&gt;학습 곡선이 가파름&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2926&quot; data-start=&quot;2868&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2926&quot; data-start=&quot;2868&quot;&gt;프로세서 API를 제대로 활용하려면 카프카 스트림즈 내부 구조를 깊이 이해해야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;200&quot; data-start=&quot;157&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;프로세서 API와 스트림즈DSL의 차이점&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서 API와 스트림즈DSL의 차이점과 사용 사례는 아래와 같습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;717&quot; data-start=&quot;201&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Processor API&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;Streams DSL&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;374&quot; data-start=&quot;315&quot;&gt;
&lt;td&gt;&lt;b&gt;추상화 수준&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;저수준 (Low-Level) API&lt;/td&gt;
&lt;td&gt;고수준 (High-Level) API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;433&quot; data-start=&quot;375&quot;&gt;
&lt;td&gt;&lt;b&gt;코드 복잡성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;복잡함 (사용자가 직접 데이터 흐름 정의)&lt;/td&gt;
&lt;td&gt;간단함 (함수형 연산 제공)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;487&quot; data-start=&quot;434&quot;&gt;
&lt;td&gt;&lt;b&gt;유연성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;매우 유연함 (사용자 정의 가능)&lt;/td&gt;
&lt;td&gt;제한적 (미리 정의된 연산 사용)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;571&quot; data-start=&quot;488&quot;&gt;
&lt;td&gt;&lt;b&gt;데이터 흐름&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;명시적으로 Processor 및 Topology 구성&lt;/td&gt;
&lt;td&gt;KStream, KTable 등의 연산자를 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;652&quot; data-start=&quot;572&quot;&gt;
&lt;td&gt;&lt;b&gt;상태 관리&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;직접 State Store 관리해야 함&lt;/td&gt;
&lt;td&gt;자동으로 상태 관리 지원 (aggregate, count 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;717&quot; data-start=&quot;653&quot;&gt;
&lt;td&gt;&lt;b&gt;사용 사례&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;복잡한 데이터 흐름, 맞춤형 로직&lt;/td&gt;
&lt;td&gt;일반적인 스트림 처리 (필터링, 변환, 집계 등)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;3254&quot; data-start=&quot;2959&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;사용 사례&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;&lt;b&gt;Processor API&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;&lt;b&gt;Streams DSL&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3081&quot; data-start=&quot;3042&quot;&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;간단한 데이터 변환&lt;/b&gt; (예: 대문자로 변환)&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;❌&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3106&quot; data-start=&quot;3082&quot;&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;필터링 및 집계&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;❌&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3147&quot; data-start=&quot;3107&quot;&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;여러 개의 토픽으로 데이터를 동적으로 라우팅&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3191&quot; data-start=&quot;3148&quot;&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;Kafka 외부 시스템과 연동 (API 호출 등)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3222&quot; data-start=&quot;3192&quot;&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;맞춤형 상태 저장 및 관리&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3254&quot; data-start=&quot;3223&quot;&gt;
&lt;td style=&quot;width: 33.4884%;&quot;&gt;&lt;b&gt;고성능 최적화가 필요한 경우&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3721%;&quot;&gt;✅&lt;/td&gt;
&lt;td style=&quot;width: 33.0233%;&quot;&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;399&quot; data-end=&quot;410&quot;&gt;&lt;b&gt;주요 개념&lt;/b&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;399&quot; data-end=&quot;410&quot;&gt;Processor&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;433&quot; data-end=&quot;570&quot;&gt;
&lt;li data-start=&quot;433&quot; data-end=&quot;490&quot;&gt;Processor&amp;lt;K, V, C&amp;gt; 인터페이스를 구현하여 특정 데이터 처리를 정의할 수 있습니다.&lt;/li&gt;
&lt;li data-start=&quot;494&quot; data-end=&quot;570&quot;&gt;process(Record&amp;lt;K, V&amp;gt; record) 메서드를 구현하여 레코드를 변환, 필터링, 상태 변경 등의 작업을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-end=&quot;410&quot; data-start=&quot;399&quot; data-ke-size=&quot;size23&quot;&gt;ProcessorContext&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;601&quot; data-end=&quot;710&quot;&gt;
&lt;li data-start=&quot;601&quot; data-end=&quot;640&quot;&gt;Processor 내부에서 사용할 수 있는 컨텍스트 객체입니다.&lt;/li&gt;
&lt;li data-start=&quot;644&quot; data-end=&quot;710&quot;&gt;메타데이터 접근, 상태 저장소(State Store) 관리, 다른 프로세서로 데이터 전달 등을 수행할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot; data-start=&quot;399&quot; data-end=&quot;410&quot;&gt;Topology&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;733&quot; data-end=&quot;858&quot;&gt;
&lt;li data-start=&quot;733&quot; data-end=&quot;784&quot;&gt;Processor API는 Topology 객체를 사용하여 데이터 흐름을 정의합니다.&lt;/li&gt;
&lt;li data-start=&quot;788&quot; data-end=&quot;858&quot;&gt;여러 개의 Processor와 State Store가 연결되어 복잡한 데이터 처리 파이프라인을 구성할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;State Store&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;884&quot; data-end=&quot;977&quot;&gt;
&lt;li data-start=&quot;884&quot; data-end=&quot;920&quot;&gt;스트림 데이터를 저장하고 활용할 수 있도록 하는 저장소입니다.&lt;/li&gt;
&lt;li data-start=&quot;924&quot; data-end=&quot;977&quot;&gt;Key-Value 형태로 데이터를 저장하며, Processor에서 읽고 쓸 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Apache Kafka</category>
      <category>API</category>
      <category>DSL</category>
      <category>Kafka</category>
      <category>processor</category>
      <category>STREAM</category>
      <category>프로세서 api</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/443</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%94%84%EB%A1%9C%EC%84%B8%EC%84%9CKafka-Processor-API%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90#entry443comment</comments>
      <pubDate>Mon, 24 Feb 2025 11:35:22 +0900</pubDate>
    </item>
    <item>
      <title>카프카 스트림즈(Streams) DSL의 기능 소개 및 예제</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88DSL-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EA%B8%B0%EB%8A%A5-%EC%98%88%EC%A0%9C</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;※ 예제 코드의 스펙은 아래와 같습니다.&lt;br /&gt;- JDK 21&lt;br /&gt;- Spring Boot 3.4.2&lt;br /&gt;- Kafka Streams 3.5.1&lt;br /&gt;- confluentinc/cp-kafka:latest(Docker Image, 2025-02-24 기준,&lt;br /&gt;sha256:e6b87a4a8ca07aadba9c04d86515a340f67cd11ca6160c9b07205f3d88dfb5f1)&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Stream(), to()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈DSL로 구현할 수 있는 가장 간단한 프로세싱은 특정 토픽(Topic)의 데이터(Record)를 다른 토픽으로 전달하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 토픽을 KStream 형태로 가져오려면 스트림즈DSL의 stream() 메서드를 사용하고(소스 프로세서) 이렇게 가져온 데이터를 다른 토픽으로 전달하려면 to() 메서드를 사용합니다.(싱크&amp;nbsp;프로세서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;아래 코드는 streams-test1 토픽의 데이터를 streams-test2 토픽으로 전달하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1739876957293&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Properties properties = new Properties();
properties.put(StreamsConfig.APPLICATION_ID_CONFIG, &quot;streams-test&quot;);
properties.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, &quot;localhost:9092&quot;);
properties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());
properties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass().getName());

StreamsBuilder streamsBuilder = new StreamsBuilder();

// KStream 형태로 데이터 조회(소스 프로세서)
KStream&amp;lt;String, String&amp;gt; testStream = streamsBuilder.stream(&quot;streams-test1&quot;);
// 데이터 확인
testStream.peek((key, value) -&amp;gt; System.out.println(&quot;Received Key: &quot; + key + &quot;, Value: &quot; + value));
// streams-test2 Topic으로 데이터 전달(싱크 프로세서)
testStream.to(&quot;streams-test2&quot;);

KafkaStreams streams = new KafkaStreams(streamsBuilder.build(), properties);
streams.start();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;streams-test1 토픽에 데이터를 넣어 확인해 보면 streams-test2 토픽에 정상적으로 전달된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2452&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgle06/btsMl9jLDE2/WagvTHzGQLHfS3jxg7dLo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgle06/btsMl9jLDE2/WagvTHzGQLHfS3jxg7dLo1/img.png&quot; data-alt=&quot;streams-test1 Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgle06/btsMl9jLDE2/WagvTHzGQLHfS3jxg7dLo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgle06%2FbtsMl9jLDE2%2FWagvTHzGQLHfS3jxg7dLo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2452&quot; height=&quot;212&quot; data-origin-width=&quot;2452&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;streams-test1 Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkReDz/btsMoiTmgcJ/xv9pje9zBcH1EgkdeDGK90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkReDz/btsMoiTmgcJ/xv9pje9zBcH1EgkdeDGK90/img.png&quot; data-alt=&quot;Console에 출력되는 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkReDz/btsMoiTmgcJ/xv9pje9zBcH1EgkdeDGK90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkReDz%2FbtsMoiTmgcJ%2Fxv9pje9zBcH1EgkdeDGK90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1684&quot; height=&quot;198&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Console에 출력되는 데이터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2814&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL20gV/btsMn6S1GDz/dvbm9Lbt62FKsY40hcFzP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL20gV/btsMn6S1GDz/dvbm9Lbt62FKsY40hcFzP1/img.png&quot; data-alt=&quot;streams-test2 Topic에 데이터 consume&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL20gV/btsMn6S1GDz/dvbm9Lbt62FKsY40hcFzP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL20gV%2FbtsMn6S1GDz%2Fdvbm9Lbt62FKsY40hcFzP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2814&quot; height=&quot;214&quot; data-origin-width=&quot;2814&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;streams-test2 Topic에 데이터 consume&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt; filter()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;filter() 메서드를 사용해 특정 조건에 맞는 데이터를&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;필러링 할 수 있습니다.(스트림 프로세서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;아래 코드는 streams-test1 토픽의 데이터 값의 길이가 5 이상인 데이터만 필터링하여 streams-test2 토픽으로 전달하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;예제입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1739877665152&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;StreamsBuilder streamsBuilder = new StreamsBuilder();

// KStream 형태로 데이터 조회(소스 프로세서)
KStream&amp;lt;String, String&amp;gt; testStream = streamsBuilder.stream(&quot;streams-test1&quot;);
// 메시지 값의 길이가 5보다 큰 경우만 필터링(스트림 프로세서)
KStream&amp;lt;String, String&amp;gt; filteredStream = testStream.filter((key, value) -&amp;gt; value.length() &amp;gt; 5);
// 데이터 확인
filteredStream.peek((key, value) -&amp;gt; System.out.println(&quot;Received Key: &quot; + key + &quot;, Value: &quot; + value));
// streams-test2 Topic으로 데이터 전달(싱크 프로세서)
filteredStream.to(&quot;streams-test2&quot;);

KafkaStreams streams = new KafkaStreams(streamsBuilder.build(), properties);
streams.start();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;streams-test1 토픽에 데이터를 넣어 확인해 보면 streams-test2 토픽에 필터링한 데이터만 정상적으로 전달된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2432&quot; data-origin-height=&quot;212&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBVy5l/btsMolJa7d8/PWtmrnv5d5ovbiBhsUwh11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBVy5l/btsMolJa7d8/PWtmrnv5d5ovbiBhsUwh11/img.png&quot; data-alt=&quot;streams-test1 Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBVy5l/btsMolJa7d8/PWtmrnv5d5ovbiBhsUwh11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBVy5l%2FbtsMolJa7d8%2FPWtmrnv5d5ovbiBhsUwh11%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2432&quot; height=&quot;212&quot; data-origin-width=&quot;2432&quot; data-origin-height=&quot;212&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;streams-test1 Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1830&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOICXE/btsMmnvhS58/FBUvvjWqSNoeRy9FHrXz9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOICXE/btsMmnvhS58/FBUvvjWqSNoeRy9FHrXz9K/img.png&quot; data-alt=&quot;Console에 출력되는 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOICXE/btsMmnvhS58/FBUvvjWqSNoeRy9FHrXz9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOICXE%2FbtsMmnvhS58%2FFBUvvjWqSNoeRy9FHrXz9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1830&quot; height=&quot;136&quot; data-origin-width=&quot;1830&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Console에 출력되는 데이터&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2806&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bS0nkA/btsMmlEbJFS/0I4EWhjTCxGIukcFkxFC40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bS0nkA/btsMmlEbJFS/0I4EWhjTCxGIukcFkxFC40/img.png&quot; data-alt=&quot;streams-test2 Topic에 데이터 consume&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bS0nkA/btsMmlEbJFS/0I4EWhjTCxGIukcFkxFC40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbS0nkA%2FbtsMmlEbJFS%2F0I4EWhjTCxGIukcFkxFC40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2806&quot; height=&quot;174&quot; data-origin-width=&quot;2806&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;streams-test2 Topic에 데이터 consume&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(apple앞에 이상한 특수문자가 들어가서 5자 이상으로 필터링되었네요;;)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt; join()&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 데이터베이스는 정적으로 저장된 데이터를 조인할 수 있지만 카프카에서는 실시간으로 들어오는 데이터를 조인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 데이터베이스에 이벤트를 저장하지 않고도 이벤트 기반 스트리밍 데이터 파이프라인을 구성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;KTable과 KStream을 join()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;아래 코드는 KTable과 KStream을 소스 프로세서로 가져와서 조인을 수행하는 스트림 프로세서를 거쳐 특정 토픽에 저장하는 싱크 프로세서의 로직입니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1740359694667&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;StreamsBuilder streamsBuilder = new StreamsBuilder();

// KTable 형태로 데이터 조회(소스 프로세서)
KTable&amp;lt;String, String&amp;gt; userProfiles = streamsBuilder.table(&quot;user-profile&quot;);
// KStream 형태로 데이터 조회(소스 프로세서)
KStream&amp;lt;String, String&amp;gt; userActions = streamsBuilder.stream(&quot;user-action&quot;);

// KStream과 KTable을 조인(스트림 프로세서)
KStream&amp;lt;String, String&amp;gt; enrichedStream = userActions.join(userProfiles,
  (action, profile) -&amp;gt; &quot;Action: &quot; + action + &quot;, Profile: &quot; + profile);

// enriched-user-actions Topic으로 데이터 전달(싱크 프로세서)
enrichedStream.to(&quot;enriched-user-action&quot;);

KafkaStreams streams = new KafkaStreams(streamsBuilder.build(), properties);
streams.start();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;user-profile, user-action &lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;토픽에 데이터를 넣어 확인해 보면 enriched-user-action 토픽에 조인한 데이터를 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3296&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MM5mh/btsMsna6SpM/mAToRrEQSE0dApnJ8oOEtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MM5mh/btsMsna6SpM/mAToRrEQSE0dApnJ8oOEtK/img.png&quot; data-alt=&quot;user-profile Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MM5mh/btsMsna6SpM/mAToRrEQSE0dApnJ8oOEtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMM5mh%2FbtsMsna6SpM%2FmAToRrEQSE0dApnJ8oOEtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3296&quot; height=&quot;170&quot; data-origin-width=&quot;3296&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user-profile Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3268&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPIutT/btsMvf9WcKF/n7xwFUkHQkOKzAAkx3USGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPIutT/btsMvf9WcKF/n7xwFUkHQkOKzAAkx3USGk/img.png&quot; data-alt=&quot;user-action Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPIutT/btsMvf9WcKF/n7xwFUkHQkOKzAAkx3USGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPIutT%2FbtsMvf9WcKF%2Fn7xwFUkHQkOKzAAkx3USGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3268&quot; height=&quot;200&quot; data-origin-width=&quot;3268&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user-action Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3748&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NcP8p/btsMtOSYY3f/tpfrMkvKXZpaHvPh598Oq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NcP8p/btsMtOSYY3f/tpfrMkvKXZpaHvPh598Oq0/img.png&quot; data-alt=&quot;enriched-user-action Topic에 데이터 consume&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NcP8p/btsMtOSYY3f/tpfrMkvKXZpaHvPh598Oq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNcP8p%2FbtsMtOSYY3f%2FtpfrMkvKXZpaHvPh598Oq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3748&quot; height=&quot;208&quot; data-origin-width=&quot;3748&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;enriched-user-action Topic에 데이터 consume&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제를 통해 메시지 키를 기반으로 데이터를 조인하고, 조인된 메시지의 키로 등록되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 KTable 토픽의 값이 바뀌게 된다면 어떻게 될까 예제를 통해 확인해 보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3302&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wa35D/btsMsM9POV9/SEAAEDKLaWT3QKIqYHHBn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wa35D/btsMsM9POV9/SEAAEDKLaWT3QKIqYHHBn0/img.png&quot; data-alt=&quot;user-profile Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wa35D/btsMsM9POV9/SEAAEDKLaWT3QKIqYHHBn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWa35D%2FbtsMsM9POV9%2FSEAAEDKLaWT3QKIqYHHBn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3302&quot; height=&quot;80&quot; data-origin-width=&quot;3302&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user-profile Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3284&quot; data-origin-height=&quot;82&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pt2ML/btsMsmJ0FWJ/MJpk4Lydr4hZrkKzPXCLtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pt2ML/btsMsmJ0FWJ/MJpk4Lydr4hZrkKzPXCLtK/img.png&quot; data-alt=&quot;user-action Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pt2ML/btsMsmJ0FWJ/MJpk4Lydr4hZrkKzPXCLtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPt2ML%2FbtsMsmJ0FWJ%2FMJpk4Lydr4hZrkKzPXCLtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3284&quot; height=&quot;82&quot; data-origin-width=&quot;3284&quot; data-origin-height=&quot;82&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user-action Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;44&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pfWFQ/btsMuMtpNlj/QSl4Gh0sYIBcCEmdrUmDlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pfWFQ/btsMuMtpNlj/QSl4Gh0sYIBcCEmdrUmDlK/img.png&quot; data-alt=&quot;enriched-user-action Topic에 데이터 consume&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pfWFQ/btsMuMtpNlj/QSl4Gh0sYIBcCEmdrUmDlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpfWFQ%2FbtsMuMtpNlj%2FQSl4Gh0sYIBcCEmdrUmDlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1724&quot; height=&quot;44&quot; data-origin-width=&quot;1724&quot; data-origin-height=&quot;44&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;enriched-user-action Topic에 데이터 consume&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 데이터가 조인된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;GlobalKTable과&lt;span&gt;&amp;nbsp;&lt;/span&gt;KStream을 join()&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;user-profile, user-action 토픽은 &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90#GlobalKTable-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;코파티셔닝&lt;/a&gt;이 되어 있으므로 조인이 가능했지만 &lt;u&gt;만약 코파티셔닝이 되어있지 않은 토픽을 조인해야 할 때는 &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90#GlobalKTable-1&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;리파티셔닝&lt;/a&gt;을 수행한 이후 코파티셔닝 된 상태로 조인하거나 GlobalKTable을 사용하여 조인해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 코파티셔닝이 되지 않은 토픽들을 생성해 GlobalKTable과 KStream을 소스 프로세서로 가져와서 조인을 수행하는 스트림 프로세서를 거쳐 특정 토픽에 저장하는 싱크 프로세서의 로직을 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2498&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJ0jBC/btsMug9BUJ2/MV5DKdUolC01pl18Xc0nC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJ0jBC/btsMug9BUJ2/MV5DKdUolC01pl18Xc0nC1/img.png&quot; data-alt=&quot;partition의 개수가 다른 topic 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJ0jBC/btsMug9BUJ2/MV5DKdUolC01pl18Xc0nC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJ0jBC%2FbtsMug9BUJ2%2FMV5DKdUolC01pl18Xc0nC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2498&quot; height=&quot;160&quot; data-origin-width=&quot;2498&quot; data-origin-height=&quot;160&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;partition의 개수가 다른 topic 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1740362427079&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;StreamsBuilder streamsBuilder = new StreamsBuilder();
    
// GlobalKTable 형태로 데이터 조회(소스 프로세서)
GlobalKTable&amp;lt;String, String&amp;gt; userProfiles = streamsBuilder.globalTable(&quot;user-profile-v2&quot;);
// KStream 형태로 데이터 조회(소스 프로세서)
KStream&amp;lt;String, String&amp;gt; userActions = streamsBuilder.stream(&quot;user-action-v2&quot;);
// KStream과 KTable을 조인(스트림 프로세서)
KStream&amp;lt;String, String&amp;gt; enrichedStream = userActions.join(userProfiles,
  (key, value) -&amp;gt; key, // 메시지 키와 매칭
  (action, profile) -&amp;gt; &quot;Action: &quot; + action + &quot;, Profile: &quot; + profile);

// enriched-user-actions-v2 Topic으로 데이터 전달(싱크 프로세서)
enrichedStream.to(&quot;enriched-user-action-v2&quot;);

KafkaStreams streams = new KafkaStreams(streamsBuilder.build(), properties);
streams.start();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;user-profile-v2, user-action-v2&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;토픽에 데이터를 넣어 확인해 보면 enriched-user-action-v2 토픽에 조인한 데이터를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3356&quot; data-origin-height=&quot;202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjKnBT/btsMsV6uTCX/GEtKawWuEGOnkxHmpT0pyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjKnBT/btsMsV6uTCX/GEtKawWuEGOnkxHmpT0pyK/img.png&quot; data-alt=&quot;user-profile-v2 Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjKnBT/btsMsV6uTCX/GEtKawWuEGOnkxHmpT0pyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjKnBT%2FbtsMsV6uTCX%2FGEtKawWuEGOnkxHmpT0pyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3356&quot; height=&quot;202&quot; data-origin-width=&quot;3356&quot; data-origin-height=&quot;202&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user-profile-v2 Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3326&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lpxYX/btsMsTOnhhF/pl28cqPMTp361fBd6TJVB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lpxYX/btsMsTOnhhF/pl28cqPMTp361fBd6TJVB0/img.png&quot; data-alt=&quot;user-action-v2 Topic에 데이터 produce&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lpxYX/btsMsTOnhhF/pl28cqPMTp361fBd6TJVB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlpxYX%2FbtsMsTOnhhF%2Fpl28cqPMTp361fBd6TJVB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3326&quot; height=&quot;204&quot; data-origin-width=&quot;3326&quot; data-origin-height=&quot;204&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;user-action-v2 Topic에 데이터 produce&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3810&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTMQqY/btsMuTzhlum/8zmkHGAkBNSXVnmEPW5vDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTMQqY/btsMuTzhlum/8zmkHGAkBNSXVnmEPW5vDK/img.png&quot; data-alt=&quot;enriched-user-action-v2 Topic에 데이터 consume&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTMQqY/btsMuTzhlum/8zmkHGAkBNSXVnmEPW5vDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTMQqY%2FbtsMuTzhlum%2F8zmkHGAkBNSXVnmEPW5vDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3810&quot; height=&quot;206&quot; data-origin-width=&quot;3810&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;enriched-user-action-v2 Topic에 데이터 consume&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과물을 보면 KTable과 크게 다르지 않아 보이지만 &lt;u&gt;GlobalKTable로 선언한 토픽은 토픽에 존재하는 모든 데이터를 태스크마다 저장하고 조인 처리를 수행하고, KStream의 메시지 키뿐만 아니라 메시지 값을 기준으로도 매칭하여 조인할 수 있다는 점이 다릅니다.&lt;/u&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈DSL에서는 각 프로세서 역할을 하는 메서드들을 제공하기 때문에 메서드를 찾아서 적재적소에 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈DSL에서 사용 가능한 모든 프로세서와 사용 방법은 &lt;a href=&quot;https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;공식 가이드 문서&lt;/a&gt;에서 확인할 수 있습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1740362869169&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apache Kafka&quot; data-og-description=&quot;Apache Kafka: A Distributed Streaming Platform.&quot; data-og-host=&quot;kafka.apache.org&quot; data-og-source-url=&quot;https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html&quot; data-og-url=&quot;https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hOjcR/hyYjna5mjN/sGBP9XwClyKrmgOJFZ7pSk/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200&quot;&gt;&lt;a href=&quot;https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://kafka.apache.org/documentation/streams/developer-guide/dsl-api.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hOjcR/hyYjna5mjN/sGBP9XwClyKrmgOJFZ7pSk/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apache Kafka&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Apache Kafka: A Distributed Streaming Platform.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;kafka.apache.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Apache Kafka</category>
      <category> apache</category>
      <category>DSL</category>
      <category>Filter</category>
      <category>Join</category>
      <category>kafak</category>
      <category>KStream</category>
      <category>KTable</category>
      <category>Streams</category>
      <category>to</category>
      <category>스트림즈dsl</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/442</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88DSL-%EA%B8%B0%EB%B3%B8%EC%A0%81%EC%9D%B8-%EA%B8%B0%EB%8A%A5-%EC%98%88%EC%A0%9C#entry442comment</comments>
      <pubDate>Mon, 24 Feb 2025 11:08:59 +0900</pubDate>
    </item>
    <item>
      <title>Spring Security의 Role(역할)과 Authority(권한)의 차이</title>
      <link>https://devbksheen.tistory.com/entry/Spring-Security%EC%9D%98-Role%EC%97%AD%ED%95%A0%EA%B3%BC-Authority%EA%B6%8C%ED%95%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4</link>
      <description>&lt;h2 data-end=&quot;541&quot; data-start=&quot;519&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Role(역할)이란?&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Role(역할)은 여러 개의 Authority(권한)을 묶어둔 개념&lt;/b&gt;입니다.&lt;br /&gt;즉, ROLE_ADMIN은 &quot;READ_POST&quot;, &quot;WRITE_POST&quot;, &quot;DELETE_POST&quot; 등의 권한을 가질 수 있습니다.&lt;/p&gt;
&lt;h3 data-end=&quot;691&quot; data-start=&quot;673&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Role 예시&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1740119036508&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hasRole(&quot;ADMIN&quot;)   // 관리자 역할
hasRole(&quot;USER&quot;)    // 일반 사용자 역할&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Spring Security에서는&amp;nbsp;Role을 내부적으로 &quot;ROLE_&quot; prefix를 붙여 관리&lt;br /&gt;예를 들어 hasRole(&quot;ADMIN&quot;)은 내부적으로 &quot;ROLE_ADMIN&quot;을 의미&lt;/blockquote&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-end=&quot;895&quot; data-start=&quot;882&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1006&quot; data-start=&quot;896&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;928&quot; data-start=&quot;896&quot;&gt;&lt;b&gt;사용자 그룹(역할) 단위로 권한을 부여&lt;/b&gt; 가능&lt;/li&gt;
&lt;li data-end=&quot;972&quot; data-start=&quot;929&quot;&gt;하나의 Role이 여러 개의 Authority를 포함할 수 있음&lt;/li&gt;
&lt;li data-end=&quot;1006&quot; data-start=&quot;973&quot;&gt;Role 기반 접근 제어가 더 단순하고 이해하기 쉬움&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot; data-start=&quot;71&quot; data-end=&quot;98&quot;&gt;&lt;b&gt;Authority(권한)란?&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: start;&quot; data-start=&quot;99&quot; data-end=&quot;219&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Authority(권한)은 사용자가 수행할 수 있는 개별적인 권한(행동 단위)을 의미&lt;/b&gt;합니다.&lt;br /&gt;예를 들어,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&quot;게시글 읽기&quot;, &quot;게시글 작성&quot;, &quot;게시글 삭제&quot;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등의 권한을 설정할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-start=&quot;221&quot; data-end=&quot;244&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Authority 예시&lt;/b&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1740119389626&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;hasAuthority(&quot;READ_POST&quot;) // 게시글 읽기 권한 
hasAuthority(&quot;WRITE_POST&quot;) // 게시글 작성 권한 
hasAuthority(&quot;DELETE_POST&quot;) // 게시글 삭제 권한&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-start=&quot;381&quot; data-end=&quot;394&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot; data-start=&quot;395&quot; data-end=&quot;512&quot;&gt;
&lt;li data-start=&quot;395&quot; data-end=&quot;432&quot;&gt;더&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;세부적인 권한 관리가 가능&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(세밀한 접근 제어 가능)&lt;/li&gt;
&lt;li data-start=&quot;433&quot; data-end=&quot;476&quot;&gt;하나의 Role에 여러 개의 Authority를 포함할 수 있음&lt;/li&gt;
&lt;li data-start=&quot;477&quot; data-end=&quot;512&quot;&gt;권한을 통해 &lt;b&gt;특정 기능(행동)&lt;/b&gt;에 대한 접근을 제어&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-end=&quot;1045&quot; data-start=&quot;1013&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;b&gt;Role과&amp;nbsp;&lt;/b&gt;Authority 차이 정리&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1408&quot; data-start=&quot;1046&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 12.5581%;&quot;&gt;&lt;b&gt;항목&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.0234%;&quot;&gt;&lt;b&gt;Role(역할)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.2558%;&quot;&gt;&lt;b&gt;Authority(권한)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1170&quot; data-start=&quot;1123&quot;&gt;
&lt;td style=&quot;width: 12.5581%;&quot;&gt;&lt;b&gt;개념&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.0234%;&quot;&gt;여러 개의 권한을 묶은 역할&lt;/td&gt;
&lt;td style=&quot;width: 28.2558%;&quot;&gt;특정 기능(행동)에 대한 권한&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1235&quot; data-start=&quot;1171&quot;&gt;
&lt;td style=&quot;width: 12.5581%;&quot;&gt;&lt;b&gt;사용 예시&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.0234%;&quot;&gt;hasRole(&quot;ADMIN&quot;)&lt;/td&gt;
&lt;td style=&quot;width: 28.2558%;&quot;&gt;hasAuthority(&quot;READ_POST&quot;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1282&quot; data-start=&quot;1236&quot;&gt;
&lt;td style=&quot;width: 12.5581%;&quot;&gt;&lt;b&gt;접근 방식&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.0234%;&quot;&gt;사용자 그룹(역할) 단위 관리&lt;/td&gt;
&lt;td style=&quot;width: 28.2558%;&quot;&gt;세부적인 기능별 관리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1324&quot; data-start=&quot;1283&quot;&gt;
&lt;td style=&quot;width: 12.5581%;&quot;&gt;&lt;b&gt;유연성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.0234%;&quot;&gt;역할별 권한 일괄 관리 가능&lt;/td&gt;
&lt;td style=&quot;width: 28.2558%;&quot;&gt;세밀한 제어 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1408&quot; data-start=&quot;1325&quot;&gt;
&lt;td style=&quot;width: 12.5581%;&quot;&gt;&lt;b&gt;Spring 내부 처리&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 28.0234%;&quot;&gt;&quot;ROLE_ADMIN&quot; (Spring이 &quot;ROLE_&quot; prefix 추가)&lt;/td&gt;
&lt;td style=&quot;width: 28.2558%;&quot;&gt;&quot;READ_POST&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;즉, Role은 큰 개념이고, Authority는 개별적인 세부 권한을 부여할 때 사용합니다.&lt;/b&gt;&lt;br /&gt;&lt;b&gt;보통 Role을 기본으로 사용하고, 세부적인 권한이 필요할 때 Authority를 추가하는 방식이 가장 좋습니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>Spring</category>
      <category>Authority</category>
      <category>Role</category>
      <category>Security</category>
      <category>Spring</category>
      <category>Token</category>
      <category>권한</category>
      <category>역할</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/441</guid>
      <comments>https://devbksheen.tistory.com/entry/Spring-Security%EC%9D%98-Role%EC%97%AD%ED%95%A0%EA%B3%BC-Authority%EA%B6%8C%ED%95%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4#entry441comment</comments>
      <pubDate>Fri, 21 Feb 2025 15:30:09 +0900</pubDate>
    </item>
    <item>
      <title>Session 기반 인증과 Token 기반 인증의 차이점과 장단점</title>
      <link>https://devbksheen.tistory.com/entry/Session-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EA%B3%BC-Token-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EA%B3%BC-%EA%B0%81%EA%B0%81%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Session 기반 인증&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버 측(Session Storage)에서 클라이언트의 인증 상태를 저장하고 관리하는 방식&lt;/b&gt;입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트가 로그인하면 서버가 Session ID를 생성하고 이를 클라이언트에게 쿠키로 전달&lt;/li&gt;
&lt;li&gt;이후 클라이언트가 요청할 때마다 해당 Session ID를 포함하여 서버에 전송&lt;/li&gt;
&lt;li&gt;서버는 Session Storage에서 Session ID를 조회하여 인증 및 권한을 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Session 인증 흐름&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자가 로그인 요청 (ID/PW)&lt;/li&gt;
&lt;li&gt;서버가 사용자 인증 후, 세션을 생성하고 Session ID를 응답 쿠키로 설정&lt;/li&gt;
&lt;li&gt;클라이언트가 이후 요청 시, Session ID를 포함한 쿠키를 서버에 전달&lt;/li&gt;
&lt;li&gt;서버는 저장된 Session ID를 조회하여 사용자 인증 및 권한을 검증&lt;/li&gt;
&lt;li&gt;로그아웃하면 세션을 삭제&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;✅ 장점&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;b&gt;보안성&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션이 서버에서 관리되므로 &lt;b&gt;클라이언트가 직접 조작할 수 없음&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;토큰보다 상대적으로 &lt;b&gt;탈취 위험이 낮음&lt;/b&gt; (쿠키의 HttpOnly 설정 가능)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;세션 만료 및 강제 로그아웃 가능&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 세션을 제거하면, 사용자는 더 이상 인증되지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;적은 데이터 전송&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Session ID만 전송하면 되므로, 토큰보다 네트워크 사용량이 적음&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;❌&lt;span&gt; &lt;/span&gt;단점&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;서버 메모리 사용 증가&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 사용자별로 세션을 저장해야 하므로, &lt;b&gt;사용자가 많아질수록 메모리 부담 증가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;확장성(Scalability)이 낮아짐 (수평 확장이 어려움)&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;로드 밸런싱이 어려움&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버가 세션을 저장하므로, 여러 서버를 운영할 경우 &lt;b&gt;Sticky Session&lt;/b&gt; 또는 &lt;b&gt;Redis 같은 외부 저장소(Session Storage)&lt;/b&gt;가 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CSRF 공격에 취약&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세션이 Cookie를 사용하기 때문에, CSRF 보호를 위한 추가적인 조치(CSRF Token 등)가 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Token 기반 인증 (JWT)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버에서 인증 정보를 포함한 토큰을 발급하고, 클라이언트가 이를 저장하여 요청 시마다 포함하는 방식&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클라이언트가 로그인하면 서버는 &lt;b&gt;JWT(Json Web Token)&lt;/b&gt;을 생성하여 클라이언트에게 반환&lt;/li&gt;
&lt;li&gt;이후 클라이언트는 요청할 때마다 &lt;b&gt;JWT를 HTTP Header에 포함&lt;/b&gt;하여 전송&lt;/li&gt;
&lt;li&gt;서버는 JWT를 검증하여 사용자 인증 및 권한 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Token 인증 흐름 (JWT 예제)&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;사용자가 로그인 요청 (ID/PW)&lt;/li&gt;
&lt;li&gt;서버는 사용자 인증 후, &lt;b&gt;JWT 토큰&lt;/b&gt;을 생성하여 클라이언트에게 응답&lt;/li&gt;
&lt;li&gt;클라이언트는 JWT를 &lt;b&gt;LocalStorage 또는 Cookie&lt;/b&gt;에 저장&lt;/li&gt;
&lt;li&gt;이후 요청 시, Authorization: Bearer &amp;lt;JWT&amp;gt; 형식으로 HTTP Header에 포함&lt;/li&gt;
&lt;li&gt;서버는 JWT를 검증하여 인증 및 권한을 확인&lt;/li&gt;
&lt;li&gt;로그아웃 시 클라이언트가 토큰을 삭제 (단, 서버에서 강제 만료는 어렵다)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;✅&amp;nbsp;장점&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;서버 확장성 (Scalability) 높음&lt;/b&gt;&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 세션을 저장하지 않으므로, 서버가 늘어나도 관리가 쉬움&lt;/li&gt;
&lt;li&gt;로드 밸런싱이 필요할 때 &lt;b&gt;Stateless한 방식&lt;/b&gt;이므로 모든 서버가 동일하게 처리 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;OAuth 2.0, Single Sign-On (SSO) 등과 연계 가능&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT는 여러 서비스에서 인증을 공유하는 데 유리&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;클라이언트에서 정보 확인 가능&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT에는 사용자 정보(예: user_id, role)가 포함될 수 있어, 일부 정보를 클라이언트에서 확인 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;CSRF에 상대적으로 안전&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT는 주로 Authorization Header로 전송하므로 CSRF 공격에 덜 취약&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;❌&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;단점&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;토큰 탈취 시 보안 위험 증가&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT는 &lt;b&gt;자체적으로 무효화할 수 없음&lt;/b&gt; (세션과 달리 서버에서 일괄 삭제 불가)&lt;/li&gt;
&lt;li&gt;토큰이 유출되면 &lt;b&gt;유효기간 만료 전까지는 공격자가 계속 사용할 수 있음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Payload 크기 문제&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT는 보통 Header.Payload.Signature로 이루어지며, Payload에 많은 정보를 담으면 &lt;b&gt;전송 데이터가 커질 수 있음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;토큰 재발급(Refresh Token) 관리 필요&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;JWT가 만료되면 새로 로그인해야 하므로, &lt;b&gt;Refresh Token을 사용하여 재발급 시스템을 구축해야 함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;  Session 기반 vs Token(JWT) 기반 비교&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;유형&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;Session 기반 인증&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;Token (JWT) 기반 인증&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;저장 위치&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;서버 (Session Storage)&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;클라이언트 (LocalStorage, Cookie)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;서버 확장성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;낮음 (서버에서 관리 필요)&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;높음 (Stateless)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;보안성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;세션 관리로 안전 (HttpOnly 가능)&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;토큰 탈취 시 위험&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;CSRF 취약성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;있음 (CSRF 방어 필요)&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;적음 (Authorization Header 사용)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;토큰 무효화&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;서버에서 즉시 삭제 가능&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;불가능 (만료될 때까지 사용 가능)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;데이터 전송량&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;Session ID만 전송 (작음)&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;JWT 크기가 클 수 있음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;로드 밸런싱&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;어려움 (Sticky Session 필요)&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;쉬움 (Stateless)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 23.0233%;&quot;&gt;&lt;b&gt;Single Sign-On (SSO)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.7442%;&quot;&gt;어렵다&lt;/td&gt;
&lt;td style=&quot;width: 40.1163%;&quot;&gt;가능 (OAuth 2.0 활용)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;어떤 방식을 선택해야 할까&lt;b&gt;&lt;span&gt;❓&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Session 기반 인증이 적합한 경우&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;일반적인 웹 애플리케이션&lt;/b&gt; (예: 기업 내부 시스템, 관리 페이지)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버 확장성이 크게 중요하지 않은 경우&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;보안이 중요하며, 즉시 세션을 만료&lt;b&gt;(즉시 로그아웃)&lt;/b&gt;해야 하는 경우&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Token(JWT) 기반 인증이 적합한 경우&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;대규모 서비스 또는&amp;nbsp;&lt;/b&gt;&lt;/b&gt;마이크로서비스 아키텍처(MSA)&amp;nbsp;환경&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;모바일 앱 + 웹앱에서 동일한 인증 시스템을 사용해야 하는 경우&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;OAuth 2.0 또는 SSO(싱글 사인온)가 필요한 경우&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ETC</category>
      <category>Session</category>
      <category>Token</category>
      <category>인증</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/440</guid>
      <comments>https://devbksheen.tistory.com/entry/Session-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EA%B3%BC-Token-%EA%B8%B0%EB%B0%98-%EC%9D%B8%EC%A6%9D%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90%EA%B3%BC-%EA%B0%81%EA%B0%81%EC%9D%98-%EC%9E%A5%EB%8B%A8%EC%A0%90#entry440comment</comments>
      <pubDate>Fri, 21 Feb 2025 15:18:43 +0900</pubDate>
    </item>
    <item>
      <title>카프카 스트림즈(Streams) DSL의 주요 옵션</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88DSL%EC%9D%98-%EC%A3%BC%EC%9A%94-%EC%98%B5%EC%85%98</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;스트림즈DSL 주요 옵션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈DSL 애플리케이션을 실행할 때 설정해야 하는 필수 옵션과 선택 옵션이 있는데, 선택 옵션을 설정하지 않은 경우 기본값이 적용되기 때문에 주의해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;필수 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bootstrap.servers: 브로커의 호스트 이름과 포트를 1개 이상 설정&lt;/li&gt;
&lt;li&gt;application.id: 스트림즈 애플리케이션의 구분을 위한 고유한 아이디 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;선택 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;default.key.serde: 레코드의 메시지 키 직렬화, 역직렬화 클래스 설정 (default: Serdes.ByteArray().getClass().getName())&lt;/li&gt;
&lt;li&gt;default.value.serde: 레코드의 메시지 값 직렬화, 역직렬화 클래스 설정 (default: Serdes.ByteArray().getClass().getName())&lt;/li&gt;
&lt;li&gt;num.stream.threads: 스트림 프로세싱 실행 시 실행될 스레드 개수 설정 (default: 1)&lt;/li&gt;
&lt;li&gt;state.dir: rocksDB 저장소가 위치할 디렉토리 설정(default: /tmp/kafka-streams)&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ rocksDB란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rocksDB란 페이스북이 개발한 고성능의 key-value DB로서 카프카 스트림즈가 상태기반 데이터 처리를 할 때 로컬 저장소로 사용됩니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더욱 사제한 옵션은 &lt;a href=&quot;https://kafka.apache.org/documentation/#streamsconfigs&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kafka.apache.org/documentation/#streamsconfigs&lt;/a&gt;에서 확인이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>DSL</category>
      <category>Kafka</category>
      <category>option</category>
      <category>Streams</category>
      <category>옵션</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/439</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88DSL%EC%9D%98-%EC%A3%BC%EC%9A%94-%EC%98%B5%EC%85%98#entry439comment</comments>
      <pubDate>Fri, 7 Feb 2025 14:03:32 +0900</pubDate>
    </item>
    <item>
      <title>카프카 스트림즈(Streams) DSL의 기본 개념</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;스트림즈DSL(Streams Domain Specific Language)이란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈DSL는 아파치 카프카(Apache Kafka)의 스트림 처리 라이브러리인 카프카 스트림즈(Kafka Streams)에서 제공하는 고수준 API입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림 데이터를 손쉽게 처리하고 변환할 수 있도록 설계된 함수형 프로그래밍 스타일의 API로, 복잡한 스트림 처리 로직을 간결하고 직관적으로 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈 DSL에는 레코드의 흐름을 추상화한 3가지 개념인 KStream, KTable, GlobalKTable이 존재합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 3가지 개념은 컨슈머, 프로듀서, 프로세서 API에서는 사용되지 않고 스트림즈DSL에서만 사용되는 개념입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;KStream&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KStream은 레코드의 흐름을 표현한 것으로 메시지 키와 메시지 값으로 구성되어 있는데, 데이터를 조회하면 토픽에 존재하는(또는 KStream에 존재하는) 모든 레코드가 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머로 토픽을 구독하는 것과 동일한 선상에서 사용하는 것이라고 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOFBf/btsMaMHtzOh/AGQqq3AYAlQSjoXwHa34pK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOFBf/btsMaMHtzOh/AGQqq3AYAlQSjoXwHa34pK/img.png&quot; data-alt=&quot;KStream 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOFBf/btsMaMHtzOh/AGQqq3AYAlQSjoXwHa34pK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOFBf%2FbtsMaMHtzOh%2FAGQqq3AYAlQSjoXwHa34pK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;508&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;1244&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;KStream 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;KTable&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KTable은 KStream과 다르게 메시지 키를 기준으로 묶어서 사용하기 때문에 KTable은 유니크한 메시지 키를 기준으로 가장 최신의 레코드를 조회합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로 데이터를 적재할 때 동일한 메시지 키가 있을 경우 데이터가 업데이트 된다고 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0y2tS/btsMbp55sGe/itu4PFPEuCWzGkqh56kOv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0y2tS/btsMbp55sGe/itu4PFPEuCWzGkqh56kOv1/img.png&quot; data-alt=&quot;KTable 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0y2tS/btsMbp55sGe/itu4PFPEuCWzGkqh56kOv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0y2tS%2FbtsMbp55sGe%2Fitu4PFPEuCWzGkqh56kOv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;508&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;1244&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;KTable 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;GlobalKTable&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GlobalKTable은 KTable과 동일하게 메시지 키를 기준으로 묶어서 사용하지만, KTable로 선언된 토픽은 1개 파티션이 1개 태스크에 할당되어 사용되고, GlobalKTable로 선언된 포틱은 모든 파티션 데이터가 각 태스크에 할당되어 사용된다는 차이점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KStream과 KTable 데이터를 조인(join)하기 위해서는 반드시 코파티셔닝(co-partitioning)되어 있어야 하고, 만약 코파티셔닝이&amp;nbsp;되어있지 않다면 리파티셔닝(repartitioning)하는 과정을 거쳐 코파티셔닝을 진행 후 조인을 해야 합니다.&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 코파티셔닝(co-partitioning)이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조인을 하는 2개 데이터의 파티션 개수가 동일하고 파티셔닝 전략(partitioning stategy)을 동일하게 맞추는 작업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 리파티셔닝(repartitioning)이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 토픽에 새로운 메시지 키를 가지도록 재배열하는 과정&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;1032&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KqZcT/btsL9Kc0Zry/nydokwLM0TDkNL9rBkcSwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KqZcT/btsL9Kc0Zry/nydokwLM0TDkNL9rBkcSwK/img.png&quot; data-alt=&quot;코파티셔닝이 되어있는 KSteam과 KTable&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KqZcT/btsL9Kc0Zry/nydokwLM0TDkNL9rBkcSwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKqZcT%2FbtsL9Kc0Zry%2FnydokwLM0TDkNL9rBkcSwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;457&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;1032&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코파티셔닝이 되어있는 KSteam과 KTable&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;1192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dYvNs5/btsMaCd8wt5/M4EzruCH3TR4NVDNROaDkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dYvNs5/btsMaCd8wt5/M4EzruCH3TR4NVDNROaDkK/img.png&quot; data-alt=&quot;코파티셔닝이 되어있지 않은 KSteam과 KTable&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dYvNs5/btsMaCd8wt5/M4EzruCH3TR4NVDNROaDkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdYvNs5%2FbtsMaCd8wt5%2FM4EzruCH3TR4NVDNROaDkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;443&quot; data-origin-width=&quot;1344&quot; data-origin-height=&quot;1192&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코파티셔닝이 되어있지 않은 KSteam과 KTable&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;826&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5qoUh/btsMafDBCRy/yQWQ1cLYgDYhKxtwYap1zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5qoUh/btsMafDBCRy/yQWQ1cLYgDYhKxtwYap1zK/img.png&quot; data-alt=&quot;리파티셔닝 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5qoUh/btsMafDBCRy/yQWQ1cLYgDYhKxtwYap1zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5qoUh%2FbtsMafDBCRy%2FyQWQ1cLYgDYhKxtwYap1zK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;826&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;826&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리파티셔닝 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 코파티셔닝 되지 않은 KStream과 KTable을 조인해서 사용하고 싶다면 KTable을 GlobalKTable로 선언하여 사용하면 데이터 조인을 쉽게 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, GlobalKTable을 사용하면 각 태스크마다 모든 데이터를 저장하고 사용하기 때문에 스트림즈 애플리케이션의 로컬 스토리지의 사용량이 증가하고 네트워크, 브로커에 부하가 생기므로 &lt;u&gt;되도록이면 작은 용량의 데이터일 경우에만 사용하고 많은 양의 데이터를 가진 토픽으로 조인할 경우에는 리파티셔닝을 통해 KTable을 사용하는 것을 권장합니다.&lt;/u&gt;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>DSL</category>
      <category>GlobalKTable</category>
      <category>Kafka</category>
      <category>KStream</category>
      <category>KTable</category>
      <category>Streams</category>
      <category>리파티셔닝</category>
      <category>코파티셔닝</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/438</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90#entry438comment</comments>
      <pubDate>Fri, 7 Feb 2025 13:45:03 +0900</pubDate>
    </item>
    <item>
      <title>카프카 스트림즈(Kafka Streams)의 기본 개념</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90</link>
      <description>&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;카프카 스트림즈(Kafka Streams)란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 스트림즈는 토픽(Topic)에 적재된 데이터를 상태기반(Stateful) 또는 비상태기반(Stateless)으로 실시간 변환하여 다른 토픽에 적재하는 라이브러리입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈는 카프카에서 공식적으로 지원하고 카프카 버전이 오를 때마다 스트림즈 자바 라이브러리도 같이 릴리즈 되기 때문에 자바 기반 스트림즈 애플리케이션은 카프카 클러스터(Cluster)와 완벽하게 호환되어 편리한 기능을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;스트림즈는 장애가 발생하더라도 정확히 한 번만 데이터가 처리될 수 있도록 장애 허용 시스템을 가지고 있어서 안정성이 뛰어나고&lt;/u&gt; 자바 라이브러리로 구현하는 &lt;u&gt;스트림즈 애플리케이션은 JVM 위에서 하나의 프로세스로 진행되기 때문에 분산 시스템이나 스케줄링 프로그램은 필요하지 않습니다.&lt;/u&gt;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;카프카 스트림즈를 사용하는 이유&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;컨슈머(Consumer)와 프로듀서(Producer)를 조합하여 스트림즈가 제공하는 기능을 비슷하게 구현할 수 있지만 단 한 번의 데이터 처리, 장애 허용 시스템 등의 특징들은 완벽하게 구현하기는 어렵습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 스트림즈가 제공하지 못하는 기능을 구현할 때는 컨슈머와 프로듀서를 조합하여 구현하면 좋습니다.&lt;br /&gt;(카프카 클러스터가 서로 다른 경우 스트림즈는 지원되지 않습니다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 스트림즈는 필요하다면 프로세서 API를 사용하여 기능을 확장할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;카프카 스트림즈의 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈 애플리케이션은 내부적으로 스레드를 1개 이상 생성할 수 있으며, 스레드는 데이터 처리 최소 단위인 태스크(Task)를 1개 이상 가지게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;884&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzCEJC/btsL9qxboxk/nXhj7QlovM1DhEF1SdKLg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzCEJC/btsL9qxboxk/nXhj7QlovM1DhEF1SdKLg0/img.png&quot; data-alt=&quot;스트림즈 애플리케이션 내부 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzCEJC/btsL9qxboxk/nXhj7QlovM1DhEF1SdKLg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzCEJC%2FbtsL9qxboxk%2FnXhj7QlovM1DhEF1SdKLg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;408&quot; data-origin-width=&quot;1084&quot; data-origin-height=&quot;884&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스트림즈 애플리케이션 내부 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 3개의 파티션으로 이루어진 토픽을 처리하는 스트림즈 애플리케이션을 실행하면 내부에 3개의 태스크가 생기게 되는데 이는 컨슈머의 병렬처리를 위해 컨슈머 그룹으로 이루어진 컨슈머 스레드를 여러 개 실행하는 것과 비슷하다고 볼 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 컨슈머와 마찬가지로 파티션과 스트림즈 스레드 개수를 늘림으로써 데이터 처리량을 늘릴 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1124&quot; data-origin-height=&quot;1244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnqNrd/btsL9c6ZVjf/lyW0FyeQVarZYKi1rKHUBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnqNrd/btsL9c6ZVjf/lyW0FyeQVarZYKi1rKHUBK/img.png&quot; data-alt=&quot;스트림즈 애플리케이션의 병렬 스트림 처리 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnqNrd/btsL9c6ZVjf/lyW0FyeQVarZYKi1rKHUBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnqNrd%2FbtsL9c6ZVjf%2FlyW0FyeQVarZYKi1rKHUBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;553&quot; data-origin-width=&quot;1124&quot; data-origin-height=&quot;1244&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;스트림즈 애플리케이션의 병렬 스트림 처리 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 운영 환경에서는 2개 이상의 서버로 운영하여 장애가 발생하더라도 안정적으로 스트림 처리를 할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;토폴로지(Topology)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 스트림즈의 구조와 사용 방법을 알기 위해서는 우선 포톨로지(Topology)와 관련된 개념을 익혀야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포톨로지란 2개 이상의 노드들과 선으로 이루어진 집합을 뜻합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종류로는 링형(ring), 트리형(tree), 성형(start) 등이 존재하는데 스트림즈에서 사용하는 토폴로지는 트리 형태와 유사합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bArv7A/btsL6WSzXFn/lMVKMoJUWIE4v8bhofH5hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bArv7A/btsL6WSzXFn/lMVKMoJUWIE4v8bhofH5hk/img.png&quot; data-origin-width=&quot;736&quot; data-origin-height=&quot;524&quot; data-is-animation=&quot;false&quot; width=&quot;300&quot; style=&quot;width: 43.5789%; margin-right: 10px;&quot; data-widthpercent=&quot;44.62&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bArv7A/btsL6WSzXFn/lMVKMoJUWIE4v8bhofH5hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbArv7A%2FbtsL6WSzXFn%2FlMVKMoJUWIE4v8bhofH5hk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;736&quot; height=&quot;524&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGJNAk/btsL7ABsU54/ppFkF9j9wqdtfUkU6z6HCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGJNAk/btsL7ABsU54/ppFkF9j9wqdtfUkU6z6HCk/img.png&quot; data-origin-width=&quot;456&quot; data-origin-height=&quot;644&quot; data-is-animation=&quot;false&quot; width=&quot;200&quot; style=&quot;width: 21.9689%; margin-right: 10px;&quot; data-widthpercent=&quot;22.49&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGJNAk/btsL7ABsU54/ppFkF9j9wqdtfUkU6z6HCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGJNAk%2FbtsL7ABsU54%2FppFkF9j9wqdtfUkU6z6HCk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;456&quot; height=&quot;644&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qsHJG/btsL9csEneC/Pq3TflJKTj07SYW2MYxty1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qsHJG/btsL9csEneC/Pq3TflJKTj07SYW2MYxty1/img.png&quot; data-origin-width=&quot;584&quot; data-origin-height=&quot;564&quot; data-is-animation=&quot;false&quot; style=&quot;width: 32.1265%;&quot; data-widthpercent=&quot;32.89&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qsHJG/btsL9csEneC/Pq3TflJKTj07SYW2MYxty1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqsHJG%2FbtsL9csEneC%2FPq3TflJKTj07SYW2MYxty1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;584&quot; height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
  &lt;figcaption&gt;링형 토폴로지 / 트리형 토폴로지 / 성형 토폴로지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 스트림즈에서는 포톨로지를 이루는 노드를 하나의 프로세서(Processor)라고 부르고 노드와 노드를 이은 선을 스트림(Stream)이라고 부르는데 이 스트림은 토픽의 레코드와 동일합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세서에는 소스 프로세서, 스트림 프로세서, 싱크 프로세서가 존재합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;소스 프로세서: 데이터를 처리하기 위해 최초로 선언해야 하는 노드로, 하나 이상의 토픽에서 데이터를 가져오는 역할&lt;/li&gt;
&lt;li&gt;스트림 프로세서: 다른 프로세서가 반환한 데이터를 처리하는 역할&lt;/li&gt;
&lt;li&gt;싱크 프로세서: 데이터를 특정 카프카 토픽으로 저장하는 역할, 스트림즈로 처리된 데이터의 최종 종착지&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;1288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvBntw/btsL7TnhWHK/hBmMdSUBjW2e8u6X0qxXhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvBntw/btsL7TnhWHK/hBmMdSUBjW2e8u6X0qxXhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvBntw/btsL7TnhWHK/hBmMdSUBjW2e8u6X0qxXhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvBntw%2FbtsL7TnhWHK%2FhBmMdSUBjW2e8u6X0qxXhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;603&quot; data-origin-width=&quot;1068&quot; data-origin-height=&quot;1288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 스트림즈를 개발할 때는 스트림즈 DSL(Domain Specific Language)과 프로세서 API 2가지 방법으로 개발이 가능합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스트림즈 DSL은 스트림 프로세싱에 쓰일 만한 다양한 기능들은 자체 API로 만들어 놓았기 때문에 대부분의 변환 로직을 쉽게 개발할 수 있지만 만약 제공하지 않는 일부 기능들은 프로세서 API를 사용해서 구현할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 스트림즈 DSL에서 제공하지 않는 일부 기능들의 경우 프로세서 API를 사용해서 구현할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음글&lt;/p&gt;
&lt;figure id=&quot;og_1738903755834&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;카프카 스트림즈(Kafka Streams) - 스트림즈 DSL의 기본 개념&quot; data-og-description=&quot;스트림즈DSL(Streams Domain Specific Language)이란?스트림즈DSL는 아파치 카프카(Apache Kafka)의 스트림 처리 라이브러리인 카프카 스트림즈(Kafka Streams)에서 제공하는 고수준 API입니다.스트림 데이터를 손&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/zTmpz/hyYcc8wUo9/wAjEycpJvDPfVkQOzR3GEK/img.png?width=800&amp;amp;height=813&amp;amp;face=0_0_800_813&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88-DSL%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/zTmpz/hyYcc8wUo9/wAjEycpJvDPfVkQOzR3GEK/img.png?width=800&amp;amp;height=813&amp;amp;face=0_0_800_813');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;카프카 스트림즈(Kafka Streams) - 스트림즈 DSL의 기본 개념&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;스트림즈DSL(Streams Domain Specific Language)이란?스트림즈DSL는 아파치 카프카(Apache Kafka)의 스트림 처리 라이브러리인 카프카 스트림즈(Kafka Streams)에서 제공하는 고수준 API입니다.스트림 데이터를 손&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>DSL</category>
      <category>Kafka</category>
      <category>Streams</category>
      <category>포톨로지</category>
      <category>프로세스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/437</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%8A%A4%ED%8A%B8%EB%A6%BC%EC%A6%88Kafka-Streams-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90#entry437comment</comments>
      <pubDate>Fri, 7 Feb 2025 11:47:06 +0900</pubDate>
    </item>
    <item>
      <title>카프카 클라이언트(Kafka Client) - 어드민(Admin) API</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%96%B4%EB%93%9C%EB%AF%BCAdmin-API</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;어드민(Admin) API&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 운영환경에서는 카프카(kafka)에 설정된 내부 옵션을 설정하고 확인하는 것이 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 클라이언트(Kafka Client)에서는 내부 옵션들을 설정하거나 조회하기 위해 AdminClient 클래스를 제공하는데 이를 활용하면 클러스터(Cluster) 옵션과 관련된 부분을 자동화할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;카프카 컨슈머를 멀티 스레드로 생성하고, 구독하는 토픽의 파티션 개수만큼 스레드를 생성하고 싶을 때, 스레드 생성 전에 해당 토픽의 파티션 개수를 어드민 API를 통해 가져올 수 있습니다.&lt;/li&gt;
&lt;li&gt;AdminClient 클래스로 구현한 웹 대시보드를 통해 ACL(Access Control List)이 적용된 클러스터의 리소스 접근 권한 규칙을 추가할 수 있습니다.&lt;/li&gt;
&lt;li&gt;특정 토픽의 데이터양이 늘어남을 감지하고 AdminClient 클래스로 해당 토픽의 파티션을 늘릴 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어드민 API를 선언하는 방법은 아래와 같은데, 프로듀서(Producer)나 컨슈머(Consumer) API와 다르게 추가 설정 없이 클러스터 정보만 설정하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738166477161&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, &quot;localhost:9092&quot;);
AdminClient adminClient = AdminClient.create(properties);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;어드민 API는 많은 부분이 버전이 올라가면서 자주 바뀌기 때문에 활용할 때 클러스터의 버전과 클라이언트의 버전을 맞춰서 사용해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주요 메서드 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AdminClient의 주요 메서드는 아래와 같습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 133px;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 75.3488%; height: 19px; text-align: center;&quot;&gt;KafkaAdminClient 메서드&lt;/td&gt;
&lt;td style=&quot;width: 24.6512%; height: 19px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;describeCluster(DescribeClusterOptions options)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;브로커 정보 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;listTopics(ListTopicsOptions&amp;nbsp;options)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;토픽 리스트 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;listConsumerGroups(ListConsumerGroupsOptions&amp;nbsp;options)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;컨슈머 그룹 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;createTopics(Collection&amp;lsaquo;NewTopic&amp;gt; newTopics, CreateTopicsOptions options)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;토픽 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;createPartitions(Map&amp;lt;String, NewPartition&amp;gt; newPartitions, CreatePartitionsOptions options)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;파티션 개수 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;createAcls(Collection acls, CreateAclsOptions options)&lt;/td&gt;
&lt;td style=&quot;height: 19px;&quot;&gt;접근 제어 규칙 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제는 아래와 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;브로커 정보 조회&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AdminClient를 통해 브로커의 정보를 로그로 출력하는 방법과 결과물은 아래와 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738166803255&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for (Node node : adminClient.describeCluster().nodes().get()) {
    log.info(&quot;node: {}&quot;, node);
    ConfigResource configResource = new ConfigResource(ConfigResource.Type.BROKER, node.idString());
    DescribeConfigsResult describeConfigsResult = adminClient.describeConfigs(Collections.singletonList(configResource));
    describeConfigsResult.all().get()
        .forEach((broker, config) -&amp;gt; config.entries()
            .forEach(entry -&amp;gt; log.info(&quot;{} = {}&quot;, entry.name(), entry.value())));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2536&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQCwhM/btsL2yJMPNR/lZ5uNkd0KQkyB1kj2wNvH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQCwhM/btsL2yJMPNR/lZ5uNkd0KQkyB1kj2wNvH0/img.png&quot; data-alt=&quot;브로커 정보 조회&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQCwhM/btsL2yJMPNR/lZ5uNkd0KQkyB1kj2wNvH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQCwhM%2FbtsL2yJMPNR%2FlZ5uNkd0KQkyB1kj2wNvH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2536&quot; height=&quot;532&quot; data-origin-width=&quot;2536&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;브로커 정보 조회&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;토픽 정보 조회&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AdminClient를 통해 토픽의 정보를 로그로 출력하는 방법과 결과물은 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파티션의 개수, 파티션의 위치, 리더 파티션의 위치 등을 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738167523591&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Map&amp;lt;String, TopicDescription&amp;gt; topics = adminClient.describeTopics(Collections.singletonList(&quot;topic1&quot;)).allTopicNames().get();
log.info(&quot;{}&quot;, topics);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2508&quot; data-origin-height=&quot;92&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d2Dx4a/btsL1GCeCCe/ntxBqDZ8ybr4soRqEmXNTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d2Dx4a/btsL1GCeCCe/ntxBqDZ8ybr4soRqEmXNTk/img.png&quot; data-alt=&quot;토픽 정보 조회&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d2Dx4a/btsL1GCeCCe/ntxBqDZ8ybr4soRqEmXNTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd2Dx4a%2FbtsL1GCeCCe%2FntxBqDZ8ybr4soRqEmXNTk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2508&quot; height=&quot;92&quot; data-origin-width=&quot;2508&quot; data-origin-height=&quot;92&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토픽 정보 조회&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;어드민 API 종료&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어드민 API를 사용하고 나서 close() 메서드를 사용해 종료하여 리소스가 낭비되지 않도록 해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738168118563&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;adminClient.close();&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Apache Kafka</category>
      <category>admin</category>
      <category>API</category>
      <category>broker</category>
      <category>Client</category>
      <category>Kafka</category>
      <category>topic</category>
      <category>정보</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/436</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%96%B4%EB%93%9C%EB%AF%BCAdmin-API#entry436comment</comments>
      <pubDate>Thu, 30 Jan 2025 01:30:09 +0900</pubDate>
    </item>
    <item>
      <title>카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (2/2)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;이전 글&lt;/a&gt;에서는 컨슈머의 중요 개념과 주요 옵션에 대해 정리해보았습니다.&lt;/p&gt;
&lt;figure id=&quot;og_1738165702747&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2)&quot; data-og-description=&quot;컨슈머(Consumer)&amp;nbsp;API프로듀서가 전송한 데이터는 브로커에 적재되고 컨슈머는 적재된 데이터를 사용하기 위해 브로커부터 데이터를 가져와서 필요한 처리를 하게 됩니다.1. 컨슈머 설정 및 사용&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/76Ebw/hyX7VTcVfw/35xjc5eC6rRFvm4M8BbCK0/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/bgfjQS/hyX7TOz4PP/szaDWkmlsD3OUO3iT84ah0/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/cNEL0h/hyX7OsZf4y/59bnQWwulcYjTpojBvhK9K/img.png?width=1674&amp;amp;height=968&amp;amp;face=0_0_1674_968&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/76Ebw/hyX7VTcVfw/35xjc5eC6rRFvm4M8BbCK0/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/bgfjQS/hyX7TOz4PP/szaDWkmlsD3OUO3iT84ah0/img.png?width=800&amp;amp;height=462&amp;amp;face=0_0_800_462,https://scrap.kakaocdn.net/dn/cNEL0h/hyX7OsZf4y/59bnQWwulcYjTpojBvhK9K/img.png?width=1674&amp;amp;height=968&amp;amp;face=0_0_1674_968');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;컨슈머(Consumer)&amp;nbsp;API프로듀서가 전송한 데이터는 브로커에 적재되고 컨슈머는 적재된 데이터를 사용하기 위해 브로커부터 데이터를 가져와서 필요한 처리를 하게 됩니다.1. 컨슈머 설정 및 사용&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 글에는 더욱 다양한 설정과 안전한 종료에 대해 정리해보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4.  동기 오프셋 커밋&lt;/h2&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;poll() 메서드가 호출된 이후에 commitSync() 메서드를 호출하여 오프셋 커밋을 명시적으로 수행할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738165622644&quot; class=&quot;lasso&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;...
// 명시적 오프셋을 구현하기 위헤 자동 커밋 옵션을 false로 설정
properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); 
KafkaConsumer&amp;lt;String, String&amp;gt; consumer = new KafkaConsumer&amp;lt;&amp;gt;(properties);
consumer.subscribe(List.of(&quot;consumer-test&quot;));

while (true) {
    ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofSeconds(1));
    for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
        log.info(&quot;record: {}&quot;, record);
    }
    consumer.commitSync();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;commitSync()는 poll() 메서드로 받은 가장 마지막 레코드의 오프셋을 기준으로 커밋하기 때문에 모든 레코드의 처리가 끝난 후 commitSync() 메서드를 호출해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;동기 커밋의 경우 브로커로 커밋을 요청한 이후에 커밋이 완료되기까지 데이터를 처리하지 않기 때문에 자동 커밋이나 비동기 오프셋 커밋보다 동일 시간당 데이터 처리량이 적다는 특징이 있습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 개별 레코드 단위로 매번 오프셋을 커밋하고 싶다면, commitSync() 메서드에 Map&amp;lt;TopicPartition, OffsetAndMetadata&amp;gt; 인스턴스를 파라미터로 넣으면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738165622645&quot; class=&quot;reasonml&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;       
while (true) {
    ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofSeconds(1));
    Map&amp;lt;TopicPartition, OffsetAndMetadata&amp;gt; currentOffset = new HashMap&amp;lt;&amp;gt;();

    for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
        currentOffset.put(
            // 해당 토픽, 파티션의 오프셋 커밋
            new TopicPartition(record.topic(), record.partition()),
            // 이후 컨슈머가 poll()을 수행할때 마지막으로 커밋한 오프셋부터 읽기 때문에 현재 오프셋에 +1 처리
            new OffsetAndMetadata(record.offset() + 1));
        consumer.commitSync(currentOffset);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. 비 동기 오프셋 커밋&lt;/h2&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동일 시간당 더 많은 데이터를 처리하기 위해&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;commitAsync() 메서드를 호출하여&lt;/span&gt;&amp;nbsp;비동기 오프셋 커밋을 사용할 수 있습니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #1e1f22; color: #bcbec4;&quot;&gt;
&lt;pre class=&quot;lasso&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;while (true) {
    ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofSeconds(1));
    for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
        log.info(&quot;record: {}&quot;, record);
    }
    consumer.commitAsync();
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동기 오프셋 커밋과 마찬가지로 poll() 메서드로 리턴된 가장 마지막 레코드를 기준으로 오프셋을 커밋합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다만 다른 점은 커밋이 완료될 때까지 응답을 기다리지 않기 때문에 데이터 처리량이 더 많습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비동기 오프셋 커밋을 사용할 경우 비동기로 커밋 응답을 받기 때문에 callback 함수를 파라미터로 받아서 결과를 얻을 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738165622647&quot; class=&quot;livescript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;consumer.commitAsync((map, e) -&amp;gt; {
    if (e != null) {
        log.error(&quot;Commit failed&quot;, e);
    } else {
        log.info(&quot;Commit succeeded&quot;);
    }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;OffsetCommitCallback라는 함수형 인터페이스의 onComplete 메서드를 람다식으로 구현하여 매개변수에 넘겨주어 응답을 받을 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정상적으로 커밋되었다면 Exception(e) 변수는 null이고, 커밋 완료된 오프셋 정보가 Map&amp;lt;TopicPartition, OffsetAndMetadata&amp;gt;에 포함되어 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 커밋이 실패했다면 Exception(e) 변수를 통해 커밋이 실패한 이유를 확인할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 리밸런스 리스너를 가진 컨슈머&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;poll() 메서드를 통해 받은 &lt;u&gt;데이터를 처리하는 중에 리밸런스가 발생하게 되면 아직 커밋하지 않았기 때문에 데이터가 중복 처리될 가능성이 있습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 방지하기 위해선 &lt;u&gt;데이터 처리 도중 리밸런스를 감지해 처리한 데이터를 기준으로 커밋을 시도해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 라이브러리는 리밸런스를 감지하기 위해 ConsumerRebalanceListerner 인터페이스를 지원하는데 이 인터페이스는&amp;nbsp; onPartitionRevoked() 메서드와 onPartitionAssigned() 메서드로 이루어져 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;onPartitionRevoked(): 리밸런스가 시작되기 직전에 호출&lt;/li&gt;
&lt;li&gt;onPartitionAssigned(): 리밸런스가 끝난 뒤 파티션 할당이 완료되면 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738164254781&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private KafkaConsumer&amp;lt;String, String&amp;gt; consumer;
private Map&amp;lt;TopicPartition, OffsetAndMetadata&amp;gt; currentOffset = new HashMap&amp;lt;&amp;gt;();

public void rebalanceTest() {
    Properties properties = new Properties();
    properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, &quot;localhost:9092&quot;);
    properties.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false); // 수동 커밋을 위해 설정

    consumer = new KafkaConsumer&amp;lt;&amp;gt;(properties);
    
    // ConsumerRebalanceListener 구현체 설정
    consumer.subscribe(List.of(&quot;consumer-test&quot;), new CustomConsumerRebalanceListener());

    while (true) {
        ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofSeconds(1));
        Map&amp;lt;TopicPartition, OffsetAndMetadata&amp;gt; currentOffset = new HashMap&amp;lt;&amp;gt;();

        for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
            log.info(&quot;record: {}&quot;, record);
            currentOffset.put(
                new TopicPartition(record.topic(), record.partition()),
                new OffsetAndMetadata(record.offset() + 1));
            consumer.commitSync(currentOffset);
        }
    }
}

private class CustomConsumerRebalanceListener implements ConsumerRebalanceListener {
    @Override
    public void onPartitionsRevoked(Collection&amp;lt;TopicPartition&amp;gt; collection) {
        log.warn(&quot;Partitions revoked: {}&quot;, collection);
        // 리밸런싱이 발생하기 직전에 오프셋 커밋
        consumer.commitSync(currentOffset);
        currentOffset.clear();
    }

    @Override
    public void onPartitionsAssigned(Collection&amp;lt;TopicPartition&amp;gt; collection) {
        log.warn(&quot;Partitions assigned: {}&quot;, collection);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7. 파티션 할당 컨슈머&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머를 운영할 때 assign() 메서드를 사용해 파티션을 명시적으로 할당하여 운영할 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;이 방법은 컨슈머가 특정 토픽, 파티션에 할당되므로 리밸런싱 하는 과정이 없습니다.&lt;/u&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738164675113&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;KafkaConsumer&amp;lt;String, String&amp;gt; consumer = new KafkaConsumer&amp;lt;&amp;gt;(properties);
// TopicPartition 클래스에 토픽과 함께 파티션 번호 설정
consumer.assign(List.of(new TopicPartition(&quot;consumer-test&quot;, 0)));

while (true) {
    ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofSeconds(1));
    for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
        log.info(&quot;record: {}&quot;, record);
        ...
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;assignment() 메서드로 컨슈머에 할당된 파티션을 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738164845606&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Set&amp;lt;TopicPartition&amp;gt; topicPartitions = consumer.assignment();&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8. 컨슈머의 안전한 종료&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정상적으로 종료되지 않은 컨슈머는 세션 타임아웃이 발생할때까지 컨슈머 그룹에 남게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 파티션의 데이터를 소모하지 못하게 되어 컨슈머 랙이 늘어나고 데이터 처리 지연이 발생하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KafkaConsumer 클래스는 wakeup() 메서드를 지원하여 &lt;span style=&quot;text-align: start;&quot;&gt;컨슈머를 안전하게&amp;nbsp;종료할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1738165318630&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try {
    while (true) {
        ConsumerRecords&amp;lt;String, String&amp;gt; records = consumer.poll(Duration.ofSeconds(1));
        for (ConsumerRecord&amp;lt;String, String&amp;gt; record : records) {
            log.info(&quot;record: {}&quot;, record);
        }
    }
} catch (WakeupException e) {
    log.warn(&quot;WakeupException&quot;, e);
} finally {
    consumer.close();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;poll() 메서드를 통해 데이터를 처리하다 wakeup() 메서드가 호출되면 WakeupException 예외가 발생하고&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;catch 문에서 리소스를 종료하는 작업을 처리합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;finally 문에서는 close() 메서드를 호출하여 카프카 클러스터(Kafka cluster)에 컨슈머가 안전하게 종료되었음을 알려주게 되면&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;&amp;nbsp;해당 컨슈머는 컨슈머 그룹에서 제거되고 나머지 컨슈머들이 파티션을 할당받게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자바 애플리케이션의 경우 코드 내부에 셧다운 훅(shutdown hook)을 구현하여 안전한 종료를 명시적으로 구현할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1738165505232&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Runtime.getRuntime().addShutdownHook(new Thread(() -&amp;gt; {
    log.info(&quot;Shutting down&quot;);
    consumer.wakeup();
}));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>Assign</category>
      <category>close</category>
      <category>consumer</category>
      <category>Kafka</category>
      <category>Rebalance</category>
      <category>wakeup</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/435</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22#entry435comment</comments>
      <pubDate>Thu, 30 Jan 2025 00:46:23 +0900</pubDate>
    </item>
    <item>
      <title>카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;컨슈머(Consumer)&amp;nbsp;API&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로듀서가 전송한 데이터는 브로커에 적재되고 컨슈머는 적재된 데이터를 사용하기 위해 브로커부터 데이터를 가져와서 필요한 처리를 하게 됩니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 컨슈머 설정 및 사용&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 스펙은 &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;프로듀서(Producer) API 설명 및 예제&lt;/a&gt;글에서 확인 가능합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737360246399&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public KafkaConsumerTest() {
    Properties properties = new Properties();
    
    // 카프카 클러스터 Host 설정
    properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, &quot;localhost:9092&quot;);
    // key값 역직렬화 클래스 설정
    properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
    // value값 역직렬화 클래스 설정
    properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
    // 컨슈머 그룹 명 설정
    properties.put(ConsumerConfig.GROUP_ID_CONFIG, &quot;consumer-group-1&quot;);
    this.kafkaConsumer = new KafkaConsumer&amp;lt;&amp;gt;(properties);
    // 구독할 토픽 설정
    this.kafkaConsumer.subscribe(List.of(&quot;producer-test&quot;));
}

@Test
public void consume() {
    while (true) {
        // 데이터를 가져올 때 컨슈머 버퍼에 데이터를 기다리기 위한 타임아웃 1초 설정
        this.kafkaConsumer.poll(Duration.ofSeconds(1)).forEach(record -&amp;gt; {
            log.info(&quot;Consume record: {}&quot;, record);
        });
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제에는 컨슈머 그룹을 설정해주었는데 컨슈머 그룹을 선언하지 않을 경우 어느 그룹에도 속하지 않는 컨슈머로 동작하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머가 중단되거나 재시작되더라도 &lt;u&gt;컨슈머 그룹의 오프셋을 기준으로 이후 데이터 처리를 하기 때문에 subscribe() 메서드를 사용하여 토픽을 구독하는 경우에는 컨슈머 그룹을 선언해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 테스트 코드를 실행해보면&lt;span&gt;&amp;nbsp;&lt;/span&gt;다음과 같은 컨슈머의 설정 옵션과 메시지 컨슘 로그를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ek5EFb/btsLTsC8mNr/lwj1OTvLCiSj6qDfbBY7Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ek5EFb/btsLTsC8mNr/lwj1OTvLCiSj6qDfbBY7Q0/img.png&quot; data-alt=&quot;컨슈머 설정 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ek5EFb/btsLTsC8mNr/lwj1OTvLCiSj6qDfbBY7Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fek5EFb%2FbtsLTsC8mNr%2Flwj1OTvLCiSj6qDfbBY7Q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1674&quot; height=&quot;968&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;968&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨슈머 설정 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3476&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQTdoy/btsLUo7PUQm/ZnAXdMaW1eU84oJHi2sTm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQTdoy/btsLUo7PUQm/ZnAXdMaW1eU84oJHi2sTm0/img.png&quot; data-alt=&quot;메세지 컨슘 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQTdoy/btsLUo7PUQm/ZnAXdMaW1eU84oJHi2sTm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQTdoy%2FbtsLUo7PUQm%2FZnAXdMaW1eU84oJHi2sTm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3476&quot; height=&quot;90&quot; data-origin-width=&quot;3476&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;메세지 컨슘 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 컨슈머 중요 개념&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터를 가져오기 위해 컨슈머를 운영하는 두 가지 방법이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 1개 이상의 컨슈머로 이루어진 컨슈머 그룹을 운영하는 것이고 두 번째는 토픽의 특정 파티션만 구독하는 컨슈머를 운영하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머 그룹으로 묶인 컨슈머가 토픽을 구독해서 데이터를 가져갈 때 1개의 컨슈머는 1개 이상의 파티션들에 할당이 가능하고, 1개의 파티션은 최대 1개의 컨슈머에 할당이 가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로 컨슈머 그룹의 컨슈머 개수는 가져가고자 하는 토픽의 파티션 개수보다 같거나 작아야 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YBpVS/btsLUUFeXR2/LugpeH63WDi5I6Wtakwkf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YBpVS/btsLUUFeXR2/LugpeH63WDi5I6Wtakwkf1/img.png&quot; data-alt=&quot;3개의 파티션에 컨슈머 2개 / 컨슈머 3개 / 컨슈머 4개인 경우&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YBpVS/btsLUUFeXR2/LugpeH63WDi5I6Wtakwkf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYBpVS%2FbtsLUUFeXR2%2FLugpeH63WDi5I6Wtakwkf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;490&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;3개의 파티션에 컨슈머 2개 / 컨슈머 3개 / 컨슈머 4개인 경우&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 파티션의 개수보다 컨슈머의 개수가 많다면 남은 컨슈머들은 파티션을 할당받지 못하고 유휴 상태로 남기 때문에 불필요한 쓰레드를 차지하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;컨슈머 그룹은 다른 그룹들과 격리되는 특징을 가지고 있기 때문에 프로듀서가 보낸 데이터를 각기 다른 역할을 하는 컨슈머 그룹끼리 영향을 받지 않게 처리할 수 있다는 장점이 있습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 회원이 상품 주문을 완료했을 때 상품 재고를 감소시키고 주문 완료 이메일을 발송하는 프로세스가 있을 때 동기적으로 각기 도메인에 요청할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 카프카를 사용할 경우 각각 도메인 별로 컨슈머 그룹으로 묶음으로써 격리되어 비동기로 프로세스를 진행할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2032&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de5bFJ/btsLS9jOxCB/K216ImF3pBuLGKtl5K6PA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de5bFJ/btsLS9jOxCB/K216ImF3pBuLGKtl5K6PA1/img.png&quot; data-alt=&quot;동기적으로 로직 실행 / 카프카를 이용한 비동기 로직 실행&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de5bFJ/btsLS9jOxCB/K216ImF3pBuLGKtl5K6PA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde5bFJ%2FbtsLS9jOxCB%2FK216ImF3pBuLGKtl5K6PA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;198&quot; data-origin-width=&quot;2032&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;동기적으로 로직 실행 / 카프카를 이용한 비동기 로직 실행&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;현재 운영하고 있는 토픽의 데이터가 어디에 적재되는지, 어떻게 처리되는지 파악하고 컨슈머 그룹으로 따로 나눌 수 있는 것은 최대한 나누어 적절히 운영하는 것이 매우 중요합니다.&lt;/u&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;리밸런싱(rebalancing)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 컨슈머 그룹 내 특정 컨슈머에 장애가 발생하면 할당된 파티션은 장애가 발생하지 않은 다른 컨슈머로 소유권이 이전됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 과정을 리밸런싱(rebalancing)이라고 부르는데 크게 두 가지 상황에서 일어나게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째는 컨슈머가 추가되는 상황이고, 두 번째는 컨슈머에 장애로 인해 제외되는 상황입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 대의 그룹 조정자(group coordinator) 브로커가 컨슈머 그룹에 컨슈머가 추가되고 삭제되는 상황을 감지하여 리밸런싱을 발동하여 가용성을 높여줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;617&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C9Zaj/btsLSMa3GFZ/6BGPMzuzCpSJGUERc8l9I0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C9Zaj/btsLSMa3GFZ/6BGPMzuzCpSJGUERc8l9I0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C9Zaj/btsLSMa3GFZ/6BGPMzuzCpSJGUERc8l9I0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC9Zaj%2FbtsLSMa3GFZ%2F6BGPMzuzCpSJGUERc8l9I0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;181&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;617&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;하지만 리밸런싱이 진행될 때 파티션의 소유권을 컨슈머로 재할당하는 과장에서 해당 컨슈머 그룹의 컨슈머들이 토픽의 데이터를 읽을 수 없으므로 리밸런싱이 자주 발생해서는 안됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오프셋 커밋(offset commit)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머는 브로커로부터 데이터를 어디까지 가져갔는지 커밋(commit)을 통해 오프셋을 기록하게 되는데 이때 이슈가 발생하여 기록되지 못했다면 데이터 처리의 중복이 발생하기 때문에&amp;nbsp;오프셋 커밋을 정상적으로 처리했는지 검증해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프셋 커밋은 명시적, 비명시적으로 수행할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;명시적 오프셋&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명시적 오프셋 커밋은 poll() 메서드 호출 이후 데이터 처리가 완료되고 commitSync() 메서드를 호출해 반환된 레코드의 가장 마지막 오프셋을 기준으로 커밋합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;commitSync() 메서드는 브로커에 커밋 요청을 하고 커밋이 정상적으로 처리되었는지 응답까지 기다리기 때문에 데이터 처리량에 영향을 끼칩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;775&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UhCRV/btsLWMHVtop/R0aWVtHK4oxuPS9PGfaGC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UhCRV/btsLWMHVtop/R0aWVtHK4oxuPS9PGfaGC0/img.png&quot; data-alt=&quot;명시적 오프셋 커밋&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UhCRV/btsLWMHVtop/R0aWVtHK4oxuPS9PGfaGC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUhCRV%2FbtsLWMHVtop%2FR0aWVtHK4oxuPS9PGfaGC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;600&quot; height=&quot;227&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;775&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;명시적 오프셋 커밋&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;비명시적 오프셋&amp;nbsp;&lt;/h4&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본 옵션인 비명시적 오프셋 커밋은 poll() 메서드가 수행될 때 일정한 간격마다 오프셋을 커밋합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;enable.auto.commit=true이고 poll() 메서드가 auto.commit.interval.ms 옵션에 설정된 값 이상이 지났을 때 그 시점까지 읽은 오프셋을 커밋합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코드상에서 따로 커밋 관련 코드를 작성할 필요가 없어서 편리하지만&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;리밸런싱이나 컨슈머 강제종료가 발생할 경우 데이터 중복 또는 유실될 가능성이 있어 데이터가 중요한 서비스의 경우 자동 커밋을 사용해선 안됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VEwsM/btsLXS1JuKL/jo8jGsKmntkC88cYkcoho0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VEwsM/btsLXS1JuKL/jo8jGsKmntkC88cYkcoho0/img.png&quot; data-alt=&quot;비명시적 오프셋 커밋&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VEwsM/btsLXS1JuKL/jo8jGsKmntkC88cYkcoho0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVEwsM%2FbtsLXS1JuKL%2Fjo8jGsKmntkC88cYkcoho0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;213&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;872&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;비명시적 오프셋 커밋&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 컨슈머 주요 옵션&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머 애플리케이션을 실행할 때 설정해야 하는 필수 옵션과 선택 옵션이 있는데 필수 옵션은 반드시 선언해야 하며, &lt;u&gt;선택 옵션은 선언하지 않아도 되지만 기본값으로 설정되기 때문에 선택 옵션은 무엇이 있는지 기본값은 무엇인지 알고 있어야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;필수 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bootstrap.servers: 데이터를 전송받을 카프카 클러스터를 1개 이상 설정&lt;/li&gt;
&lt;li&gt;key.deserializer: 레코드의 데이터 키를 역직렬화하는 클래스 설정&lt;/li&gt;
&lt;li&gt;value.deserializer:&amp;nbsp;레코드의&amp;nbsp;데이터&amp;nbsp;값을 역직렬화하는&amp;nbsp;클래스&amp;nbsp;설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;선택 옵션&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;group.id: 컨슈머의 그룹 아이디 설정, subscribe() 메서드로 토픽을 구독하여 사용할 경우 필수(default: null)&lt;/li&gt;
&lt;li&gt;auto.offset.reset: 컨슈머 그룹이 저장된 컨슈머 오프셋이 없는 경우 처음에 읽을 오프셋 설정(default: latest)&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;latest: 가장 높은 오프셋부터 읽음(가장 최신의 데이터)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;earliest: 가장 낮은 오프셋부터 읽음(가장 오래된 데이터)&lt;/li&gt;
&lt;li&gt;none: 커밋한 기록이 없으면 오류 발생, 있다면 이후 오프셋부터 읽음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;enable.auto.commit: 자동 커밋 여부 설정(default: true)&lt;/li&gt;
&lt;li&gt;auto.commit.interval.ms: 오프셋 커밋 간격 설정(default: 5000(5초), enable.auto.commit=true인 경우)&lt;/li&gt;
&lt;li&gt;max.poll.records: poll() 메서드를 통해 반환되는 레코드 개수 설정(default: 500)&lt;/li&gt;
&lt;li&gt;heartbeat.interval.ms: 하트비트를 전송하는 시간 간격(default: 3000(3초))&lt;/li&gt;
&lt;li&gt;session.timeout.ms: 컨슈머가 브로커와 연결이 끊키는 최대 시간 설정(default: 10000(10초))
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이 시간 내에 하트비트(heartbeat)를 전송하지 않으면 이슈라고 판단 리밸런싱 진행, 보통 하트비트 시간의 3배로 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;max.poll.interval.ms: poll() 메서드를 호출하는 간격의 최대 시간 설정(default: 300000(5분))
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;poll() 메서드를 호출한 이후 데이터를 처리하는 시간이 오래 걸리는 경우 비정상으로 판단해 리밸런싱 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;isolation.level: 프로듀서가 레코드를 트랜잭션 단위로 보낼 경우 사용(default: read_uncommitted)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;read_committed: 커밋이 완료된 레코드만 읽음&lt;/li&gt;
&lt;li&gt;read_uncommitted: 커밋 여부와 관계없이 모든 레코드 읽음&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더욱 다양한 옵션은&lt;span&gt; &lt;a href=&quot;https://kafka.apache.org/documentation/#consumerconfigs&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kafka.apache.org/documentation/#consumerconfigs&lt;/a&gt;&lt;/span&gt;에서 확인이 가능합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글: &lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738165877911&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (2/2)&quot; data-og-description=&quot;이전 글에서는 컨슈머의 중요 개념과 주요 옵션에 대해 정리해보았습니다.&amp;nbsp;카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2)컨슈머(Consumer)&amp;nbsp;API프로듀서가 전송한 데이터는 브로커에 적재&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZGnUf/hyX7RDfJgL/aZPtdJmtAe7lisW2MmB3v1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/blo0Ww/hyX7PSZQnS/vwhNImVNExXhCS4lqGhSzK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-22&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZGnUf/hyX7RDfJgL/aZPtdJmtAe7lisW2MmB3v1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/blo0Ww/hyX7PSZQnS/vwhNImVNExXhCS4lqGhSzK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (2/2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이전 글에서는 컨슈머의 중요 개념과 주요 옵션에 대해 정리해보았습니다.&amp;nbsp;카프카 클라이언트(Kafka Client) - 컨슈머(Consumer) API (1/2)컨슈머(Consumer)&amp;nbsp;API프로듀서가 전송한 데이터는 브로커에 적재&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>Apache Kafka</category>
      <category>commit</category>
      <category>config</category>
      <category>consumer</category>
      <category>Kafka</category>
      <category>OFFSET</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/434</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%EC%BB%A8%EC%8A%88%EB%A8%B8Consumer-API-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EC%98%88%EC%A0%9C#entry434comment</comments>
      <pubDate>Wed, 29 Jan 2025 23:48:05 +0900</pubDate>
    </item>
    <item>
      <title>카프카 클라이언트(Kafka Client) - 프로듀서(Producer) API</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;카프카 클라이언트(Kafka Client)란?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 클러스터(Kafka Cluster)에 명령을 내리거나 데이터를 송수신하기 위해 다양한 API를 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 클라이언트는 라이브러리이기 때문에 자체 라이프사이클을 가진 프레임워크 혹은 애플리케이션 위에서 구현 및 실행해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 API가 어떻게 동작하며 어떤 기능을 제공하는지 정리하려고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 스펙은 아래와 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Java 17&lt;/li&gt;
&lt;li&gt;Spring Boot 3.4.1&lt;/li&gt;
&lt;li&gt;Kafka Client 3.8.1&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1737336993152&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# spring-kafka를 사용하였습니다.
dependencies {
    ...
    implementation 'org.springframework.kafka:spring-kafka'
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로듀서(Producer) API&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로듀서 애플리케이션은 데이터를 특정 토픽 파티션에 전송합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로듀서는 데이털르 직렬화여 카프카 브로커로 보내기 때문에 자바에서 선언 가능한 모든 형태를 브로커에 전송할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 프로듀서 설정 및 사용&lt;/h3&gt;
&lt;pre id=&quot;code_1737337814078&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class KafkaProducerTest {

    private static final Logger log = LoggerFactory.getLogger(KafkaProducerTest.class);
    private final KafkaProducer&amp;lt;String, String&amp;gt; kafkaProducer;

    public KafkaProducerTest() {
        Properties properties = new Properties();
        
        // 카프카 클러스터 Host 설정
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, &quot;localhost:9092&quot;);
        // key값 직렬화 클래스 설정
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        // value값 직렬화 클래스 설정
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        this.kafkaProducer = new KafkaProducer&amp;lt;&amp;gt;(properties);
    }
	
    @Test
    public void send() {
        final String TOPIC_NAME = &quot;producer-test&quot;;

        String message = &quot;Hello, Kafka!&quot;;
        ProducerRecord&amp;lt;String, String&amp;gt; record = new ProducerRecord&amp;lt;&amp;gt;(TOPIC_NAME, message);
        log.info(&quot;Send record: {}&quot;, record);

        Future&amp;lt;RecordMetadata&amp;gt; sendResult = kafkaProducer.send(record);
        log.info(&quot;Send result: {}&quot;, sendResult);
		
        // 프로듀서 내부 레코드 배치를 브로커에 전송
        kafkaProducer.flush();
       
        // Producer 인스턴스 리소스 종료
        kafkaProducer.close();
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예제에서는 ProducerRecord에 토픽과 메시지값만 설정하였지만 ProducerRecord를 오버로딩하여 파티션 번호나 타임스탬프 같은 내부 변수를 선언할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 테스트 코드를 실행해보면 다음과 같은 카프카 프로듀서의 설정 옵션과 메시지 발송 로그를 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;1012&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt7Uns/btsLS242Tum/MW5nJcsqhD6Tk1IMgJJ7q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt7Uns/btsLS242Tum/MW5nJcsqhD6Tk1IMgJJ7q1/img.png&quot; data-alt=&quot;프로듀서 설정 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt7Uns/btsLS242Tum/MW5nJcsqhD6Tk1IMgJJ7q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt7Uns%2FbtsLS242Tum%2FMW5nJcsqhD6Tk1IMgJJ7q1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1678&quot; height=&quot;1012&quot; data-origin-width=&quot;1678&quot; data-origin-height=&quot;1012&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로듀서 설정 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3500&quot; data-origin-height=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PGpqx/btsLTJxigu7/Ukmgv0XVjsWnzR77leweSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PGpqx/btsLTJxigu7/Ukmgv0XVjsWnzR77leweSk/img.png&quot; data-alt=&quot;메시지 발송 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PGpqx/btsLTJxigu7/Ukmgv0XVjsWnzR77leweSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPGpqx%2FbtsLTJxigu7%2FUkmgv0XVjsWnzR77leweSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3500&quot; height=&quot;400&quot; data-origin-width=&quot;3500&quot; data-origin-height=&quot;400&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;메시지 발송 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커맨드 명령어로 확인해보면 메시지가 정상적으로 전송된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3258&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ed57YX/btsLStouTtQ/oLkt9ZXFQXZLQB2Lg5jYA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ed57YX/btsLStouTtQ/oLkt9ZXFQXZLQB2Lg5jYA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ed57YX/btsLStouTtQ/oLkt9ZXFQXZLQB2Lg5jYA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fed57YX%2FbtsLStouTtQ%2FoLkt9ZXFQXZLQB2Lg5jYA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3258&quot; height=&quot;88&quot; data-origin-width=&quot;3258&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;프로듀서 중요 개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로듀서는 카프카 브로커로 데이터를 전송할 때 내부적으로 파티셔너, 배치 생성 단계를 거칩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzne66/btsLSnWBBfR/rGbEGUKpRsXmh9KviK26d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzne66/btsLSnWBBfR/rGbEGUKpRsXmh9KviK26d0/img.png&quot; data-alt=&quot;프로듀서 애플리케이션 메시지 전송 단계&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzne66/btsLSnWBBfR/rGbEGUKpRsXmh9KviK26d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzne66%2FbtsLSnWBBfR%2FrGbEGUKpRsXmh9KviK26d0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2048&quot; height=&quot;657&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로듀서 애플리케이션 메시지 전송 단계&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;send() 메서드를 호출하면 ProducerRecord는 파티셔너(Partitioner)에서 토픽의 어느 파티션으로 전송될 것인지 선택됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;파티셔너에 의해 구분된 레코드는 데이터를 전송하기 전에 어큐물레이터(Accumulator)에 데이터를 버퍼로 쌓고 있다가 배치고 묶어서 전송합니다. 이로 인해 카프카 프로듀서에 처리량을 향상하는 데에 상당한 도움을 줍니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KafkaProducer 인스턴스를 생성할 때 파티셔너를 따로 설정하지 않으면 기본 파티셔너로 지정되는데 카프라 클라이언트 라이브러리 버전에 따라 사용하는 파티셔너가 달라질 수 있으므로 주의해야 합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;v2.4.0 이전 - RoundRobinPartitioner&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Round_Robin__2_.webp&quot; data-origin-width=&quot;2960&quot; data-origin-height=&quot;1634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boEQdo/btsLSky8ecr/9KJjoWygSKFFgG2q7VtQK1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boEQdo/btsLSky8ecr/9KJjoWygSKFFgG2q7VtQK1/img.webp&quot; data-alt=&quot;출처) https://learn.conduktor.io/kafka/producer-default-partitioner-and-sticky-partitioner&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boEQdo/btsLSky8ecr/9KJjoWygSKFFgG2q7VtQK1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboEQdo%2FbtsLSky8ecr%2F9KJjoWygSKFFgG2q7VtQK1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2960&quot; height=&quot;1634&quot; data-filename=&quot;Round_Robin__2_.webp&quot; data-origin-width=&quot;2960&quot; data-origin-height=&quot;1634&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처) https://learn.conduktor.io/kafka/producer-default-partitioner-and-sticky-partitioner&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Round Robin 방식으로 파티션을 순회하면서 레코드를 하나씩 전달하여 배치 기능을 비효율적으로 사용하기 때문에 레이턴시가 늘어가게 됩니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;v2.4.0 이전 - UniformStrickyPartitioner&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Sticky_Partitioner_Batching__1_.webp&quot; data-origin-width=&quot;2960&quot; data-origin-height=&quot;1634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0ujJ1/btsLTGVqo4w/TXPJIwCTcD39KWvRRemlAK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0ujJ1/btsLTGVqo4w/TXPJIwCTcD39KWvRRemlAK/img.webp&quot; data-alt=&quot;출처) https://learn.conduktor.io/kafka/producer-default-partitioner-and-sticky-partitioner&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0ujJ1/btsLTGVqo4w/TXPJIwCTcD39KWvRRemlAK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0ujJ1%2FbtsLTGVqo4w%2FTXPJIwCTcD39KWvRRemlAK%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2960&quot; height=&quot;1634&quot; data-filename=&quot;Sticky_Partitioner_Batching__1_.webp&quot; data-origin-width=&quot;2960&quot; data-origin-height=&quot;1634&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처) https://learn.conduktor.io/kafka/producer-default-partitioner-and-sticky-partitioner&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RoundRobinPartitioner의 단점인 작은 사이즈의 배치의 영향을 줄이기 위해 서로 가까운 시간에 전송된 메시지를 수신하는 프로듀서는 다른 파티션에 대한 배치를 만들기 전에 배치를 하나의 파티션에 채우려고 시도하여 레이턴시를 감소시킬 수 있었습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3.4.0 이후 - StrictlyUniformStickyPartitioner&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UniformStrickyPartitioner는 초기에는 파티션이 불균형한 것 처럼 보이지만 시간이 지나면서 파티션의 균형에는 영향을 주지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 파티션의 리더(Leader)가 바뀌거나 일시적인 네트워크의 문제로 특정한 브로커의 성능이 느려질 경우 새로운 배치가 생성되는 시간이 늘어나기 때문에 분배되는 레코드 수가 늘어나게 됩니다. 이로 인해 느린 브로커는 더욱 느려져 계속해서 불균형해지는 문제 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;StrictlyUniformStickyPartitioner에서는 UniformStickyPartitioner의 방식 대신 batch.size 기준으로 파티션을 전환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 파티션으로 batch.size 바이트가 생산되면, 새로운 파티션으로 전환합니다. 이는&amp;nbsp;배치나&amp;nbsp;기타&amp;nbsp;설정(linger.ms&amp;nbsp;등)과&amp;nbsp;무관하게&amp;nbsp;작동하며,&amp;nbsp;단순히&amp;nbsp;각&amp;nbsp;파티션에&amp;nbsp;전송된&amp;nbsp;바이트&amp;nbsp;수를&amp;nbsp;기준으로&amp;nbsp;전환합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 여기에도 느린 브로커가 병목 되는 문제가 있는데 느린&amp;nbsp;브로커가&amp;nbsp;처리량을&amp;nbsp;따라가지&amp;nbsp;못하면,&amp;nbsp;데이터가&amp;nbsp;누적되어&amp;nbsp;버퍼&amp;nbsp;풀&amp;nbsp;메모리가&amp;nbsp;고갈되고&amp;nbsp;전송&amp;nbsp;속도가&amp;nbsp;가장&amp;nbsp;느린&amp;nbsp;브로커의&amp;nbsp;처리&amp;nbsp;용량에&amp;nbsp;맞춰지게&amp;nbsp;됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위해 대기열에 전송을 기다리는 배치 크기를 통해 브로커의 부하를 판단하고 해당 파티션의 선택 가능성을 낮추게 됩니다.(선택 확률은 대기열 크기의 역비례 관계)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 방식은 균등성, 배치 효율성, 적응성을 모두 제공하며, Kafka의 데이터 분배와 처리량을 더욱 최적화할 수 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://devidea.tistory.com/123&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://devidea.tistory.com/123&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cwiki.apache.org/confluence/display/KAFKA/KIP-794%3A+Strictly+Uniform+Sticky+Partitioner&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://cwiki.apache.org/confluence/display/KAFKA/KIP-794%3A+Strictly+Uniform+Sticky+Partitioner&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 카프카 프로듀서는 압축을 통해 브로커로 전송할 수 있는데 gzip, snappy, lz4, zstd를 지원하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;압축하여 데이터 전송 시 네트워크 처리량에서는 이득을 볼 수 있지만 압축하거나 압축을 푸는데 CPU와 메모리 리소스를 사용하게 되므로 환경에 따라 적절하게 사용해야 합니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;프로듀서 주요 옵션&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로듀서 애플리케이션을 실행할 때 설정해야 하는 필수 옵션과 선택 옵션이 있는데 필수 옵션은 반드시 선언해야 하며, &lt;u&gt;선택 옵션은 선언하지 않아도 되지만 기본값으로 설정되기 때문에 선택 옵션은 무엇이 있는지 기본값은 무엇인지 알고 있어야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;필수 옵션&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;bootstrap.servers: 데이터를 저송할 카프카 클러스터를 1개 이상 설정&lt;/li&gt;
&lt;li&gt;key.serializer: 레코드의 데이터 키를 직렬화하는 클래스 설정&lt;/li&gt;
&lt;li&gt;value.serializer: 레코드의 데이터 값을 직렬화 하는 클래스 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;선택 옵션&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;acks:&lt;span&gt; 데이터가 브로커에 정상적으로 저장되었는지 판단 기준 설정&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;0: 프로듀서가 전송한 즉시 성공으로 판단&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;1: 리더 파티션에 저장되면 성공으로 판단&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;-1(all): min.insync.replicas 개수에 해당하는 리더 파티션과 팔로워 파티션에 데이터가 저장되면 성공&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt; buffer.memory: 전송할 데이터를 배치로 모으기 위한 설정 버퍼 메모리양 설정&lt;/li&gt;
&lt;li&gt;retries: 프로듀서가 브로커로부터 에러를 전달받았을 때 재전송을 시도하는 횟수 설정&lt;/li&gt;
&lt;li&gt;batch.size: 배치로 전송할 레코드 최대 용량 설정&lt;br /&gt;(너무 작게 설정하면 네트워크가 많아지고, 너무 크게 설정하면 메모리 사용량이 많아질 수 있습니다.)&lt;/li&gt;
&lt;li&gt;linger.ms: 배치를 전송하지 전까지 기다리는 최소 시간 설정(default: 0)&lt;/li&gt;
&lt;li&gt;partitioner.class: 파티셔너 클래스 설정&lt;/li&gt;
&lt;li&gt;enable.idempotence: 멱등성 프로듀서 설정&lt;/li&gt;
&lt;li&gt;transactional.id: 고유한 트랜잭션 아이디 설정&lt;br /&gt;(이 옵션을 설정하게 되면 레코드를 전송할 때 레코드를 트랜잭션 단위로 묶어 전송합니다. -&amp;gt; 트랜잭션 프로듀서)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;더욱 다양한 옵션은 &lt;a href=&quot;https://kafka.apache.org/documentation/#producerconfigs&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://kafka.apache.org/documentation/#producerconfigs&lt;/a&gt;에서 확인이 가능합니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4.&lt;span&gt;&amp;nbsp;&lt;/span&gt;전송할 메시지에 키와 파티션 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 키가 포함된 레코드를 전송하고 싶다면 ProducerRecord 생성 시 파라미터로 추가해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737356011458&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;String key = &quot;hello1&quot;;
String message = &quot;Hello, Kafka!&quot;;
ProducerRecord&amp;lt;String, String&amp;gt; record = new ProducerRecord&amp;lt;&amp;gt;(TOPIC_NAME, key, message);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3264&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLSR6W/btsLTqyBt1q/HsBOvM6adSEU5mnVUnnQL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLSR6W/btsLTqyBt1q/HsBOvM6adSEU5mnVUnnQL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLSR6W/btsLTqyBt1q/HsBOvM6adSEU5mnVUnnQL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLSR6W%2FbtsLTqyBt1q%2FHsBOvM6adSEU5mnVUnnQL0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3264&quot; height=&quot;122&quot; data-origin-width=&quot;3264&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 파티션을 직접 지정하고 싶다면 동일하게 ProducerRecord 생성 시 파라미터로 추가하면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737356168257&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int partition = 1;
String key = &quot;hello1&quot;;
String message = &quot;Hello, Kafka!&quot;;
ProducerRecord&amp;lt;String, String&amp;gt; record = new ProducerRecord&amp;lt;&amp;gt;(TOPIC_NAME, partition, key, message);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5.&lt;span&gt;&amp;nbsp;&lt;/span&gt;커스텀 파티셔너 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환경에 따라 특정한 데이터를 가지는 레코드를 특정 파티션으로 보내야 할 때가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 &lt;u&gt;메시지 키를 사용하더라도 어느 파티션으로 고정되어 들어가는지 알 수 없기 때문에 Partitioner 인터페이스를 사용하여 사용자 저의 파티셔너를 생성하여 특정 파티션으로 전송되도록 고정할 수 있습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 지정할 경우 파티션이 추가되더라도 해당 메시지는 설정한 파티션에만 전송되게 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737356575428&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class CustomPartitioner implements Partitioner {

    @Override
    public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
        if (&quot;p1&quot;.equals(key)) {
            return 1;
        } else if (&quot;p2&quot;.equals(key)) {
            return 2;
        } else {
            RoundRobinPartitioner roundRobinPartitioner = new RoundRobinPartitioner();
            return roundRobinPartitioner.partition(topic, key, keyBytes, value, valueBytes, cluster);
        }
    }

    @Override
    public void close() {

    }

    @Override
    public void configure(Map&amp;lt;String, ?&amp;gt; map) {

    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제에서는 메세지 키가 &quot;p1&quot;일 때는 1번 파티션으로, &quot;p2&quot;일 때는 2번 파티션으로, 그 외에는 RoundRobinPartitioner의 파티션 선택 로직을 실행하도록 구현하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 시에는 KafkaProducer 인스턴스를 생성할 때 구현한 커스텀 파티션 클래스를 설정해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737356727564&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Properties properties = new Properties();
...
properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, CustomPartitioner.class);
this.kafkaProducer = new KafkaProducer&amp;lt;&amp;gt;(properties);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3420&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNtrBk/btsLUvluMfE/QPT0pAczziL8GMie8IrOLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNtrBk/btsLUvluMfE/QPT0pAczziL8GMie8IrOLK/img.png&quot; data-alt=&quot;1번 파티션에 전송된 메시지 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNtrBk/btsLUvluMfE/QPT0pAczziL8GMie8IrOLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNtrBk%2FbtsLUvluMfE%2FQPT0pAczziL8GMie8IrOLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3420&quot; height=&quot;42&quot; data-origin-width=&quot;3420&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;1번 파티션에 전송된 메시지 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6.&lt;span&gt;&amp;nbsp;&lt;/span&gt;브로커에 정상적인 전송 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KafkaProducer의 send() 메서드는 Future 객체를 반환하는데 이 객체는 RecordMetadata의 비동기 결과를 표현하는 것으로 정상적으로 브로커에 적재되었는지에 대한 데이터가 포함되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;send()의 결과값은 카프카 브로커로부터 응답을 기다렸다가 브로커로부터 응답이 오면 RecordMetadata 인스턴스를 반환합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737357177250&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Future&amp;lt;RecordMetadata&amp;gt; sendResult = kafkaProducer.send(record);
log.info(&quot;Send result: {}&quot;, sendResult.get());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지가 정상적으로 적재되었다면 토픽 이름과 파티션 번호, 오프셋 번호가 출력됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTetLz/btsLSQR9PAx/soOnsDtY196uWQEjEnYoJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTetLz/btsLSQR9PAx/soOnsDtY196uWQEjEnYoJk/img.png&quot; data-alt=&quot;RecordMetadata 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTetLz/btsLSQR9PAx/soOnsDtY196uWQEjEnYoJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTetLz%2FbtsLSQR9PAx%2FsoOnsDtY196uWQEjEnYoJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1364&quot; height=&quot;48&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RecordMetadata 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그러나 동기로 프로듀서의 전송 결과를 확인하는 것은 빠른 전송에 장애물이 될 수 있기 때문에&amp;nbsp;Callback 인터페이스를 구현하여 비동기로 결과를 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737357603053&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class ProducerCallback implements Callback {

    private static final Logger log = LoggerFactory.getLogger(ProducerCallback.class);

    @Override
    public void onCompletion(RecordMetadata recordMetadata, Exception e) {
        if (e != null) {
            log.error(e.getMessage(), e);
        } else {
            log.info(&quot;Record sent to topic: {}, partition: {}, offset: {}&quot;,
                recordMetadata.topic(),
                recordMetadata.partition(),
                recordMetadata.offset()
            );
        }
    }

}

kafkaProducer.send(record, new ProducerCallback());&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2302&quot; data-origin-height=&quot;48&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7lHQx/btsLUhHNevX/cb8FMxIaqy4xPm3gGeh9e1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7lHQx/btsLUhHNevX/cb8FMxIaqy4xPm3gGeh9e1/img.png&quot; data-alt=&quot;Callback 로그&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7lHQx/btsLUhHNevX/cb8FMxIaqy4xPm3gGeh9e1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7lHQx%2FbtsLUhHNevX%2Fcb8FMxIaqy4xPm3gGeh9e1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2302&quot; height=&quot;48&quot; data-origin-width=&quot;2302&quot; data-origin-height=&quot;48&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Callback 로그&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;비동기로 결과를 받을 경우 동기로 결과를 받는 경우보다 더 빠른 속도로 데이터를 추가 처리할 수 있지만 비동기로 결과를 기다리는 동안 다음 데이터 전송이 성공하고 전에 전송한 데이터가 전송에 실패할 경우 데이터 순서가 역전될 위험이 있기 때문에&amp;nbsp;전송하는 데이터의 순서가 중요한 경우 사용해서는 안됩니다.&lt;/u&gt;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>API</category>
      <category>비동기</category>
      <category>옵션</category>
      <category>카프카</category>
      <category>클라이언트</category>
      <category>파티셔너</category>
      <category>프로듀서</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/433</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API#entry433comment</comments>
      <pubDate>Mon, 20 Jan 2025 16:28:12 +0900</pubDate>
    </item>
    <item>
      <title>카프카(Kafka)의 기본 개념 - 토픽(Topic), 파티션(Partition), 레코드(Record)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%86%A0%ED%94%BDTopic-%ED%8C%8C%ED%8B%B0%EC%85%98Partition-%EB%A0%88%EC%BD%94%EB%93%9CRecord</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;토픽(Topic)과&amp;nbsp;파티션(Partition)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽(Topic)은 카프카에서 데이터를 구분하기 위해 사용하는 단위입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽은 1개 이상의 파티션(Partition)을 소유하고 있고 파티션에는 프로듀서가 보낸 데이터들이 들어가 저장되는데 이 데이터를 레코드(Record)라고 부릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;844&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ2T8q/btsLROFU0XF/IGqZuoFuOceez9pNkK8Os0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ2T8q/btsLROFU0XF/IGqZuoFuOceez9pNkK8Os0/img.png&quot; data-alt=&quot;프로듀서가 토픽, 파티션에 리코드 적재&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ2T8q/btsLROFU0XF/IGqZuoFuOceez9pNkK8Os0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ2T8q%2FbtsLROFU0XF%2FIGqZuoFuOceez9pNkK8Os0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;296&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;844&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로듀서가 토픽, 파티션에 리코드 적재&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파티션은 카프카의 병렬처리의 핵심으로써 그룹으로 묶인 컨슈머들이 레코드를 병렬로 처리할 수 있도록 매칭됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머의 처리량이 한정된 상황에서 &lt;u&gt;파티션 개수와 컨슈머 개수를 늘려 스케일 아웃하여 병렬로 처리가 가능&lt;/u&gt;하므로 처리량이 증가하는 효과를 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGoEva/btsLSA8dNLE/cIWjkSEAo9m7hEdWd9RdP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGoEva/btsLSA8dNLE/cIWjkSEAo9m7hEdWd9RdP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGoEva/btsLSA8dNLE/cIWjkSEAo9m7hEdWd9RdP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGoEva%2FbtsLSA8dNLE%2FcIWjkSEAo9m7hEdWd9RdP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;350&quot; height=&quot;270&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;파티션은 FIFO(Firtst-in-first-out) 형태로 큐(Queue)와 비슷한 구조이지만 다른 점이 있습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;큐는 데이터를 가져가면 삭제하지만 카프카에서는 삭제하지 않고&amp;nbsp; 컨슈머가 데이터를 가져가는 것과 별개로 관리하게 됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;이러한 특징 때문에 토픽의 레코드는 다양한 목적을 가진 여러 컨슈머 그룹들이 토픽의 데이터를 여러 번 가져갈 수 있습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;토픽 이름 제약 조건&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽은 생성할 때 토픽 이름에 대한 제한사항이 존재합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;빈(empty) 문자열로 생성할 수 없습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;마침표 하나(.) 또는 마침표 둘(..)로 생성할 수 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;249자 미만으로 생성해야 합니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;영어 대소문자와 숫자 0부터 9 그리고 마침표(.), 언더바(_), 하이픈(-)의 조합으로만 생성할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;__consumer_offsets, __transaction_state(카프카 내부 관리 토픽)으로는 생성할 수 없습니다.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;카프카 내부적으로 사용하는 로직 때문에 마침표(.)와 언더바(_)가 동시에 들어가면 생성은 가능하지만 사용 시 이슈가 발생할 수 있습니다.(WARNING 메시지 발생)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;마침표(.)와 언더바(_)를 서로 치환한 경우 신규 토픽 이름과 동일하다면 생성할 수 없습니다.&lt;br /&gt;(예) 이름이 topic.name인 토픽이 있다면 topic_name으로 생성 불가&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;의미 있는 토픽 이름 작명 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽의 이름을 모호하게 작성하면 유지보수 시 어려움이 생길 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;최소한 토픽 이름을 통해 어떤 개발환경에서 사용되는 것인지 판단이 가능해야 하고, 어떤 애플리케이션에서 어떤 데이터 타입으로 사용되는지 유추할 수 있어야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전사에서 공통으로 사용하고 있다면 팀의 이름을, 히스토리를 파악하고 싶다면 업무 태스크의 고유번호를, 만약 클러스터(Cluster)를 2대 이상 운영할 때는 클러스터의 이름을 넣어 작명할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 토픽 이름 제약 조건에서 설명한 여러 특수문자를 넣어 토픽 이름의 구분자로 사용하여 편리하게 읽을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;토픽의 이름은 영어 대소문자 모두 지원하며 프로듀서나 컨슈머에서 사용 시 대소문자를 구분하여 처리하게 됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;그렇기 때문에 휴먼오류를 방지하기 위해. 카멜케이스(CamelCase)를 사용하기 보다는 케밥케이스(kebab-case) 또는 스네이크 표기법(snake_case)을 사용하는 것을 권장합니다.&lt;/u&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;예시&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;lt;환경&amp;gt;.&amp;lt;팀명&amp;gt;.&amp;lt;애플리케이션명&amp;gt;.&amp;lt;메세지타입&amp;gt; : prod.develop-team.order.json&lt;/li&gt;
&lt;li&gt;&amp;lt;프로젝트명&amp;gt;.&amp;lt;서비스명&amp;gt;.&amp;lt;환경&amp;gt;.&amp;lt;이벤트명&amp;gt; : commerce.order.prd.cancel&lt;/li&gt;
&lt;li&gt;&amp;lt;환경&amp;gt;.&amp;lt;서비스명&amp;gt;.&amp;lt;JIRA티켓&amp;gt;.&amp;lt;메시지타입&amp;gt; : prod.order.jira-123.json&lt;/li&gt;
&lt;li&gt;&amp;lt;클러스터명&amp;gt;.&amp;lt;환경&amp;gt;.&amp;lt;서비스명&amp;gt;.&amp;lt;메시지타입&amp;gt; : app-kafka.prod.order.json&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽 이름에 대한 규칙을 사전에 정의하고 구성원들이 그 규칙을 잘 따르지 않는다면 의미가 없거니와 모호한 토픽 이름이 생성되어 이것들은 기술 부채(technical debt)로 이어질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;게다가 토픽 이름 변경을 지원하지 않으므로 이름을 변경하기 위해서는 삭제 후 다시 생성해야 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;레코드(Record)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;레코드는 타임스탬프(Timestamp), 메시지 키(Key), 메시지 값(Value), 오프셋(Offset), 헤더(Header)로 구성되어 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;타임스탬프(Timestamp)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로듀서가 생성한 레코드가 브로커에 전송되면 타임스탬프(레코드가 생성된 시점)가 지정되어 저장되고, 적재된 레코드는 수정이 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &lt;u&gt;프로듀서가 레코드를 생성할 때 임의의 타임스탬프 값을 설정할 수 있고, 토픽 설정에 따라 브로커에 적재된 시간으로 저장될 수 있다는 점을 주의해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;메시지 키(Key)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 키는 메시지 값을 순서대로 처리하거나 메시지 값의 종류를 나타내기 위해 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 키를 사용하면 프로듀서가 토픽에 레코드를 전송할 때 메시지 키의 해시값을 토대로 파티션을 지정하게 되어, &lt;u&gt;동일한 메시지 키라면 동일한 파티션에 전송되게 됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 어느 파티션에 지정될지 알 수 없고 파티션 개수가 변경되면 메시지 키와 파티션 매칭이 달라지게 되므로 주의해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 메시지 키를 사용하지 않는다면 프로듀서 기본 설정 파티셔너에 따라서 파티션에 분배되어 적재됩니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;메시지 값(Value)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;메시지 값에는 실질적으로 처리할 데이터가 들어있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키와 값은 직렬화되어 브로커로 전송되기 때문에 컨슈머가 이용할 때는 직렬화한 형태와 동일한 형태로 역직렬화를 수행해야 정상적인 데이터를 얻을 수 있습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;오프셋(offset)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프셋은 0 이상의 숫자로 이루어져 있으며 직접 설정할 수 없고 이전에 전송된 레코드 오프셋+1 값으로 생성됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프셋은 컨슈머가 데이터를 가져갈 때 사용하게 되는데 오프셋을 사용하면 컨슈머 그룹으로 이루어진 컨슈머들이 파티션의 데이터를 어디까지 가져갔는지 명확히 지정할 수 있습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;헤더(Header)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤더는 레코드의 추가적인 정보를 담는 메타데이터 저장소 용도로 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤더는 키/값 형태로 데이터를 추가하여 레코드의 속성을 저장하여 컨슈머에서 참조할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글&lt;/p&gt;
&lt;figure id=&quot;og_1737358838926&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;카프카 커맨드 라인 툴(kafka command-line-tool) 명령어 설명 및 사용법&quot; data-og-description=&quot; 카프카&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;툴(kafka&amp;nbsp;command-line-tool)카프카(kafka)에서 제공하는 커맨드 라인 툴을 통해 카프카 브로커 운영에 필요한 다양한 명령을 내릴 수 있습니다.카프카를 운영할 때는 카프카 클&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%A7%A8%ED%8A%B8-%EB%9D%BC%EC%9D%B8-%ED%88%B4Kafka-command-line-tool-%ED%86%A0%ED%94%BDTopic-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%A7%A8%ED%8A%B8-%EB%9D%BC%EC%9D%B8-%ED%88%B4Kafka-command-line-tool-%ED%86%A0%ED%94%BDTopic-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d7alRU/hyX4zo4SJD/YJwxgRh1qpwGGwn7yMsMD1/img.png?width=800&amp;amp;height=19&amp;amp;face=0_0_800_19,https://scrap.kakaocdn.net/dn/NAdnv/hyX4pNxc3o/CVLO9kfLr5xv7AhPXca900/img.png?width=800&amp;amp;height=19&amp;amp;face=0_0_800_19,https://scrap.kakaocdn.net/dn/hN5uJ/hyX4nWtY9f/kaSSd19v94EdoVyuN7tfd1/img.png?width=3312&amp;amp;height=244&amp;amp;face=0_0_3312_244&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%A7%A8%ED%8A%B8-%EB%9D%BC%EC%9D%B8-%ED%88%B4Kafka-command-line-tool-%ED%86%A0%ED%94%BDTopic-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%A7%A8%ED%8A%B8-%EB%9D%BC%EC%9D%B8-%ED%88%B4Kafka-command-line-tool-%ED%86%A0%ED%94%BDTopic-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d7alRU/hyX4zo4SJD/YJwxgRh1qpwGGwn7yMsMD1/img.png?width=800&amp;amp;height=19&amp;amp;face=0_0_800_19,https://scrap.kakaocdn.net/dn/NAdnv/hyX4pNxc3o/CVLO9kfLr5xv7AhPXca900/img.png?width=800&amp;amp;height=19&amp;amp;face=0_0_800_19,https://scrap.kakaocdn.net/dn/hN5uJ/hyX4nWtY9f/kaSSd19v94EdoVyuN7tfd1/img.png?width=3312&amp;amp;height=244&amp;amp;face=0_0_3312_244');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;카프카 커맨드 라인 툴(kafka command-line-tool) 명령어 설명 및 사용법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt; 카프카&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;툴(kafka&amp;nbsp;command-line-tool)카프카(kafka)에서 제공하는 커맨드 라인 툴을 통해 카프카 브로커 운영에 필요한 다양한 명령을 내릴 수 있습니다.카프카를 운영할 때는 카프카 클&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>레코드</category>
      <category>이름</category>
      <category>제약조건</category>
      <category>카프카</category>
      <category>토픽</category>
      <category>파티션</category>
      <category>헤더</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/432</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%86%A0%ED%94%BDTopic-%ED%8C%8C%ED%8B%B0%EC%85%98Partition-%EB%A0%88%EC%BD%94%EB%93%9CRecord#entry432comment</comments>
      <pubDate>Fri, 17 Jan 2025 18:10:44 +0900</pubDate>
    </item>
    <item>
      <title>카프카 커맨드 라인 툴(kafka command-line-tool) 명령어 설명 및 사용법</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%A7%A8%ED%8A%B8-%EB%9D%BC%EC%9D%B8-%ED%88%B4Kafka-command-line-tool-%ED%86%A0%ED%94%BDTopic-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt; 카프카&amp;nbsp;커맨드&amp;nbsp;라인&amp;nbsp;툴(kafka&amp;nbsp;command-line-tool)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카(kafka)에서 제공하는 커맨드 라인 툴을 통해 카프카 브로커 운영에 필요한 다양한 명령을 내릴 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카를 운영할 때는 카프카 클러스터(Kafka Cluster)와 연동하여 데이터를 주고받는 것도 중요하지만 토픽(Topic)이나 파티션(Partition) 개수 변경과 같은 명령을 실행해야 하는 경우도 자주 발생합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;커맨드 라인 툴을 통해 명령을 실행할 때 필수 옵션과 선택 옵션이 있는데, &lt;/u&gt;&lt;br /&gt;&lt;u&gt;선택 옵션은 지정하지 않을 시 브로커에 설정된 기본 설정값 또는 커맨드 라인 툴의 기본값으로 대체되어 설정되기 때문에 브로커에 옵션이나 커맨드 라인 툴의 기본값이 어떻게 되어있는지 확인한 후에 사용해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. kafka-topics.sh&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka-topics.sh을 통해 토픽(Topic)과 관련된 명령을 실행할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1. 토픽(Topic) 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1737018438653&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-topics.sh --create \
    --bootstrap-server {브로커IP}:{브로커Port} \
    --partitions 3 \
    --replication-factor 1 \
    --config retention.ms 172800000 \
    --topic {토픽명}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--create : 토픽을 생성하는 명령어 명시&lt;/li&gt;
&lt;li&gt;--bootstrap-server : 토픽을 생성할 브로커 설정&lt;/li&gt;
&lt;li&gt;--topic : 토픽 이름 설정&lt;/li&gt;
&lt;li&gt;--partitions : 파티션 개수 설정(default: config/server.properties 파일에 num.partitions 옵션값)&lt;/li&gt;
&lt;li&gt;--replication-factor : 복제할 파티션 개수 설정(1로 설정 시 복제하지 않음, 2로 설정 시 1개의 복제본)&lt;/li&gt;
&lt;li&gt;--config : 추가 설정&lt;/li&gt;
&lt;li&gt;retention.ms config : 토픽에 데이터를 유지하는 기간을 설정 (172800000ms = 2일)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2902&quot; data-origin-height=&quot;70&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ua5Tu/btsLQtPAjkR/Te17OlOyRXtHVFzLcXz6b0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ua5Tu/btsLQtPAjkR/Te17OlOyRXtHVFzLcXz6b0/img.png&quot; data-alt=&quot;토픽 생성(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ua5Tu/btsLQtPAjkR/Te17OlOyRXtHVFzLcXz6b0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fua5Tu%2FbtsLQtPAjkR%2FTe17OlOyRXtHVFzLcXz6b0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2902&quot; height=&quot;70&quot; data-origin-width=&quot;2902&quot; data-origin-height=&quot;70&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토픽 생성(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;토픽 리스트 조회&lt;/h4&gt;
&lt;pre id=&quot;code_1737074121055&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-topics.sh --bootstrap-server {브로커IP}:{브로커Port} --list --exclude-internal&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--list : 토픽 목록을 조회하는 명령어 명시&lt;/li&gt;
&lt;li&gt;&lt;span&gt;--exclude-internal : 인터널 토픽(internal topic)은 제외 설정(인터널 토픽은 카프카 내부 관리를 위한 토픽)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHs2va/btsLPO0XeEQ/URJqEAHzIMLtWhwuMePM9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHs2va/btsLPO0XeEQ/URJqEAHzIMLtWhwuMePM9k/img.png&quot; data-alt=&quot;토픽 리스트 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHs2va/btsLPO0XeEQ/URJqEAHzIMLtWhwuMePM9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHs2va%2FbtsLPO0XeEQ%2FURJqEAHzIMLtWhwuMePM9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1674&quot; height=&quot;72&quot; data-origin-width=&quot;1674&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토픽 리스트 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3. 토픽 상세 조회&lt;/h4&gt;
&lt;pre id=&quot;code_1737074472678&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-topics.sh --bootstrap-server {브로커IP}:{브로커Port} --describe --topic {토픽명}
Topic: {토픽명}	TopicId: b1svcmTcQROJyHafTtVZaA	PartitionCount: 3	ReplicationFactor: 1	Configs: retention.ms=172800000
    Topic: kafka-topic-test	Partition: 0	Leader: 3	Replicas: 3	Isr: 3	Elr: N/A	LastKnownElr: N/A
    Topic: kafka-topic-test	Partition: 1	Leader: 1	Replicas: 1	Isr: 1	Elr: N/A	LastKnownElr: N/A
    Topic: kafka-topic-test	Partition: 2	Leader: 2	Replicas: 2	Isr: 2	Elr: N/A	LastKnownElr: N/A&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--describe : 토픽 목록을 조회하는 명령어 명시&lt;/li&gt;
&lt;li&gt;PartitionCount : 파티션의 개수&lt;/li&gt;
&lt;li&gt;ReplicationFactor : 복제 파티션의 개수&lt;/li&gt;
&lt;li&gt;Configs : 기타 토픽을 구성하는 옵션값 표시&lt;/li&gt;
&lt;li&gt;Leader : 현재 해당 파티션의 리더 브로커&lt;/li&gt;
&lt;li&gt;Replicas : 해당 파티션의 데이터를 복제하고 있는 모든 브로커&lt;/li&gt;
&lt;li&gt;Isr(In-Sync Replicas) : 리더와 동기화 상태를 유지하고 있는 브로커&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3316&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUHMNX/btsLQspBXKK/1jQe01j17KnyUTYijQc8bK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUHMNX/btsLQspBXKK/1jQe01j17KnyUTYijQc8bK/img.png&quot; data-alt=&quot;토픽 상세 정보 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUHMNX/btsLQspBXKK/1jQe01j17KnyUTYijQc8bK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUHMNX%2FbtsLQspBXKK%2F1jQe01j17KnyUTYijQc8bK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3316&quot; height=&quot;208&quot; data-origin-width=&quot;3316&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토픽 상세 정보 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-4. 토픽 옵션 수정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽 옵션을 변경하기 위해서는 kafka-topics.sh 또는 kafak-configs.sh를 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽에 대한 정보를 관리하는 일부 로직이 다른 명령어로 넘어갔기 때문에 명령어가 파편화되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-4-1. 파티션 개수 변경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파티션 개수 변경을 위해서는 kafka-topics.sh를 사용해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737077034232&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-topics.sh --bootstrap-server {브로커IP}:{브로커Port} \
    --topic {토픽명} \
    --alter \
    --partitions 4&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--alter, partitions : 파티션의 개수 설정(파티션은 줄일 수 없기 때문에 반드시 늘려야 하는 상황에만 사용)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3306&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cA8tYM/btsLPuoia7v/eHX9IDpSjUuA11zOJVdZPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cA8tYM/btsLPuoia7v/eHX9IDpSjUuA11zOJVdZPK/img.png&quot; data-alt=&quot;파티션 개수 변경(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cA8tYM/btsLPuoia7v/eHX9IDpSjUuA11zOJVdZPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcA8tYM%2FbtsLPuoia7v%2FeHX9IDpSjUuA11zOJVdZPK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3306&quot; height=&quot;68&quot; data-origin-width=&quot;3306&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;파티션 개수 변경(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3312&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Egqnn/btsLP0NLOyj/C0nvkh47mkIjzjol6bPRg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Egqnn/btsLP0NLOyj/C0nvkh47mkIjzjol6bPRg1/img.png&quot; data-alt=&quot;토픽 상세 정보 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Egqnn/btsLP0NLOyj/C0nvkh47mkIjzjol6bPRg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEgqnn%2FbtsLP0NLOyj%2FC0nvkh47mkIjzjol6bPRg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3312&quot; height=&quot;244&quot; data-origin-width=&quot;3312&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토픽 상세 정보 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1-4-2. 리텐션 기간 변경&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리텐션 기간을 변경하기 위해서는 kafka-configs.sh를 사용해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737077411727&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-configs.sh --bootstrap-server {브로커IP}:{브로커Port} \ 
    --entity-type topics \
    --entity-name {토픽명} \
    --alter --add-config retention.ms=86400000&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--alter, --add-config : 리텐션 기간 설정 (이미 설정된 옵션값이 있다면 변경, 없다면 추가)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2804&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/erU3wU/btsLQFWw1Y3/E1yAxNWq2eLYAJuWK6g3I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/erU3wU/btsLQFWw1Y3/E1yAxNWq2eLYAJuWK6g3I1/img.png&quot; data-alt=&quot;리텐션 기간 변경(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/erU3wU/btsLQFWw1Y3/E1yAxNWq2eLYAJuWK6g3I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FerU3wU%2FbtsLQFWw1Y3%2FE1yAxNWq2eLYAJuWK6g3I1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2804&quot; height=&quot;68&quot; data-origin-width=&quot;2804&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;리텐션 기간 변경(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3308&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqUttS/btsLP1slHWN/CItaMaQ650Jx3fWVWaToe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqUttS/btsLP1slHWN/CItaMaQ650Jx3fWVWaToe1/img.png&quot; data-alt=&quot;토픽 상세 정보 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqUttS/btsLP1slHWN/CItaMaQ650Jx3fWVWaToe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqUttS%2FbtsLP1slHWN%2FCItaMaQ650Jx3fWVWaToe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3308&quot; height=&quot;208&quot; data-origin-width=&quot;3308&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토픽 상세 정보 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. kafka-console-producer.sh&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka-console-producer.sh를 통해 토픽에 데이터를 넣을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;주의해야 할 점은 kafka-console-producer.sh로 전송되는 레코드 값은 UTF-8을 기반으로 Byte로 변환되고 ByteArraySerializer로만 직열화 되어 String이 아닌 타입으로는 직렬화하여 전송할 수 없습니다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다른 타입으로 직렬화하여 데이터를 전송하고 싶다면 카프카 프로듀서 애플리케이션을 직접 개발해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽에 넣는 데이터는 레코드(Record)라고 부르며 메시지 키(key)와 메시지 값(value)으로 이루어져 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737079185505&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# key를 설정하지 않은 경우
$ /bin/kafka-console-producer.sh --bootstrap-server {브로커IP}:{브로커Port} --topic {토픽명}
&amp;gt;beekei
&amp;gt;kafka
&amp;gt;test
&amp;gt;0
&amp;gt;1
&amp;gt;2
&amp;gt;3

# key를 설정한 경우
$ /bin/kafka-console-producer.sh --bootstrap-server {브로커IP}:{브로커Port} --topic {토픽명} \
--property &quot;parse.key=true&quot; \
--property &quot;key.separator=:&quot;
&amp;gt;key1:hasKeyValue1
&amp;gt;key2:hasKeyValue2
&amp;gt;key3:hasKeyValue3&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;parse.key=true : 레코드를 전송할 때 키를 추가&lt;/li&gt;
&lt;li&gt;key.separator : 키를 구분하는 구분자 설정(default: Tab delimiter(\t))&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2640&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMKAGy/btsLQ1rnvjY/AvxAS9tj1OqHafEVPBqwaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMKAGy/btsLQ1rnvjY/AvxAS9tj1OqHafEVPBqwaK/img.png&quot; data-alt=&quot;키를 설정하지 않은 레코드 추가(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMKAGy/btsLQ1rnvjY/AvxAS9tj1OqHafEVPBqwaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMKAGy%2FbtsLQ1rnvjY%2FAvxAS9tj1OqHafEVPBqwaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2640&quot; height=&quot;270&quot; data-origin-width=&quot;2640&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키를 설정하지 않은 레코드 추가(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2632&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GBuhl/btsLRG1mKhh/5UmXiYx247nNQtCjLdkJwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GBuhl/btsLRG1mKhh/5UmXiYx247nNQtCjLdkJwK/img.png&quot; data-alt=&quot;키를 설정한 레코드 추가(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GBuhl/btsLRG1mKhh/5UmXiYx247nNQtCjLdkJwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGBuhl%2FbtsLRG1mKhh%2F5UmXiYx247nNQtCjLdkJwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2632&quot; height=&quot;136&quot; data-origin-width=&quot;2632&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키를 설정한 레코드 추가(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;키 값을 설정하지 않은 경우 레코드 배치 단위(레코드 전송 묶음)로 라운드 로빈으로 파티션에 전송됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;키 값을 설정한 경우 키의 해시값을 작성하여 존재하는 파티션 중 한 개에 할당됩니다. 이로 인해 키가 동일한 경우에는 파티셔너(Partitioner)에 의해 동일한 파티션으로 전송됩니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;하지만 파티션을 추가한 경우에는 동일한 파티션으로 전송된다는 보장은 없으니 만약 파티션을 추가했다면 커스텀 파티셔너(Partitioner)를 구현해서 운영해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. kafka-console-consumer.sh&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka-console-consumer.sh를 통해 토픽에 저장된 데이터를 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737081808298&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 키를 출력하지 않고 조회
$ /bin/kafka-console-consumer.sh --bootstrap-server {브로커IP}:{브로커Port} --topic {토픽명}
hasKeyValue3
hasKeyValue1
hasKeyValue2
beekei
kafka
test
0
1
2
3

# 키를 출력하고 조회
$ /bin/kafka-console-consumer.sh --bootstrap-server {브로커IP}:{브로커Port} --topic {토픽명} \
&amp;gt; --property print.key=true \
&amp;gt; --property key.separator=&quot;:&quot; \
&amp;gt; --group consumer-group-1 \
&amp;gt; --from-beginning
null:beekei
null:kafka
null:test
null:0
null:1
null:2
null:3
key3:hasKeyValue3
key1:hasKeyValue1
key2:hasKeyValue2&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--from-beginning : 가장 처음 데이터부터 출력 설정&lt;/li&gt;
&lt;li&gt;--property : 키와 관련된 옵션 설정
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;print.key=true 선언으로 키와 함께 출력&lt;/li&gt;
&lt;li&gt;key.separator 선언으로 키를 구분하는 구분자 설정 - default: Tab delimiter(\t)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;--group : 컨슈머 그룹(Consumer Group) 생성&lt;br /&gt;(컨슈머 그룹은 따로 생성하는 명령을 날리지 않고 컨슈머를 동작할 때 컨슈머 그룹을 지정하면 자동으로 생성됩니다.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨슈머 그룹은 1개 이상의 컨슈머로 이루어져 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 그룹이 토픽의 메시지를 어디까지 가져갔는지 레코드의 오프셋 번호를 브로커에 커밋합니다.(__consumer_offsets 토픽에 저장)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로써 그룹 내 컨슈머들은 같은 메세지를 중복으로 가져갈 수 없게 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;376&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WCyof/btsLP8EYtZ1/MxfiiCtSdyr9m1cOBscUi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WCyof/btsLP8EYtZ1/MxfiiCtSdyr9m1cOBscUi0/img.png&quot; data-alt=&quot;키를 출력하지 않고 레코드 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WCyof/btsLP8EYtZ1/MxfiiCtSdyr9m1cOBscUi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWCyof%2FbtsLP8EYtZ1%2FMxfiiCtSdyr9m1cOBscUi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2012&quot; height=&quot;376&quot; data-origin-width=&quot;2012&quot; data-origin-height=&quot;376&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키를 출력하지 않고 레코드 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1762&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1UGaV/btsLPPsab6j/J8pAuRKTKDk9sAloZLu010/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1UGaV/btsLPPsab6j/J8pAuRKTKDk9sAloZLu010/img.png&quot; data-alt=&quot;키를 출력하고 레코드 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1UGaV/btsLPPsab6j/J8pAuRKTKDk9sAloZLu010/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1UGaV%2FbtsLPPsab6j%2FJ8pAuRKTKDk9sAloZLu010%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1762&quot; height=&quot;514&quot; data-origin-width=&quot;1762&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;키를 출력하고 레코드 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;주의해야 할 점은 전송했던 데이터의 순서가 출력되는 순서와 다르다는 점입니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka-console-consumer.sh 명령어를 통해 토픽의 데이터를 가져가게 되면 &lt;u&gt;토픽의 모든 파티션으로부터 동일한 중요도로 데이터를 가져가기 때문에&lt;/u&gt; 프로듀서가 토픽에 넣은 데이터의 순서와 컨슈머가 토픽에서 가져간 데이터의 순서가 달라지게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;만약 데이터의 순서를 보장해야 한다면 파티션을 1개로 구성된 토픽을 만들어 사용해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4. kafka-consumer-groups.sh&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka-consumer-groups.sh를 통해 &lt;span style=&quot;text-align: start;&quot;&gt;생성된 컨슈머 그룹의 리스트와 상세 내용을&lt;span&gt;&amp;nbsp;확인할 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4-1. 컨슈머 그룹 리스트 조회&lt;/h4&gt;
&lt;pre id=&quot;code_1737097145150&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-consumer-groups.sh --bootstrap-server {브로커IP}:{브로커Port} --list&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--list 옵션으로 컨슈머 그룹의 목록을 조회하는 명령어 명시&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGVwc3/btsLQpm4i8C/yvDzWHjX1TVkJcNQOnOIz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGVwc3/btsLQpm4i8C/yvDzWHjX1TVkJcNQOnOIz1/img.png&quot; data-alt=&quot;컨슈머 그룹 목록 조회(confluentinc/cp-kafka 도커 이미지 사용)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGVwc3/btsLQpm4i8C/yvDzWHjX1TVkJcNQOnOIz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGVwc3%2FbtsLQpm4i8C%2FyvDzWHjX1TVkJcNQOnOIz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1534&quot; height=&quot;206&quot; data-origin-width=&quot;1534&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨슈머 그룹 목록 조회(confluentinc/cp-kafka 도커 이미지 사용)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4-2. 컨슈머 그룹 상세 정보 조회&lt;/h4&gt;
&lt;pre id=&quot;code_1737097527321&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-consumer-groups.sh --bootstrap-server {브로커IP}:{브로커Port} --group {그룹명} --describe
GROUP            TOPIC           PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
consumer-group-1 topic-test      0          7               7               0               -               -               -
consumer-group-1 topic-test      1          1               1               0               -               -               -
consumer-group-1 topic-test      2          2               12              10              -               -               -&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 그룹이 마지막으로 커밋한 토픽과 파티션의 상세 정보를 확인할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--group : 조회할 그룹 명시&lt;/li&gt;
&lt;li&gt;--describe : 컨슈머 그룹의 상세 내용을 조회하는 명령어 명시&lt;/li&gt;
&lt;li&gt;TOPIC, PARTITION : 마지막으로 커밋한 토픽과 파티션&lt;/li&gt;
&lt;li&gt;CURRENT-OFFSET : 해당 그룹이 가져간 토픽의 파티션에 가장 최신 오프셋&lt;/li&gt;
&lt;li&gt;LOG-END-OFFSET : &lt;span style=&quot;text-align: left;&quot;&gt;해당&lt;span&gt; 그룹의 컨슈머가 최종으로 커밋한 오프셋&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;LAG : 해당 그룹이 토픽의 파티션에 있는 데이터를 가져가는데 발생한 지연 지표&lt;br /&gt;(LOG-END-OFFSET과 CURRENT-OFFSET 차이)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;CONSUMER-ID : &lt;span style=&quot;text-align: left;&quot;&gt;컨슈머의 토픽(파티션) 할당을 위해&lt;/span&gt;&amp;nbsp;사용하는 ID&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;HOST : 컨슈머가 동작하는 host명&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;&lt;span&gt;CLIENT-ID : 컨슈머에 할당된 ID&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카를 운영할 때 컨슈머 그룹이 중복되지 않는지, 랙이 얼마인지 파악하거나 접근 중이 컨슈머의 호스트, IP를 확인하기에 유용합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5. kafka-verifiable-producer, consumer.sh&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kafka-verifiable로 시작하는 2개의 스크립트를 사용하려면 메시지를 코드 없이 주고받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카 클러스터 설치 후 간단한 네트워크 통신 테스트를 진행할 때 유용합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737098640691&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-verifiable-producer.sh --bootstrap-server {브로커IP}:{브로커Port} \
    --max-messages 10 \ 
    --topic {토픽명}
{&quot;timestamp&quot;:1737098564036,&quot;name&quot;:&quot;startup_complete&quot;}
{&quot;timestamp&quot;:1737098564144,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;0&quot;,&quot;offset&quot;:12,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564146,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;1&quot;,&quot;offset&quot;:13,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564146,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;2&quot;,&quot;offset&quot;:14,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;3&quot;,&quot;offset&quot;:15,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;4&quot;,&quot;offset&quot;:16,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;5&quot;,&quot;offset&quot;:17,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;6&quot;,&quot;offset&quot;:18,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;7&quot;,&quot;offset&quot;:19,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;8&quot;,&quot;offset&quot;:20,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564147,&quot;name&quot;:&quot;producer_send_success&quot;,&quot;key&quot;:null,&quot;value&quot;:&quot;9&quot;,&quot;offset&quot;:21,&quot;topic&quot;:&quot;topic-test&quot;,&quot;partition&quot;:2}
{&quot;timestamp&quot;:1737098564155,&quot;name&quot;:&quot;shutdown_complete&quot;}
{&quot;timestamp&quot;:1737098564156,&quot;name&quot;:&quot;tool_data&quot;,&quot;sent&quot;:10,&quot;acked&quot;:10,&quot;target_throughput&quot;:-1,&quot;avg_throughput&quot;:82.64462809917356}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 모두 전송된 이후 통계값을 확인할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--max-messages : 전송하는 데이터 개수 설정(-1로 설정할 경우 kafka-verifiable-producer.sh가 종료될 때까지 계속 전송)&lt;/li&gt;
&lt;li&gt;--topic : 데이터를 받을 토픽&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2060&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OdEky/btsLQnv1Vce/5igJkwjbXKumY853IkdWqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OdEky/btsLQnv1Vce/5igJkwjbXKumY853IkdWqk/img.png&quot; data-alt=&quot;confluentinc/cp-kafka 도커 이미지 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OdEky/btsLQnv1Vce/5igJkwjbXKumY853IkdWqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOdEky%2FbtsLQnv1Vce%2F5igJkwjbXKumY853IkdWqk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2060&quot; height=&quot;476&quot; data-origin-width=&quot;2060&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;confluentinc/cp-kafka 도커 이미지 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전송한 데이터는 kafka-verifiable-consumer.sh로 확인할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737099329804&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ /bin/kafka-verifiable-consumer.sh --bootstrap-server {브로커IP}:{브로커Port} \
    --topic {토픽명} \ 
    --group-id {그룹ID}
{&quot;timestamp&quot;:1737099109207,&quot;name&quot;:&quot;startup_complete&quot;}
{&quot;timestamp&quot;:1737099112388,&quot;name&quot;:&quot;partitions_assigned&quot;,&quot;partitions&quot;:[{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:0},{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:1},{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:2}]}
{&quot;timestamp&quot;:1737099112422,&quot;name&quot;:&quot;records_consumed&quot;,&quot;count&quot;:10,&quot;partitions&quot;:[{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:1,&quot;count&quot;:10,&quot;minOffset&quot;:0,&quot;maxOffset&quot;:9}]}
{&quot;timestamp&quot;:1737099112428,&quot;name&quot;:&quot;offsets_committed&quot;,&quot;offsets&quot;:[{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:1,&quot;offset&quot;:10}],&quot;success&quot;:true}
{&quot;timestamp&quot;:1737099126231,&quot;name&quot;:&quot;partitions_revoked&quot;,&quot;partitions&quot;:[{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:0},{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:1},{&quot;topic&quot;:&quot;verifiable-test&quot;,&quot;partition&quot;:2}]}
{&quot;timestamp&quot;:1737099126593,&quot;name&quot;:&quot;shutdown_complete&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--group-id : 컨슈머 그룹을 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;6. kafka- delete-records.sh&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;kafka-delete-records.sh를 통해&lt;span&gt; 토픽의 데이터를 지울 수 있습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;토픽의 데이터 중 가장 오래된 데이터(가장 낮은 숫자의 오프셋)부터 특정 시점까지 삭제할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;삭제하고자 하는 데이터의 대한 토픽, 파티션, 오프셋 정보를 파일로 저장해서 사용해야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1737100283758&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ vim delete-records.json # 리코드 삭제 파일 생성
{&quot;partitions&quot;: [{&quot;topic&quot;: &quot;topic-test&quot;, &quot;partition&quot;: 0, &quot;offset&quot;: 5}], &quot;version&quot;: 1}

$ /bin/kafka-delete-records.sh --bootstrap-server {브로커IP}:{브로커Port} \
    --offset-json-file delete-records.json
Executing records delete operation
Records delete operation completed:
partition: topic-test-0	low_watermark: 5&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;--offset-json-file : 읽어드릴 파일 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;152&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wETRI/btsLRM2loUO/hIpLgQZUKXE1iigwK85qK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wETRI/btsLRM2loUO/hIpLgQZUKXE1iigwK85qK0/img.png&quot; data-alt=&quot;confluentinc/cp-kafka 도커 이미지 사용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wETRI/btsLRM2loUO/hIpLgQZUKXE1iigwK85qK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwETRI%2FbtsLRM2loUO%2FhIpLgQZUKXE1iigwK85qK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2250&quot; height=&quot;152&quot; data-origin-width=&quot;2250&quot; data-origin-height=&quot;152&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;confluentinc/cp-kafka 도커 이미지 사용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;토픽의 특정 레코드 하나만 삭제되는 것이 아니라, 파티션에 존재하는 가장 오래된 오프셋부터 지정한 오프셋까지 삭제되는 것을 주의해야 합니다.&lt;/u&gt; 카프카에서는 토픽의 파티션에 저장된 특정 데이터만 삭제하는 것은 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글&lt;/p&gt;
&lt;figure id=&quot;og_1737358871172&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;카프카 클라이언트(Kafka Client) - 프로듀서(Producer) API 설명 및 예제&quot; data-og-description=&quot;카프카 클라이언트(Kafka Client)란?카프카 클러스터(Kafka Cluster)에 명령을 내리거나 데이터를 송수신하기 위해 다양한 API를 제공합니다.카프카 클라이언트는 라이브러리이기 때문에 자체 라이프사&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3GtNJ/hyX4w0dhjR/TIhkvxcHJQ5MShsskC8Vm0/img.png?width=800&amp;amp;height=482&amp;amp;face=0_0_800_482,https://scrap.kakaocdn.net/dn/SwGM1/hyX4lqPuRS/00c6AdYP7281nLcMH4VKbK/img.png?width=800&amp;amp;height=482&amp;amp;face=0_0_800_482,https://scrap.kakaocdn.net/dn/QXg5Z/hyX4q6JtKG/GB68YVQ50b3IxxYPZHhaLk/img.png?width=1678&amp;amp;height=1012&amp;amp;face=0_0_1678_1012&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8Kafka-Client-%ED%94%84%EB%A1%9C%EB%93%80%EC%84%9CProducer-API&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3GtNJ/hyX4w0dhjR/TIhkvxcHJQ5MShsskC8Vm0/img.png?width=800&amp;amp;height=482&amp;amp;face=0_0_800_482,https://scrap.kakaocdn.net/dn/SwGM1/hyX4lqPuRS/00c6AdYP7281nLcMH4VKbK/img.png?width=800&amp;amp;height=482&amp;amp;face=0_0_800_482,https://scrap.kakaocdn.net/dn/QXg5Z/hyX4q6JtKG/GB68YVQ50b3IxxYPZHhaLk/img.png?width=1678&amp;amp;height=1012&amp;amp;face=0_0_1678_1012');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;카프카 클라이언트(Kafka Client) - 프로듀서(Producer) API 설명 및 예제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;카프카 클라이언트(Kafka Client)란?카프카 클러스터(Kafka Cluster)에 명령을 내리거나 데이터를 송수신하기 위해 다양한 API를 제공합니다.카프카 클라이언트는 라이브러리이기 때문에 자체 라이프사&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>명령어</category>
      <category>브로커</category>
      <category>삭제</category>
      <category>옵션</category>
      <category>조회</category>
      <category>추가</category>
      <category>카프카</category>
      <category>커맨드</category>
      <category>토픽</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/431</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4-%EC%BB%A4%EB%A7%A8%ED%8A%B8-%EB%9D%BC%EC%9D%B8-%ED%88%B4Kafka-command-line-tool-%ED%86%A0%ED%94%BDTopic-%EA%B4%80%EB%A0%A8-%EB%AA%85%EB%A0%B9%EC%96%B4#entry431comment</comments>
      <pubDate>Fri, 17 Jan 2025 10:37:23 +0900</pubDate>
    </item>
    <item>
      <title>카프카(Kafka)의 기본 개념 - 브로커(Broker)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EC%84%A4%EB%AA%85-%EB%B8%8C%EB%A1%9C%EC%BB%A4Broker</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;브로커(Broker)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브로커(broker)는 카프카 클러스터(Kafka Cluster)의 구성 요소로, 데이터를 저장하고 프로듀서(Producer)와 컨슈머(Consumer) 간의 통신을 담당합니다. 카프카 클러스터는 여러 브로커로 구성되며 데이터들을 분산 저장하여 안전하게 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1844&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/box5UC/btsLQqSsXqZ/WlpJZXEBnnKi1b59iBm1O0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/box5UC/btsLQqSsXqZ/WlpJZXEBnnKi1b59iBm1O0/img.png&quot; data-alt=&quot;카프카 클러스터와 브로커의 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/box5UC/btsLQqSsXqZ/WlpJZXEBnnKi1b59iBm1O0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbox5UC%2FbtsLQqSsXqZ%2FWlpJZXEBnnKi1b59iBm1O0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;185&quot; data-origin-width=&quot;1844&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;카프카 클러스터와 브로커의 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 저장, 전송&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브로커는 프로듀서로부터 데이터를 전달받으면 프로듀서가 요청한 토픽(Topic) 내부에 존재하는 파티션(Partition)에 데이터를 저장하고 컨슈머가 데이터를 요청하면 해당 파티션에 저장된 데이터를 전달합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1844&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eiX9Ro/btsLOYCSnFe/6g9wEbK04ki21WjoFNTXGK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eiX9Ro/btsLOYCSnFe/6g9wEbK04ki21WjoFNTXGK/img.png&quot; data-alt=&quot;브로커에 세부 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eiX9Ro/btsLOYCSnFe/6g9wEbK04ki21WjoFNTXGK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeiX9Ro%2FbtsLOYCSnFe%2F6g9wEbK04ki21WjoFNTXGK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;218&quot; data-origin-width=&quot;1844&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;브로커에 세부 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 전달된 데이터는 파일 시스템에 저장되는데,&amp;nbsp;&lt;br /&gt;파일 시스템은 다루기는 편하지만 입출력이 많아질 경우 메모리에 올려서 사용하는 것보다 처리 속도가 현저히 느려집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카는 이러한 문제를 해결하기 위해 페이지 캐시(Page Cache) 메모리 영역을 활용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용하여 한번 읽은 파일의 내용을 페이지 캐시 영역에 저장하여 해당 파일에 접근할 경우 디스크에서 읽지 않고 메모리에서 직접 읽어 속도가 빠릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 특징 때문에 JVM의 heap 메모리 사이즈를 크게 설정할 필요가 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmYhLK/btsLP85B8iE/DXqzKbYzpN4qFJj1sQ5Rd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmYhLK/btsLP85B8iE/DXqzKbYzpN4qFJj1sQ5Rd1/img.png&quot; data-alt=&quot;카프카 File System (출처: https://dzone.com/articles/a-deep-dive-into-the-differences-between-kafka-and)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmYhLK/btsLP85B8iE/DXqzKbYzpN4qFJj1sQ5Rd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmYhLK%2FbtsLP85B8iE%2FDXqzKbYzpN4qFJj1sQ5Rd1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;294&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;카프카 File System (출처: https://dzone.com/articles/a-deep-dive-into-the-differences-between-kafka-and)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 복제, 싱크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 복제의 이유는 클러스터로 묶인 브로커 중 일부에 장애가 발생하더라도 데이터를 유실하지 않고 안전하게 사용하기 위함입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카의 데이터 복제는 파티션 단위로 이루어지고 토픽을 생성할 때 파티션의 복제 개수(replication factor)를 설정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 설정하지 않는다면 브로커에 설정된 옵션값을 따라갑니다. 복제 개수의 최소값은 1(복제 없음)이고 최댓값은 브로커에 개수입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;584&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTzdBN/btsLPy4Kkzv/hEKkPW3CWFlgrvUbBLylK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTzdBN/btsLPy4Kkzv/hEKkPW3CWFlgrvUbBLylK1/img.png&quot; data-alt=&quot;복제 개수가 3인 Kafka Cluster&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTzdBN/btsLPy4Kkzv/hEKkPW3CWFlgrvUbBLylK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTzdBN%2FbtsLPy4Kkzv%2FhEKkPW3CWFlgrvUbBLylK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;182&quot; data-origin-width=&quot;1604&quot; data-origin-height=&quot;584&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;복제 개수가 3인 Kafka Cluster&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복제된 파티션은 리더(Leader)와 팔로워(Follower)로 구성되는데, &lt;br /&gt;팔로워 파티션들은 리더 파티션의 오프셋을 확인하여 현재 자신이 가지고 있는 오프셋과 차이가 나는 경우 리더 파티션으로부터 데이터를 가져와서 자신의 파티션에 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;이를 통해 복제 개수만큼 저장 용량이 증가한다는 단점이 있지만 데이터를 안전하게 사용할 수 있다는 장점 때문에 카프카를 운영할 때는 최소 2 이상의 복제 개수를 설정하는 것을 권장합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 Broker1에 장애가 발생해 다운되었다면 해당 브로커에 있는 리더 파티션은 사용할 수 없기 때문에 팔로워 파티션 중 하나가 리더 파티션 지위를 넘겨받습니다. 이를 통해 데이터가 유실되지 않고 데이터를 주고받을 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;624&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qT2Zh/btsLOCtmUz9/YX52gcppsJbk2Kln90teP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qT2Zh/btsLOCtmUz9/YX52gcppsJbk2Kln90teP1/img.png&quot; data-alt=&quot;Broker1 사용불가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qT2Zh/btsLOCtmUz9/YX52gcppsJbk2Kln90teP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqT2Zh%2FbtsLOCtmUz9%2FYX52gcppsJbk2Kln90teP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;185&quot; data-origin-width=&quot;1684&quot; data-origin-height=&quot;624&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Broker1 사용불가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카는 지속적으로 데이터를 처리해야 하므로 브로커의 상태가 비정상이라면 빠르게 클러스터에서 빼내는게 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클러스터의 다수 브로커 중 한대가 다른 브로커들의 상태를 체크하고 리더 파티션을 재분배하는 컨트롤러(Contorller) 역할을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 컨트롤러 브로커에 장애가 생긴다면 다른 브로커가 컨트롤러 역할을 합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;데이터 삭제&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;카프카는 다른 메시징 플랫폼과 다르게 컨슈머가 데이터를 가져가더라도 토픽의 데이터는 삭제되지 않고, 프로듀서나 컨슈머가 삭제 요청도 할 수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오직 브로커만이 데이터를 삭제할 수 있는데 로그 세그먼트(log segment)라는 파일 단위로 삭제가 이루어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세그먼트에는 다수의 데이터가 저장되어 있기 때문에 특정 데이터를 선별하여 삭제할 순 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세그먼트는 데이터가 쌓이는 동안 계속해서 열려있으며, 브로커에 log.segment.bytes 또는 log.segment.ms 옵션을 통하여 해당 조건에 도달했을때 세그먼트를 닫을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;너무 작은 용량으로 설정한다면 파일을 자주 여닫음으로써 부하가 발생할 수 있으므로 주의해야 합니다.&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;닫힌 세그먼트는 브로커에 log.retention.bytes 또는 log.retention.ms 옵션에 설정값이 넘으면 삭제됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;닫힌 세그먼트 파일을 체크하는 간격은 브로커에 log.retention.check.interval.ms 옵션으로 설정할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;컨슈머 오프셋 저장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오프셋(Offset)이란 각 파티션마다 데이터가 저장되는 위치를 의미합니다.&amp;nbsp; 이 오프셋을 통해 컨슈머가 데이터를 어디까지 가져갔는지 기억하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;커밋한 오프셋은 __consumer_offsets 토픽에 저장되고, 저장된 오프셋을 기준으로 다음 데이터를 가져가서 처리합니다.&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;코디네이터(Coordinator)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;클러스터의 브로커 중 한 대는 컨트롤러와 마찬가지로 코디네이터(Coordinator)의 역할을 수행하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코디네이터는 컨슈머가 컨슈머 그룹에서 빠지면 매칭되지 않은 파티션을 정상 동작하는 컨슈머로 재할당합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 파티션을 컨슈머로 재할당하는 과정을 리밸런스(Rebalance)라고 부릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글&lt;/p&gt;
&lt;figure id=&quot;og_1737358765385&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;카프카(Kafka)의 기본 개념 - 토픽(Topic), 파티션(Partition), 레코드(Record)&quot; data-og-description=&quot;토픽(Topic)과&amp;nbsp;파티션(Partition)토픽(Topic)은 카프카에서 데이터를 구분하기 위해 사용하는 단위입니다.토픽은 1개 이상의 파티션(Partition)을 소유하고 있고 파티션에는 프로듀서가 보낸 데이터들이&quot; data-og-host=&quot;devbksheen.tistory.com&quot; data-og-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%86%A0%ED%94%BDTopic-%ED%8C%8C%ED%8B%B0%EC%85%98Partition-%EB%A0%88%EC%BD%94%EB%93%9CRecord&quot; data-og-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%86%A0%ED%94%BDTopic-%ED%8C%8C%ED%8B%B0%EC%85%98Partition-%EB%A0%88%EC%BD%94%EB%93%9CRecord&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rgYSh/hyX4uH4NgH/HEZkpQFtoboytsoyG62bOK/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/4hDaB/hyX4AnZChL/zzEnuM7D1Sy9fbZr5mYQe1/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/bjJRlz/hyX4vUvFPD/SXLmgQK686NNvza5tlS4qK/img.png?width=1424&amp;amp;height=844&amp;amp;face=0_0_1424_844&quot;&gt;&lt;a href=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%86%A0%ED%94%BDTopic-%ED%8C%8C%ED%8B%B0%EC%85%98Partition-%EB%A0%88%EC%BD%94%EB%93%9CRecord&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%ED%86%A0%ED%94%BDTopic-%ED%8C%8C%ED%8B%B0%EC%85%98Partition-%EB%A0%88%EC%BD%94%EB%93%9CRecord&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rgYSh/hyX4uH4NgH/HEZkpQFtoboytsoyG62bOK/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/4hDaB/hyX4AnZChL/zzEnuM7D1Sy9fbZr5mYQe1/img.png?width=800&amp;amp;height=474&amp;amp;face=0_0_800_474,https://scrap.kakaocdn.net/dn/bjJRlz/hyX4vUvFPD/SXLmgQK686NNvza5tlS4qK/img.png?width=1424&amp;amp;height=844&amp;amp;face=0_0_1424_844');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;카프카(Kafka)의 기본 개념 - 토픽(Topic), 파티션(Partition), 레코드(Record)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;토픽(Topic)과&amp;nbsp;파티션(Partition)토픽(Topic)은 카프카에서 데이터를 구분하기 위해 사용하는 단위입니다.토픽은 1개 이상의 파티션(Partition)을 소유하고 있고 파티션에는 프로듀서가 보낸 데이터들이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devbksheen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Apache Kafka</category>
      <category>broker</category>
      <category>Cluster</category>
      <category>consumer</category>
      <category>Coordinator</category>
      <category>Kafka</category>
      <category>partition</category>
      <category>Producer</category>
      <category>record</category>
      <category>topic</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/430</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%B9%B4%ED%94%84%EC%B9%B4Kafka%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B0%9C%EB%85%90-%EC%84%A4%EB%AA%85-%EB%B8%8C%EB%A1%9C%EC%BB%A4Broker#entry430comment</comments>
      <pubDate>Thu, 16 Jan 2025 17:44:17 +0900</pubDate>
    </item>
    <item>
      <title>샤딩(Sharding)과 클러스터링(Clustering)</title>
      <link>https://devbksheen.tistory.com/entry/%EC%83%A4%EB%94%A9Sharding%EA%B3%BC-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81Clustering</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;샤딩(Sharding)과 클러스터링(Clustering)은 모두 대규모 데이터와 높은 트래픽을 처리하기 위해 사용되는 데이터 분산 기술입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;하지만 목적과 구현 방식에서 차이가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;28082c43-2f82-4a40-bcaa-082bcee536da&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;샤딩(Sharding)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 &lt;b&gt;수평적으로 분할&lt;/b&gt;하여 여러 데이터베이스 노드에 분산 저장하는 방식&lt;/li&gt;
&lt;li&gt;각각의 분할된 데이터는 샤드(Shard)라고 불리며, 각 샤드는 독립적으로 작동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 분산&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;전체 데이터셋을 여러 샤드로 나누어 저장&lt;/li&gt;
&lt;li&gt;샤드 간에는 중복 데이터가 거의 없고, 각 샤드가 고유 데이터만 저장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;샤드 키(Shard Key)&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터를 분산할 기준이 되는 필드&lt;/li&gt;
&lt;li&gt;예: 사용자 ID, 주문 ID, 날짜 등&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;수평 확장&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;샤드를 추가하면 데이터 저장 용량과 처리 능력이 확장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장단점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;대규모 데이터 처리를 효율적으로 분산&lt;/li&gt;
&lt;li&gt;쓰기 및 읽기 성능 향상&lt;/li&gt;
&lt;li&gt;데이터 크기 증가에 따른 유연한 확장&lt;/li&gt;
&lt;li&gt;잘못된 샤드 키 선택 시 데이터 불균형 발생&lt;/li&gt;
&lt;li&gt;샤드 간 쿼리는 복잡하며 성능 저하를 초래할 수 있음&lt;/li&gt;
&lt;li&gt;관리 복잡성 증가&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용 사례&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 크기가 급격히 증가하며, &lt;b&gt;수평 확장&lt;/b&gt;이 필요한 경우&lt;/li&gt;
&lt;li&gt;사용자 기반으로 데이터를 분리해야 하는 경우(예: 소셜 네트워크, 다중 테넌트 환경)&lt;/li&gt;
&lt;li&gt;특정 샤드 키를 기준으로 데이터 액세스가 자주 이루어지는 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;클러스터링(Clustering)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;정의&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동일한 데이터를 &lt;b&gt;여러 노드에 복제&lt;/b&gt;하여 가용성과 성능을 높이는 방식&lt;/li&gt;
&lt;li&gt;데이터는 모든 클러스터 노드에 동일하게 존재하며, 노드 간에 데이터 동기화가 이루어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;특징&lt;/b&gt;&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;데이터 복제&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클러스터 내 모든 노드에 데이터가 복제&lt;/li&gt;
&lt;li&gt;복제본을 통해 데이터 가용성 및 안정성을 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;읽기 성능 향상&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;읽기 요청을 여러 노드에 분산하여 처리&lt;/li&gt;
&lt;li&gt;쓰기 작업은 보통 단일 마스터 노드에서 처리한 후 복제&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고가용성&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;특정 노드에 장애가 발생해도 다른 노드에서 서비스 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장단점&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 손실 위험 최소화&lt;/li&gt;
&lt;li&gt;읽기 부하를 여러 노드에 분산 가능&lt;/li&gt;
&lt;li&gt;장애 복구 및 데이터 백업이 용이&lt;/li&gt;
&lt;li&gt;쓰기 작업은 마스터 노드에 집중될 수 있어 병목 발생 가능&lt;/li&gt;
&lt;li&gt;데이터 동기화 및 일관성 관리가 복잡&lt;/li&gt;
&lt;li&gt;수평 확장이 제한적(데이터 크기 증가 시 샤딩 필요)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;사용 사례&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 가용성과 안정성이 중요한 경우(예: 금융, 전자상거래)&lt;/li&gt;
&lt;li&gt;읽기 요청이 많고 쓰기 작업은 상대적으로 적은 경우&lt;/li&gt;
&lt;li&gt;장애 복구가 필요한 고가용성 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;&lt;br /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;샤딩과 클러스터링의 비교&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;특성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;샤딩(Sharding)&lt;/td&gt;
&lt;td&gt;클러스터링(Clustering)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;데이터 분포 방식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;데이터를 샤드 키를 기준으로 분산 저장&lt;/td&gt;
&lt;td&gt;모든 노드에 동일한 데이터 복제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;확장성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;수평 확장(데이터 노드 추가로 확장)&lt;/td&gt;
&lt;td&gt;수직 확장(노드 성능 향상이 주요 방법)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;대규모 데이터를 효율적으로 분산 저장&lt;/td&gt;
&lt;td&gt;데이터 가용성 및 읽기 성능 향상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;읽기 성능&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;샤드에 따라 읽기 성능이 달라질 수 있음&lt;/td&gt;
&lt;td&gt;여러 노드에서 읽기 성능이 균일하게 향상&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;쓰기 성능&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;샤드 간 병렬 쓰기로 성능 향상 가능&lt;/td&gt;
&lt;td&gt;쓰기 병목 발생 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;데이터 중복&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;없음&lt;/td&gt;
&lt;td&gt;모든 노드에 동일 데이터 존재&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;관리 복잡성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;샤드 키와 데이터 분배 설계 필요&lt;/td&gt;
&lt;td&gt;데이터 동기화 및 장애 복구 관리 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;어떤 경우에 각각 사용해야 하나요?&lt;/b&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;샤딩 사용 시기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데이터 규모가 매우 크고 지속적으로 증가&lt;/li&gt;
&lt;li&gt;쓰기 성능이 병목이 되는 상황&lt;/li&gt;
&lt;li&gt;특정 기준(예: 사용자, 시간)에 따라 데이터를 분리해 처리하는 것이 효율적인 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;클러스터링 사용 시기&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시스템 가용성과 데이터 복제본 유지가 중요&lt;/li&gt;
&lt;li&gt;읽기 요청이 많고, 읽기 성능을 높이는 것이 최우선 과제&lt;/li&gt;
&lt;li&gt;특정 노드의 장애 복구가 필요한 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;샤딩&lt;/b&gt;은 대규모 데이터를 분산 처리하고 수평 확장이 필요한 경우에 적합하며, &lt;b&gt;클러스터링&lt;/b&gt;은 고가용성과 읽기 성능 향상이 필요한 경우에 적합합니다.&lt;/li&gt;
&lt;li&gt;두 방법은 상호 보완적으로 사용 가능하며, 대규모 시스템에서는 &lt;b&gt;샤딩과 클러스터링을 조합&lt;/b&gt;하여 데이터 확장성과 가용성을 동시에 확보하기도 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>ETC</category>
      <category>NoSQL</category>
      <category>RDBMS</category>
      <category>데이터</category>
      <category>데이터베이스</category>
      <category>분산</category>
      <category>샤딩</category>
      <category>클러스터링</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/429</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%83%A4%EB%94%A9Sharding%EA%B3%BC-%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0%EB%A7%81Clustering#entry429comment</comments>
      <pubDate>Wed, 11 Dec 2024 21:33:58 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv1 - 공원 산책</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv1-%EA%B3%B5%EC%9B%90-%EC%82%B0%EC%B1%85</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지나다니는&amp;nbsp;길을&amp;nbsp;'O',&amp;nbsp;장애물을&amp;nbsp;'X'로&amp;nbsp;나타낸&amp;nbsp;직사각형&amp;nbsp;격자&amp;nbsp;모양의&amp;nbsp;공원에서&amp;nbsp;로봇&amp;nbsp;강아지가&amp;nbsp;산책을&amp;nbsp;하려합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;산책은 로봇 강아지에 미리 입력된 명령에 따라 진행하며, 명령은 다음과 같은 형식으로 주어집니다.&lt;br /&gt;[&quot;방향 거리&quot;, &quot;방향 거리&quot; &amp;hellip; ]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 &quot;E 5&quot;는 로봇 강아지가 현재 위치에서 동쪽으로 5칸 이동했다는 의미입니다. 로봇 강아지는 명령을 수행하기 전에 다음 두 가지를 먼저 확인합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다.&lt;/li&gt;
&lt;li&gt;주어진 방향으로 이동 중 장애물을 만나는지 확인합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두 가지중 어느 하나라도 해당된다면, 로봇 강아지는 해당 명령을 무시하고 다음 명령을 수행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공원의&amp;nbsp;가로&amp;nbsp;길이가&amp;nbsp;W,&amp;nbsp;세로&amp;nbsp;길이가&amp;nbsp;H라고&amp;nbsp;할&amp;nbsp;때,&amp;nbsp;공원의&amp;nbsp;좌측&amp;nbsp;상단의&amp;nbsp;좌표는&amp;nbsp;(0,&amp;nbsp;0),&amp;nbsp;우측&amp;nbsp;하단의&amp;nbsp;좌표는&amp;nbsp;(H&amp;nbsp;-&amp;nbsp;1,&amp;nbsp;W&amp;nbsp;-&amp;nbsp;1)&amp;nbsp;입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;743&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUTnQM/btsKVJeTdKh/G8lQfvHFdwK2t5oyaIxEbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUTnQM/btsKVJeTdKh/G8lQfvHFdwK2t5oyaIxEbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUTnQM/btsKVJeTdKh/G8lQfvHFdwK2t5oyaIxEbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUTnQM%2FbtsKVJeTdKh%2FG8lQfvHFdwK2t5oyaIxEbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;850&quot; height=&quot;743&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;743&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공원을&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;park,&amp;nbsp;로봇&amp;nbsp;강아지가&amp;nbsp;수행할&amp;nbsp;명령이&amp;nbsp;담긴&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;routes가&amp;nbsp;매개변수로&amp;nbsp;주어질&amp;nbsp;때,&amp;nbsp;로봇&amp;nbsp;강아지가&amp;nbsp;모든&amp;nbsp;명령을&amp;nbsp;수행&amp;nbsp;후&amp;nbsp;놓인&amp;nbsp;위치를&amp;nbsp;[세로&amp;nbsp;방향&amp;nbsp;좌표,&amp;nbsp;가로&amp;nbsp;방향&amp;nbsp;좌표]&amp;nbsp;순으로&amp;nbsp;배열에&amp;nbsp;담아&amp;nbsp;return&amp;nbsp;하도록&amp;nbsp;solution&amp;nbsp;함수를&amp;nbsp;완성해주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3 &amp;le; park의 길이 &amp;le; 50&lt;/li&gt;
&lt;li&gt;3 &amp;le; park[i]의 길이 &amp;le; 50
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;park[i]는 다음 문자들로 이루어져 있으며 시작지점은 하나만 주어집니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;S : 시작 지점&lt;/li&gt;
&lt;li&gt;O : 이동 가능한 통로&lt;/li&gt;
&lt;li&gt;X : 장애물&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;park는 직사각형 모양입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1 &amp;le; routes의 길이 &amp;le; 50
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;routes의 각 원소는 로봇 강아지가 수행할 명령어를 나타냅니다.&lt;/li&gt;
&lt;li&gt;로봇 강아지는 routes의 첫 번째 원소부터 순서대로 명령을 수행합니다.&lt;/li&gt;
&lt;li&gt;routes의 원소는 &quot;op n&quot;과 같은 구조로 이루어져 있으며, op는 이동할 방향, n은 이동할 칸의 수를 의미합니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;op는 다음 네 가지중 하나로 이루어져 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;N : 북쪽으로 주어진 칸만큼 이동합니다.&lt;/li&gt;
&lt;li&gt;S : 남쪽으로 주어진 칸만큼 이동합니다.&lt;/li&gt;
&lt;li&gt;W : 서쪽으로 주어진 칸만큼 이동합니다.&lt;/li&gt;
&lt;li&gt;E : 동쪽으로 주어진 칸만큼 이동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1 &amp;le; n &amp;le; 9&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;입출력 예&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 68px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;park&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;routes&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[&quot;SOO&quot;,&quot;OOO&quot;,&quot;OOO&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[&quot;E&amp;nbsp;2&quot;,&quot;S&amp;nbsp;2&quot;,&quot;W&amp;nbsp;1&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[2,1]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[&quot;SOO&quot;,&quot;OXX&quot;,&quot;OOO&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[&quot;E&amp;nbsp;2&quot;,&quot;S&amp;nbsp;2&quot;,&quot;W&amp;nbsp;1&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[0,1]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[&quot;OSO&quot;,&quot;OOO&quot;,&quot;OXO&quot;,&quot;OOO&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[&quot;E&amp;nbsp;2&quot;,&quot;S&amp;nbsp;3&quot;,&quot;W&amp;nbsp;1&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px;&quot;&gt;[0,0]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예 설명&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;입출력 예 #1&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 명령대로 동쪽으로 2칸, 남쪽으로 2칸, 서쪽으로 1칸 이동하면 [0,0] -&amp;gt; [0,2] -&amp;gt; [2,2] -&amp;gt; [2,1]이 됩니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;입출력 예 #2&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력된 명령대로라면 동쪽으로 2칸, 남쪽으로 2칸, 서쪽으로 1칸 이동해야하지만 남쪽으로 2칸 이동할 때 장애물이 있는 칸을 지나기 때문에 해당 명령을 제외한 명령들만 따릅니다. 결과적으로는 [0,0] -&amp;gt; [0,2] -&amp;gt; [0,1]이 됩니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;입출력 예 #3&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 입력된 명령은 공원을 나가게 되고 두 번째로 입력된 명령 또한 장애물을 지나가게 되므로 두 입력은 제외한 세 번째 명령만 따르므로 결과는 다음과 같습니다. [0,1] -&amp;gt; [0,0]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1732554472806&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Map;

class Solution {
    public int[] solution(String[] park, String[] routes) {
        int height = park.length;
        int width = park[0].length();

        int[] dog = new int[2];
        String[][] map = new String[height][width];
        for (int y = 0; y &amp;lt; height; y++) {
            String[] parkSplit = park[y].split(&quot;&quot;);
            for (int x = 0; x &amp;lt; width; x++) {
                if (parkSplit[x].equals(&quot;S&quot;)) {
                    dog[0] = y;
                    dog[1] = x;
                }
                map[y][x] = parkSplit[x];
            }
        }

        Map&amp;lt;String, int[]&amp;gt; routeMap = Map.ofEntries(
            Map.entry(&quot;N&quot;, new int[]{ -1, 0 }),
            Map.entry(&quot;S&quot;, new int[]{ 1, 0 }),
            Map.entry(&quot;W&quot;, new int[]{ 0, -1 }),
            Map.entry(&quot;E&quot;, new int[]{ 0, 1 }));

        for (String route : routes) {
            String[] split = route.split(&quot; &quot;);

            boolean go = true;
            int y = dog[0];
            int x = dog[1];
            for (int i = 0; i &amp;lt; Integer.parseInt(split[1]); i++) {
                y += routeMap.get(split[0])[0];
                x += routeMap.get(split[0])[1];
                if (y &amp;lt; 0 || y &amp;gt;= height || x &amp;lt; 0 || x &amp;gt;= width || map[y][x].equals(&quot;X&quot;)) {
                    go = false;
                    break;
                }
            }

            if (go) {
                dog[0] = y;
                dog[1] = x;
            }
        }

        return dog;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;주어진 park 배열을 문자열 2차원 배열로 map을 생성하고&amp;nbsp;강아지의 좌표(배열값이 S)를 구합니다.&lt;/li&gt;
&lt;li&gt;주어진 route 배열로 강아지 좌표(dog)를 한 칸씩 이동하며 공원을 벗어나는지, 장애물을 만나는지 확인합니다.&lt;/li&gt;
&lt;li&gt;이동이 가능하다면 강아지의 좌표(dog)를 이동합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/172928&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/172928&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732554876202&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/172928&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jxlmw/hyXDdNU0JK/OIlQK4IwWOkdsBpobK7K11/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/ztf3v/hyXDi9yBOs/mbupISLtFuKUhakO9xeJB1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/172928&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/172928&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jxlmw/hyXDdNU0JK/OIlQK4IwWOkdsBpobK7K11/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/ztf3v/hyXDi9yBOs/mbupISLtFuKUhakO9xeJB1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <category>공원 산책</category>
      <category>오블완</category>
      <category>코딩 테스트</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/428</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv1-%EA%B3%B5%EC%9B%90-%EC%82%B0%EC%B1%85#entry428comment</comments>
      <pubDate>Wed, 27 Nov 2024 00:06:17 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv1 - 동영상 재생기</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv1-%EB%8F%99%EC%98%81%EC%83%81-%EC%9E%AC%EC%83%9D%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당신은&amp;nbsp;동영상&amp;nbsp;재생기를&amp;nbsp;만들고&amp;nbsp;있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당신의&amp;nbsp;동영상&amp;nbsp;재생기는&amp;nbsp;10초&amp;nbsp;전으로&amp;nbsp;이동,&amp;nbsp;10초&amp;nbsp;후로&amp;nbsp;이동,&amp;nbsp;오프닝&amp;nbsp;건너뛰기&amp;nbsp;3가지&amp;nbsp;기능을&amp;nbsp;지원합니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 기능이 수행하는 작업은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;10초 전으로 이동: &lt;br /&gt;사용자가 &quot;prev&quot; 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 전으로 이동합니다. &lt;br /&gt;현재 위치가 10초 미만인 경우 영상의 처음 위치로 이동합니다. 영상의 처음 위치는 0분 0초입니다.&lt;/li&gt;
&lt;li&gt;10초 후로 이동: &lt;br /&gt;사용자가 &quot;next&quot; 명령을 입력할 경우 동영상의 재생 위치를 현재 위치에서 10초 후로 이동합니다. &lt;br /&gt;동영상의 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동합니다. 영상의 마지막 위치는 동영상의 길이와 같습니다.&lt;/li&gt;
&lt;li&gt;오프닝 건너뛰기: &lt;br /&gt;현재 재생 위치가 오프닝 구간(op_start &amp;le; 현재 재생 위치 &amp;le; op_end)인 경우 자동으로 오프닝이 끝나는 위치로 이동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동영상의&amp;nbsp;길이를&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;video_len,&amp;nbsp;기능이&amp;nbsp;수행되기&amp;nbsp;직전의&amp;nbsp;재생위치를&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;pos,&amp;nbsp;오프닝&amp;nbsp;시작&amp;nbsp;시각을&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;op_start,&amp;nbsp;오프닝이&amp;nbsp;끝나는&amp;nbsp;시각을&amp;nbsp;나타내는&amp;nbsp;문자열&amp;nbsp;op_end,&amp;nbsp;사용자의&amp;nbsp;입력을&amp;nbsp;나타내는&amp;nbsp;1차원&amp;nbsp;문자열&amp;nbsp;배열&amp;nbsp;commands가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 사용자의 입력이 모두 끝난 후 동영상의 위치를 &quot;mm:ss&quot; 형식으로 return 하도록 solution 함수를 완성해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;video_len의 길이 = pos의 길이 = op_start의 길이 = op_end의 길이 = 5
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;video_len, pos, op_start, op_end는 &quot;mm:ss&quot; 형식으로 mm분 ss초를 나타냅니다.&lt;/li&gt;
&lt;li&gt;0 &amp;le; mm &amp;le; 59&lt;/li&gt;
&lt;li&gt;0 &amp;le; ss &amp;le; 59&lt;/li&gt;
&lt;li&gt;분, 초가 한 자리일 경우 0을 붙여 두 자리로 나타냅니다.&lt;/li&gt;
&lt;li&gt;비디오의 현재 위치 혹은 오프닝이 끝나는 시각이 동영상의 범위 밖인 경우는 주어지지 않습니다.&lt;/li&gt;
&lt;li&gt;오프닝이 시작하는 시각은 항상 오프닝이 끝나는 시각보다 전입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;1 &amp;le; commands의 길이 &amp;le; 100
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;commands의 원소는 &quot;prev&quot; 혹은 &quot;next&quot;입니다.&lt;/li&gt;
&lt;li&gt;&quot;prev&quot;는 10초 전으로 이동하는 명령입니다.&lt;/li&gt;
&lt;li&gt;&quot;next&quot;는 10초 후로 이동하는 명령입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입출력 예&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;video_len&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;pos&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;op_start&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;op_end&lt;/td&gt;
&lt;td style=&quot;width: 20.8527%;&quot;&gt;commands&lt;/td&gt;
&lt;td style=&quot;width: 12.4807%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;34:33&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;13:00&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;00:55&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;02:55&quot;&lt;/td&gt;
&lt;td style=&quot;width: 20.8527%;&quot;&gt;[&quot;next&quot;, &quot;prev&quot;]&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 12.4807%;&quot;&gt;&quot;13:00&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;10:55&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;00:05&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;00:15&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;06:55&quot;&lt;/td&gt;
&lt;td style=&quot;width: 20.8527%;&quot;&gt;[&quot;prev&quot;, &quot;next&quot;, &quot;next&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 12.4807%;&quot;&gt;&quot;06:55&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;07:22&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;04:05&quot;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;00:15&quot;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&quot;04:07&quot;&lt;/td&gt;
&lt;td style=&quot;width: 20.8527%;&quot;&gt;[&quot;next&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 12.4807%;&quot;&gt;&quot;04:17&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;입출력 예 설명&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;입출력 예 #1&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 위치 13분 0초에서 10초 후로 이동하면 13분 10초입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;13분 10초에서 10초 전으로 이동하면 13분 0초입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&amp;nbsp;&quot;13:00&quot;을&amp;nbsp;return&amp;nbsp;하면&amp;nbsp;됩니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;입출력 예 #2&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 위치 0분 5초에서 10초 전으로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 위치가 10초 미만이기 때문에 0분 0초로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0분 0초에서 10초 후로 이동하면 0분 10초입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0분 10초에서 10초 후로 이동하면 0분 20초입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0분 20초는 오프닝 구간이기 때문에 오프닝이 끝나는 위치인 6분 55초로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &quot;06:55&quot;를 return 하면 됩니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;입출력 예 #3&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시작 위치 4분 5초는 오프닝 구간이기 때문에 오프닝이 끝나는 위치인 4분 7초로 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4분 7초에서 10초 후로 이동하면 4분 17초입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 &quot;04:17&quot;을 return 하면 됩니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt; 제출코드&amp;nbsp;&lt;/h3&gt;
&lt;pre id=&quot;code_1732560384381&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Map;
import java.util.function.Function;

class Solution {
    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        LocalTime videoStart = LocalTime.parse(&quot;00:00:00&quot;);
        LocalTime videoEnd = LocalTime.parse(&quot;00:&quot; + video_len);
        LocalTime opStart = LocalTime.parse(&quot;00:&quot; + op_start);
        LocalTime opEnd = LocalTime.parse(&quot;00:&quot; + op_end);
        LocalTime posTime = LocalTime.parse(&quot;00:&quot; + pos);

        Map&amp;lt;String, Function&amp;lt;LocalTime, LocalTime&amp;gt;&amp;gt; map = Map.ofEntries(
            Map.entry(&quot;skip&quot;, (time) -&amp;gt; !time.isBefore(opStart) &amp;amp;&amp;amp; !time.isAfter(opEnd) ? opEnd : time),
            Map.entry(&quot;next&quot;, (time) -&amp;gt; {
                LocalTime nextTime = time.plusSeconds(10);
                return nextTime.isAfter(videoEnd) ? videoEnd : nextTime;
            }),
            Map.entry(&quot;prev&quot;, (time) -&amp;gt; {
                LocalTime prevTime = time.minusSeconds(10);
                return prevTime.isBefore(videoStart) || prevTime.isAfter(videoEnd) ? videoStart : prevTime;
            }));

        posTime = map.get(&quot;skip&quot;).apply(posTime);
        for (String command : commands) {
            posTime = map.get(command).apply(posTime);
            posTime = map.get(&quot;skip&quot;).apply(posTime);
        }

        return posTime.format(DateTimeFormatter.ofPattern(&quot;mm:ss&quot;));
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;주어진 모든 시간을 LocalTime로 변환합니다.&lt;/li&gt;
&lt;li&gt;Map에 함수형 인터페이스를 이용해 &quot;skip&quot;, &quot;next&quot;, &quot;prev&quot;에 맞는 로직을 저장합니다.&lt;/li&gt;
&lt;li&gt;주어진 commands 배열을 반복하여 Map에 저장된 로직을 실행합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/340213&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732560572963&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/brGxTa/hyXDiPfMgq/g9DIdDlDVGvquzeEDbfSDk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/GApih/hyXDdG9uwQ/dlv8GI5On5o9MkRB5ORD1K/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/340213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/brGxTa/hyXDiPfMgq/g9DIdDlDVGvquzeEDbfSDk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/GApih/hyXDdG9uwQ/dlv8GI5On5o9MkRB5ORD1K/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <category>비디오 재생기</category>
      <category>코딩 테스트</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/427</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv1-%EB%8F%99%EC%98%81%EC%83%81-%EC%9E%AC%EC%83%9D%EA%B8%B0#entry427comment</comments>
      <pubDate>Tue, 26 Nov 2024 03:50:07 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv1 - 달리기 경주</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv1-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얀에서는&amp;nbsp;매년&amp;nbsp;달리기&amp;nbsp;경주가&amp;nbsp;열립니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해설진들은&amp;nbsp;선수들이&amp;nbsp;자기&amp;nbsp;바로&amp;nbsp;앞의&amp;nbsp;선수를&amp;nbsp;추월할&amp;nbsp;때&amp;nbsp;추월한&amp;nbsp;선수의&amp;nbsp;이름을&amp;nbsp;부릅니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를&amp;nbsp;들어&amp;nbsp;1등부터&amp;nbsp;3등까지&amp;nbsp;&quot;mumu&quot;,&amp;nbsp;&quot;soe&quot;,&amp;nbsp;&quot;poe&quot;&amp;nbsp;선수들이&amp;nbsp;순서대로&amp;nbsp;달리고&amp;nbsp;있을&amp;nbsp;때,&amp;nbsp;해설진이&amp;nbsp;&quot;soe&quot;선수를&amp;nbsp;불렀다면&amp;nbsp;2등인&amp;nbsp;&quot;soe&quot;&amp;nbsp;선수가&amp;nbsp;1등인&amp;nbsp;&quot;mumu&quot;&amp;nbsp;선수를&amp;nbsp;추월했다는&amp;nbsp;것입니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 &quot;soe&quot; 선수가 1등, &quot;mumu&quot; 선수가 2등으로 바뀝니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선수들의 이름이 1등부터 현재 등수 순서대로 담긴 문자열 배열 players와 해설진이 부른 이름을 담은 문자열 배열 callings가 매개변수로 주어질 때, 경주가 끝났을 때 선수들의 이름을 1등부터 등수 순서대로 배열에 담아 return 하는 solution 함수를 완성해주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;5 &amp;le; players의 길이 &amp;le; 50,000
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;players[i]는 i번째 선수의 이름을 의미합니다.&lt;/li&gt;
&lt;li&gt;players의 원소들은 알파벳 소문자로만 이루어져 있습니다.&lt;/li&gt;
&lt;li&gt;players에는 중복된 값이 들어가 있지 않습니다.&lt;/li&gt;
&lt;li&gt;3 &amp;le; players[i]의 길이 &amp;le; 10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;2 &amp;le; callings의 길이 &amp;le; 1,000,000
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;callings는 players의 원소들로만 이루어져 있습니다.&lt;/li&gt;
&lt;li&gt;경주 진행중 1등인 선수의 이름은 불리지 않습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입출력&amp;nbsp;예&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;players&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;callings&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;[&quot;mumu&quot;,&amp;nbsp;&quot;soe&quot;,&amp;nbsp;&quot;poe&quot;,&amp;nbsp;&quot;kai&quot;,&amp;nbsp;&quot;mine&quot;]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;[&quot;kai&quot;, &quot;kai&quot;, &quot;mine&quot;, &quot;mine&quot;]&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;[&quot;mumu&quot;, &quot;kai&quot;, &quot;mine&quot;, &quot;soe&quot;, &quot;poe&quot;]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4등인&amp;nbsp;&quot;kai&quot;&amp;nbsp;선수가&amp;nbsp;2번&amp;nbsp;추월하여&amp;nbsp;2등이&amp;nbsp;되고&amp;nbsp;앞서&amp;nbsp;3등,&amp;nbsp;2등인&amp;nbsp;&quot;poe&quot;,&amp;nbsp;&quot;soe&quot;&amp;nbsp;선수는&amp;nbsp;4등,&amp;nbsp;3등이&amp;nbsp;됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5등인&amp;nbsp;&quot;mine&quot;&amp;nbsp;선수가&amp;nbsp;2번&amp;nbsp;추월하여&amp;nbsp;4등,&amp;nbsp;3등인&amp;nbsp;&quot;poe&quot;,&amp;nbsp;&quot;soe&quot;&amp;nbsp;선수가&amp;nbsp;5등,&amp;nbsp;4등이&amp;nbsp;되고&amp;nbsp;경주가&amp;nbsp;끝납니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1등부터&amp;nbsp;배열에&amp;nbsp;담으면&amp;nbsp;[&quot;mumu&quot;,&amp;nbsp;&quot;kai&quot;,&amp;nbsp;&quot;mine&quot;,&amp;nbsp;&quot;soe&quot;,&amp;nbsp;&quot;poe&quot;]이&amp;nbsp;됩니다.&lt;/p&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1732557536224&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.HashMap;
import java.util.Map;

class Solution {
    public String[] solution(String[] players, String[] callings) {
        Map&amp;lt;String, Integer&amp;gt; map = new HashMap&amp;lt;&amp;gt;();
        for (int i = 0; i &amp;lt; players.length; i++) {
            map.put(players[i], i);
        }

        for (String calling : callings) {
            int index = map.get(calling);
            map.put(players[index - 1], index);
            map.put(calling, index - 1);
            players[index] = players[index - 1];
            players[index - 1] = calling;
        }

        return players;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;주어진 player의 순서를 기억하고 있는 map을 생성합니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;text-align: left;&quot;&gt;주어진&lt;span&gt; callings 배열을 돌아가며&amp;nbsp;&lt;/span&gt;&lt;/span&gt;map을 활용해 index를 추출하고 앞 선수와 순서를 변경합니다.&lt;br /&gt;(이때 map에 기억되고 있는 순서도 변경합니다.)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/178871&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732557668246&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TNrEs/hyXDcg6RHu/K1Ynns3uPo6MckXe77dkw1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bIX67w/hyXDdNQyqA/yLNniwV0JzzTRNUHldZGgk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/178871&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TNrEs/hyXDcg6RHu/K1Ynns3uPo6MckXe77dkw1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bIX67w/hyXDdNQyqA/yLNniwV0JzzTRNUHldZGgk/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>코딩테스트</category>
      <category>달리기 경주</category>
      <category>코딩 테스트</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/426</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv1-%EB%8B%AC%EB%A6%AC%EA%B8%B0-%EA%B2%BD%EC%A3%BC#entry426comment</comments>
      <pubDate>Tue, 26 Nov 2024 03:02:00 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv0 - 전국 대회 선발 고사</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EC%A0%84%EA%B5%AD-%EB%8C%80%ED%9A%8C-%EC%84%A0%EB%B0%9C-%EA%B3%A0%EC%82%AC</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0번부터&amp;nbsp;n&amp;nbsp;-&amp;nbsp;1번까지&amp;nbsp;n명의&amp;nbsp;학생&amp;nbsp;중&amp;nbsp;3명을&amp;nbsp;선발하는&amp;nbsp;전국&amp;nbsp;대회&amp;nbsp;선발&amp;nbsp;고사를&amp;nbsp;보았습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등수가 높은 3명을 선발해야 하지만, 개인 사정으로 전국 대회에 참여하지 못하는 학생들이 있어 참여가 가능한 학생 중 등수가 높은 3명을 선발하기로 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각&amp;nbsp;학생들의&amp;nbsp;선발&amp;nbsp;고사&amp;nbsp;등수를&amp;nbsp;담은&amp;nbsp;정수&amp;nbsp;배열&amp;nbsp;rank와&amp;nbsp;전국&amp;nbsp;대회&amp;nbsp;참여&amp;nbsp;가능&amp;nbsp;여부가&amp;nbsp;담긴&amp;nbsp;boolean&amp;nbsp;배열&amp;nbsp;attendance가&amp;nbsp;매개변수로&amp;nbsp;주어집니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전국 대회에 선발된 학생 번호들을 등수가 높은 순서대로 각각 a, b, c번이라고 할 때 10000 &amp;times; a + 100 &amp;times; b + c를 return 하는 solution 함수를 작성해 주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;3 &amp;le; rank의 길이 = attendance의 길이 &amp;le; 100&lt;/li&gt;
&lt;li&gt;rank[i]는 i번 학생의 선발 고사 등수를 의미합니다.&lt;/li&gt;
&lt;li&gt;rank의 원소는 1부터 n까지의 정수로 모두 서로 다릅니다.&lt;/li&gt;
&lt;li&gt;attendance[i]는 i번 학생의 전국 대회 참석 가능 여부를 나타냅니다.&lt;/li&gt;
&lt;li&gt;attendance[i]가 true라면 참석 가능, false면 참석 불가능을 의미합니다.&lt;/li&gt;
&lt;li&gt;attendance의 원소 중 적어도 3개는 true입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입출력 예&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 68px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;rank&lt;/td&gt;
&lt;td style=&quot;width: 42.0931%;&quot;&gt;attendance&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;[3, 7, 2, 5, 4, 6, 1]&lt;/td&gt;
&lt;td style=&quot;width: 42.0931%;&quot;&gt;[false, true, true, true, true, false, false]&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;20403&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;[1,&amp;nbsp;2,&amp;nbsp;3]&lt;/td&gt;
&lt;td style=&quot;width: 42.0931%;&quot;&gt;[true, true, true]&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;102&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 31.0465%;&quot;&gt;[6,&amp;nbsp;1,&amp;nbsp;5,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4]&lt;/td&gt;
&lt;td style=&quot;width: 42.0931%;&quot;&gt;[true,&amp;nbsp;false,&amp;nbsp;true,&amp;nbsp;false,&amp;nbsp;false,&amp;nbsp;true]&lt;/td&gt;
&lt;td style=&quot;width: 26.7441%;&quot;&gt;50200&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;입출력 예 #1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 1번에서 1등은 6번 학생이지만 전국 대회에 참석 불가능하므로 넘어갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2등은 2번 학생이고 전국 대회에 참석 가능하므로 1순위로 선발됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3등은 0번 학생이고 전국 대회에 참석 불가능 하므로 넘어갑니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4등과 5등은 각각 4번, 3번 학생이고 두 학생 모두 전국 대회에 참석 가능하므로 각각 2순위, 3순위로 선발됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3명을 선발하였으므로 6등과 7등은 확인하지 않아도 됩니다. 따라서 10000 &amp;times; 2 + 100 &amp;times; 4 + 3 = 20403을 return 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;입출력 예 #2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 2번에서 1, 2, 3등은 각각 0번, 1번, 2번 학생이고 세 학생 모두 전국 대회에 참석 가능하므로 각각 1순위, 2순위, 3순위로 선발됩니다. 따라서 10000 &amp;times; 0 + 100 &amp;times; 1 + 2 = 102를 return 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;입출력 예 #3&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 3번에서 1, 2, 3등은 각각 1번, 3번, 4번 학생이지만 세 학생 모두 전국 대회에 참석 불가능합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음으로 4, 5, 6등은 각각 5번, 2번, 0번 학생이고 세 학생 모두 전국 대회에 참석 가능하므로 각각 1순위, 2순위, 3순위로 선발됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 10000 &amp;times; 5 + 100 &amp;times; 2 + 0 = 50200을 return 합니다.&lt;/p&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1732541392850&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Comparator;
import java.util.stream.IntStream;

class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        int[] sortedRank = IntStream.range(0, rank.length)
            .filter(i -&amp;gt; attendance[i])
            .boxed()
            .sorted(Comparator.comparingInt(i -&amp;gt; rank[i]))
            .limit(3)
            .mapToInt(i -&amp;gt; i)
            .toArray();
        return (10000 * sortedRank[0]) + (100 * sortedRank[1]) + sortedRank[2];
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;rank의 length만큼에 index를 가진 IntStream을 생성하고 attendance의 값이 true(대회 참가)인 index만 필터링합니다.&lt;/li&gt;
&lt;li&gt;boxed() 메서드를 사용해 Integer 형태로 변환 후 rank의 값으로 오름차순 정렬합니다.&lt;/li&gt;
&lt;li&gt;최대 3개만 배열로 반환하고 주어신 식을 계산하여 반환합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;다른 풀이&lt;/h3&gt;
&lt;pre id=&quot;code_1732541634160&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.PriorityQueue;

class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        PriorityQueue&amp;lt;Integer&amp;gt; que = new PriorityQueue&amp;lt;&amp;gt;((a, b) -&amp;gt; rank[a] - rank[b]);
        for (int i = 0; i &amp;lt; attendance.length; i++) {
            if (attendance[i])
                que.add(i);
        }
        return que.poll() * 10000 + que.poll() * 100 + que.poll();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1732541654376&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.TreeMap;

class Solution {
    public int solution(int[] rank, boolean[] attendance) {
        TreeMap&amp;lt;Integer, Integer&amp;gt; tree = new TreeMap&amp;lt;&amp;gt;();
        for (int i = 0; i &amp;lt; rank.length; i++) {
            if (attendance[i] == true) tree.put(rank[i], i);
        }

        ArrayList&amp;lt;Integer&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
        for (Integer key : tree.keySet()) {
            if (list.size() == 3) break;
            list.add(tree.get(key)); 
        }
        return list.get(0) * 10000 + list.get(1) * 100 + list.get(2);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PriorityQueue(우선순위 큐)와 TreeMap를 이용해서 순서를 지정한 것이 인상적이었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역시 자료구조를 많이 잘 사용할수록 간단해지는 것 같습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181851&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/181851&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732541958470&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181851&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnyAvM/hyXDfLJn9p/cxEGwZ35F5eBB53ySUm681/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/blL0Z1/hyXC9Lvulh/ej6Q8CEW1kwQBNIRDJWvu1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181851&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181851&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnyAvM/hyXDfLJn9p/cxEGwZ35F5eBB53ySUm681/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/blL0Z1/hyXC9Lvulh/ej6Q8CEW1kwQBNIRDJWvu1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <category>오블완</category>
      <category>전국 대회 선발 고사</category>
      <category>코딩 테스트</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/425</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EC%A0%84%EA%B5%AD-%EB%8C%80%ED%9A%8C-%EC%84%A0%EB%B0%9C-%EA%B3%A0%EC%82%AC#entry425comment</comments>
      <pubDate>Tue, 26 Nov 2024 02:14:07 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv0 - 배열 만들기 2</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-2</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수 l과 r이 주어졌을 때, l 이상 r이하의 정수 중에서 숫자 &quot;0&quot;과 &quot;5&quot;로만 이루어진 모든 정수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 &amp;le; l &amp;le; r &amp;le; 1,000,000&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입출력 예&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;입출력&amp;nbsp;예&amp;nbsp;#1&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input : 5(l), 555(r) / Output : [5, 50, 55, 500, 505, 550, 555]&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5&amp;nbsp;이상&amp;nbsp;555&amp;nbsp;이하의&amp;nbsp;0과&amp;nbsp;5로만&amp;nbsp;이루어진&amp;nbsp;정수는&amp;nbsp;작은&amp;nbsp;수부터&amp;nbsp;5,&amp;nbsp;50,&amp;nbsp;55,&amp;nbsp;500,&amp;nbsp;505,&amp;nbsp;550,&amp;nbsp;555가&amp;nbsp;있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서&amp;nbsp;[5,&amp;nbsp;50,&amp;nbsp;55,&amp;nbsp;500,&amp;nbsp;505,&amp;nbsp;550,&amp;nbsp;555]를&amp;nbsp;return&amp;nbsp;합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h4 style=&quot;text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;입출력 예 #2&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input :&lt;span&gt;&amp;nbsp;&lt;/span&gt;10(l), 20(r) &lt;span&gt;&amp;nbsp;&lt;/span&gt;/&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Output :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;[-1]&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10 이상 20 이하이면서 0과 5로만 이루어진 정수는 없습니다. 따라서 [-1]을 return 합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1732459493947&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.ArrayList;
import java.util.List;

class Solution {
    public int[] solution(int l, int r) {
        int min = Integer.parseInt(&quot;1&quot; + (&quot;0&quot;.repeat(String.valueOf(l).length() - 1)), 2);
        int max = Integer.parseInt(&quot;1&quot;.repeat(String.valueOf(r).length()), 2);
        int[] answer = IntStream.rangeClosed(min, max)
            .map(num -&amp;gt; Integer.parseInt(Integer.toBinaryString(num)) * 5)
            .filter(num -&amp;gt; l &amp;lt;= num &amp;amp;&amp;amp; r &amp;gt;= num)
            .toArray();
        return answer.length == 0 ? new int[] { -1 } : answer;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;주어진 최소, 최댓값의 length를 활용해 최소, 최대 이진수로 변환 후 십진수로 변환합니다.&lt;/li&gt;
&lt;li&gt;최소부터 최대까지 증가하며 2진수로 변환 후 5를 곱하여 반환합니다.&lt;/li&gt;
&lt;li&gt;주어진 최소, 최대값에 포함되는 숫자만 필터링하여 배열로 변환 후 반환합니다.&lt;/li&gt;
&lt;li&gt;이렇게 만들어진 배열에 길이가 0이라면 -1을 가진 배열, 길이가 0보다 크다면 배열을 반환합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/181921&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732459776134&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/N54KM/hyXDnJqQjQ/ABKM22ZrcAUBv69NGtpzK0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bugmeO/hyXDd08sSO/7uVT1KPkv60ElL2zYgn1N1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181921&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/N54KM/hyXDnJqQjQ/ABKM22ZrcAUBv69NGtpzK0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bugmeO/hyXDd08sSO/7uVT1KPkv60ElL2zYgn1N1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;</description>
      <category>코딩테스트</category>
      <category>배열 만들기</category>
      <category>오블완</category>
      <category>코딩 테스크</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/424</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EB%B0%B0%EC%97%B4-%EB%A7%8C%EB%93%A4%EA%B8%B0-2#entry424comment</comments>
      <pubDate>Mon, 25 Nov 2024 21:47:46 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv0 - 코드 처리하기</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EC%BD%94%EB%93%9C-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자열 code가 주어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;code를&amp;nbsp;앞에서부터&amp;nbsp;읽으면서&amp;nbsp;만약&amp;nbsp;문자가&amp;nbsp;&quot;1&quot;이면&amp;nbsp;mode를&amp;nbsp;바꿉니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mode에 따라 code를 읽어가면서 문자열 ret을 만들어냅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mode는 0과 1이 있으며, idx를 0 부터 code의 길이 - 1 까지 1씩 키워나가면서 code[idx]의 값에 따라 다음과 같이 행동합니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;mode가 0일 때&lt;br /&gt;code[idx]가 &quot;1&quot;이 아니면 idx가 짝수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.&lt;br /&gt;code[idx]가 &quot;1&quot;이면 mode를 0에서 1로 바꿉니다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;mode가 1일 때&lt;br /&gt;code[idx]가 &quot;1&quot;이 아니면 idx가 홀수일 때만 ret의 맨 뒤에 code[idx]를 추가합니다.&lt;br /&gt;code[idx]가 &quot;1&quot;이면 mode를 1에서 0으로 바꿉니다.&lt;br /&gt;문자열 code를 통해 만들어진 문자열 ret를 return 하는 solution 함수를 완성해 주세요.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 시작할 때 mode는 0이며, return 하려는 ret가 만약 빈 문자열이라면 대신 &quot;EMPTY&quot;를 return 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1 &amp;le; code의 길이 &amp;le; 100,000&lt;/li&gt;
&lt;li&gt;code는&amp;nbsp;알파벳&amp;nbsp;소문자&amp;nbsp;또는&amp;nbsp;&quot;1&quot;로&amp;nbsp;이루어진&amp;nbsp;문자열입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입출력 예&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input : &quot;abc1abc1abc&quot; / Output : &quot;acbac&quot;&lt;/p&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1732455848413&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Solution {
    public String solution(String code) {
        StringBuilder ret = new StringBuilder();

        int mode = 0;
        String[] codeArr = code.split(&quot;&quot;);
        for (int i = 0; i &amp;lt; codeArr.length; i++) {
            String c = codeArr[i];
            if (c.equals(&quot;1&quot;)) {
                mode = mode == 0 ? 1 : 0;
                continue;
            }
            if ((mode == 0 &amp;amp;&amp;amp; i % 2 == 0) || (mode == 1 &amp;amp;&amp;amp; i % 2 != 0)) {
                ret.append(c);
            }
        }
        
        return ret.toString().isBlank() ? &quot;EMPTY&quot; : ret.toString();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181932&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/181932&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732456023856&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181932&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/edpo4W/hyXDmcFmFq/82bxW5XUG2fEolMd1W3lL0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bnqHBJ/hyXDk60ob9/BHjyeRsVAQCM2XBQi9OUY1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181932&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181932&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/edpo4W/hyXDmcFmFq/82bxW5XUG2fEolMd1W3lL0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bnqHBJ/hyXDk60ob9/BHjyeRsVAQCM2XBQi9OUY1/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <category>오블완</category>
      <category>코드 처리하기</category>
      <category>코딩 테스트</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/423</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EC%BD%94%EB%93%9C-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0#entry423comment</comments>
      <pubDate>Sun, 24 Nov 2024 22:47:32 +0900</pubDate>
    </item>
    <item>
      <title>코테 Lv0 - 배열 조각하기</title>
      <link>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EB%B0%B0%EC%97%B4-%EC%A1%B0%EA%B0%81%ED%95%98%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 설명&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정수 배열 arr와 query가 주어집니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;query를 순회하면서 다음 작업을 반복합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;짝수 인덱스에서는 arr에서 query[i]번 인덱스를 제외하고 배열의 query[i]번 인덱스 뒷부분을 잘라서 버립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;홀수 인덱스에서는 arr에서 query[i]번 인덱스는 제외하고 배열의 query[i]번 인덱스 앞부분을 잘라서 버립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 작업을 마친 후 남은 arr의 부분 배열을 return 하는 solution 함수를 완성해 주세요.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;제한사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;5 &amp;le; arr의 길이 &amp;le; 100,000&lt;/li&gt;
&lt;li&gt;0 &amp;le; arr의 원소 &amp;le; 100&lt;/li&gt;
&lt;li&gt;1 &amp;le; query의 길이 &amp;lt; min(50, arr의 길이 / 2)&lt;/li&gt;
&lt;li&gt;query의&amp;nbsp;각&amp;nbsp;원소는&amp;nbsp;0보다&amp;nbsp;크거나&amp;nbsp;같고&amp;nbsp;남아있는&amp;nbsp;arr의&amp;nbsp;길이&amp;nbsp;보다&amp;nbsp;작습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;입출력 예&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Input : [0, 1, 2, 3, 4, 5](arr) [4, 1, 2](query) / Ouput : [1, 2, 3]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;286&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Duh8S/btsKT1zNdXP/le63bDBhliIpDti9Ny8t4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Duh8S/btsKT1zNdXP/le63bDBhliIpDti9Ny8t4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Duh8S/btsKT1zNdXP/le63bDBhliIpDti9Ny8t4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDuh8S%2FbtsKT1zNdXP%2Fle63bDBhliIpDti9Ny8t4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1330&quot; height=&quot;286&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;286&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;제출코드&lt;/h2&gt;
&lt;pre id=&quot;code_1732372173163&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[] query) {
        for (int i = 0; i &amp;lt; query.length; i++) {
            if (i % 2 == 0) {
                arr = Arrays.copyOfRange(arr, 0, query[i] + 1);
            } else {
                arr = Arrays.copyOfRange(arr, query[i], arr.length);
            }
        }
        return arr;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181893&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/181893&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732372190087&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;프로그래머스&quot; data-og-description=&quot;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&quot; data-og-host=&quot;programmers.co.kr&quot; data-og-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181893&quot; data-og-url=&quot;https://programmers.co.kr/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dutpXa/hyXDcnp5ec/cGUjLWF6Ouq7k7AoYkD2T0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bOgUWF/hyXzIuLl9V/xJoSoM8FzpdZne77jLuE50/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960&quot;&gt;&lt;a href=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181893&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://school.programmers.co.kr/learn/courses/30/lessons/181893&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dutpXa/hyXDcnp5ec/cGUjLWF6Ouq7k7AoYkD2T0/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960,https://scrap.kakaocdn.net/dn/bOgUWF/hyXzIuLl9V/xJoSoM8FzpdZne77jLuE50/img.png?width=1920&amp;amp;height=960&amp;amp;face=0_0_1920_960');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;프로그래머스&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;programmers.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩테스트</category>
      <category>배열 조각하기</category>
      <category>오블완</category>
      <category>코딩 테스트</category>
      <category>티스토리챌린지</category>
      <category>프로그래머스</category>
      <author>Beekei</author>
      <guid isPermaLink="true">https://devbksheen.tistory.com/422</guid>
      <comments>https://devbksheen.tistory.com/entry/%EC%BD%94%ED%85%8C-Lv0-%EB%B0%B0%EC%97%B4-%EC%A1%B0%EA%B0%81%ED%95%98%EA%B8%B0#entry422comment</comments>
      <pubDate>Sat, 23 Nov 2024 23:30:12 +0900</pubDate>
    </item>
  </channel>
</rss>