<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%EC%86%90%EB%8C%80%ED%98%B8</id>
	<title>IT 위키 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://devhrxoobm.itwiki.kr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%EC%86%90%EB%8C%80%ED%98%B8"/>
	<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/w/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/%EC%86%90%EB%8C%80%ED%98%B8"/>
	<updated>2026-09-16T21:05:31Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%9D%BC%EC%9A%B4%EB%93%9C_%EB%A1%9C%EB%B9%88&amp;diff=39312</id>
		<title>라운드 로빈</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%9D%BC%EC%9A%B4%EB%93%9C_%EB%A1%9C%EB%B9%88&amp;diff=39312"/>
		<updated>2024-05-06T06:06:08Z</updated>

		<summary type="html">&lt;p&gt;손대호: 오타 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:운영체제]][[분류:정보처리기사]]&lt;br /&gt;
;RR: Round Robin&lt;br /&gt;
;[[선점 스케줄링|선점 프로세스 스케줄링 기법]]으로 먼저 들어온 순서대로 처리하되, 시간 제한을 두고 시간 내에 처리되지 않으면 다른 프로세스로 넘긴다.&lt;br /&gt;
&lt;br /&gt;
* 간단하게 예를 들면, 5개의 [[프로세스]]가 [[중앙처리장치|CPU]]자원을 요구할때&lt;br /&gt;
** 먼저 들어온 순서대로 처리하되, 0.5ms씩 돌아가면서 처리한다.&lt;br /&gt;
** 즉 0.5ms만에 작업이 처리되지 않으면, 한바퀴를 다 돈 후 다음 턴을 기다려 0.5ms를 더 사용한다.&lt;br /&gt;
&lt;br /&gt;
* 시간간격이 충분히 클수록 [[FCFS|FCFS(FIFO)]]방식과 동일해 진다.&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=Ping_of_Death&amp;diff=39302</id>
		<title>Ping of Death</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=Ping_of_Death&amp;diff=39302"/>
		<updated>2024-05-06T03:03:36Z</updated>

		<summary type="html">&lt;p&gt;손대호: 띄어쓰기 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ping을 이용하여 [[ICMP]] 패킷을 정상적인 크기보다 아주 크게 만들어진 패킷을 전송하면 네트워크를 통해 라우팅(Routing) 되어 공격 네트워크에 도달하는 동안 아주 작은 조각(Fragment)이 되어 공격 대상 시스템은 이렇게 작게 조각화된 패킷을 모두 처리해야 하므로 정상적인 Ping의 경우보다 훨씬 많은 부하가 걸리게 되므로 시스템의 성능을 떨어뜨리는 공격이다.&lt;br /&gt;
&lt;br /&gt;
== 대응 방안 ==&lt;br /&gt;
ICMP Ping에 대해 응답을 하지 않도록 설정한다.&lt;br /&gt;
&lt;br /&gt;
* sysctl -w net, ipv4, icmp_echo_ignore_all=1&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
&lt;br /&gt;
* [[서비스 거부 공격]]&lt;br /&gt;
&lt;br /&gt;
== 참고 문헌 ==&lt;br /&gt;
&lt;br /&gt;
* [https://raisonde.tistory.com/entry/정보보안기사-각종-취약점-공격-및-대응방안 지식잡식 블로그]&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=39295</id>
		<title>데이터베이스 정규화</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=39295"/>
		<updated>2024-05-04T08:33:22Z</updated>

		<summary type="html">&lt;p&gt;손대호: 삭제 이상 예시에서 인공기능 과목 - 유관순 교수의 예를 이해하기 위해 추가&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]]&lt;br /&gt;
[[분류:정보처리기사]]&lt;br /&gt;
&lt;br /&gt;
;;Database Normalization&lt;br /&gt;
&lt;br /&gt;
==[[데이터베이스 이상 현상|이상(Anomaly) 현상]]==&lt;br /&gt;
&lt;br /&gt;
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상&lt;br /&gt;
*데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생&lt;br /&gt;
*애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생&lt;br /&gt;
&lt;br /&gt;
===이상 종류===&lt;br /&gt;
&lt;br /&gt;
;삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;삽입 이상(Insertion Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삽입 시 의도와 다른 값들도 삽입됨&lt;br /&gt;
*&#039;&#039;&#039;삭제 이상(Delete Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨&lt;br /&gt;
*&#039;&#039;&#039;갱신 이상(Update Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**속성값 갱신 시 일부 튜플만 갱신되어 모순 발생&lt;br /&gt;
&lt;br /&gt;
==정규화 목적==&lt;br /&gt;
&lt;br /&gt;
*중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지&lt;br /&gt;
*각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할&lt;br /&gt;
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함&lt;br /&gt;
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소&lt;br /&gt;
*효과적인 검색 알고리즘 생성 가능&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==정규화 과정==&lt;br /&gt;
===1NF===&lt;br /&gt;
&lt;br /&gt;
;First Normal Form&lt;br /&gt;
&lt;br /&gt;
1NF를 만족하려면 &#039;&#039;&#039;도메인이 원자값&#039;&#039;&#039;이어야 한다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정, 신사임당&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|홍길동, 임꺽정&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자1&lt;br /&gt;
!수강자2 &lt;br /&gt;
!수강자3&lt;br /&gt;
|-&lt;br /&gt;
|국어&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|영어&lt;br /&gt;
|고길동&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|}&lt;br /&gt;
:*수강자 속성이 원자값이 아니다.&lt;br /&gt;
:*유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 홍길동이 사회과목을 &#039;역사&#039;로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.&lt;br /&gt;
*** UPDATE 과목 SET 수강과목 = &#039;역사&#039; WHERE 수강과목 = &#039;사회&#039; AND 수강자 = &#039;홍길동&#039;&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 임꺽정이 &#039;과학&#039; 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.&lt;br /&gt;
***DELETE FROM 과목 WHERE 수강과목 = &#039;과학&#039; AND 수강자 = &#039;임꺽정&#039;&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
!일련번호 &lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|신사임당&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|사회 &lt;br /&gt;
|홍길동&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|임꺽정&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.&lt;br /&gt;
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.&lt;br /&gt;
&lt;br /&gt;
===2NF===&lt;br /&gt;
&lt;br /&gt;
;Second Normal Form&lt;br /&gt;
;2NF를 만족하려면 &#039;&#039;&#039;부분적 함수 종속&#039;&#039;&#039;을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*즉 완전 함수 종속이 되도록 해야 한다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!학과장&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|천교수&lt;br /&gt;
|-&lt;br /&gt;
| 1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|}&lt;br /&gt;
:*학번 &amp;lt;-&amp;gt; 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)&lt;br /&gt;
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 &amp;lt;-&amp;gt; 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.&lt;br /&gt;
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 &#039;김교수&#039;와 같이 계속 중복적재 될것이다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**삽입 이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 중복 정보인 학과장 정보가 삽입되어야 한다.&lt;br /&gt;
**갱신 이상: 컴퓨터과의 학과장이 변경될 경우, 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**삭제 이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져 버린다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정 &lt;br /&gt;
|전자과&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
| 신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학과&lt;br /&gt;
! 학과장&lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
| 기계과 &lt;br /&gt;
|천교수&lt;br /&gt;
|}&lt;br /&gt;
:*이와 같이 릴레이션을 구분하는 것이 바람직하다.&lt;br /&gt;
&lt;br /&gt;
===3NF===&lt;br /&gt;
&lt;br /&gt;
;Third Normal Form&lt;br /&gt;
;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계&lt;br /&gt;
*3NF를 만족하지 않는 릴레이션&lt;br /&gt;
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.&lt;br /&gt;
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동 &lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
| 임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|공대 &lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당 &lt;br /&gt;
|경제&lt;br /&gt;
|경상 &lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 컴퓨터과의 소속 대학이 &#039;IT대학&#039;으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.&lt;br /&gt;
*3NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과 &lt;br /&gt;
|-&lt;br /&gt;
|1706 &lt;br /&gt;
|신사임당&lt;br /&gt;
|경제&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학 &lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
| 전자과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|경제&lt;br /&gt;
|경상&lt;br /&gt;
|-&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BCNF===&lt;br /&gt;
&lt;br /&gt;
;Boyce and Codd Normal Form&lt;br /&gt;
;BCNF를 만족하려면 결정자이면서 후보 키가 아닌 속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*BCNF를 만족하지 않는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! 학번&lt;br /&gt;
!과목&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실 &lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|인공지능&lt;br /&gt;
|유관순&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*제약사항&lt;br /&gt;
**한 학생은 동일한 과목에 대해 한 교수에게만 수강 가능&lt;br /&gt;
**각 교수는 하나의 과목만 담당&lt;br /&gt;
**한 과목은 여러 교수가 담당 가능&lt;br /&gt;
*후보 키: (학번, 과목)&lt;br /&gt;
*함수적 종속성&lt;br /&gt;
**(학번, 과목) → 교수&lt;br /&gt;
**교수 → 과목&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 장영실 교수의 담당 과목이 알고리즘으로 변경되면, 장영실 교수의 과목을 수강하는 모든 학생들의 튜플도 검색해서 수정해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.&lt;br /&gt;
*BCNF 분해 방법&lt;br /&gt;
**함수적 종속성 Z → X가 있으며 Z가 후보 키가 아닌 경우, (R - X)와 ZX로 릴레이션을 분리&lt;br /&gt;
**예시. 함수적 종속성 (교수 → 과목)이 있으며, 교수가 후보 키가 아니기 때문에, (학번, 교수), (교수, 과목)으로 분리&lt;br /&gt;
*BCNF 분해의 특징&lt;br /&gt;
**무손실 조인 분해&lt;br /&gt;
**종속성 유지가 불가능할 수 있음(예시의 경우 함수적 종속성 &amp;quot;(학번, 과목) → 교수&amp;quot;를 유지할 수 없음)&lt;br /&gt;
*BCNF를 만족시키는 릴레이션&lt;br /&gt;
**삽입 이상 해결: 200 학생이 데이터베이스를 수강하기 위해, 홍길동 교수의 정보가 삽입될 필요가 없어진다.&lt;br /&gt;
**갱신 이상 해결: 장영실 교수의 담당 과목을 변경하기 위해 다른 튜플들을 검색해서 수정할 필요가 없다.&lt;br /&gt;
**삭제 이상 해결: 300 학생이 자퇴하면, 300 학생의 수강 정보만 삭제하면 된다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!과목&lt;br /&gt;
! 교수&lt;br /&gt;
|-&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|네트워크&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===4NF===&lt;br /&gt;
&lt;br /&gt;
;Fourth Normal Form&lt;br /&gt;
;4NF를 만족하려면 다치 종속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*4NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
* 4NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
===5NF===&lt;br /&gt;
&lt;br /&gt;
;Fifth Normal Form&lt;br /&gt;
;5NF를 만족하려면 조인 종속성 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*5NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
*5NF를 만족시키는 릴레이션&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=39294</id>
		<title>데이터베이스 정규화</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=39294"/>
		<updated>2024-05-04T08:10:35Z</updated>

		<summary type="html">&lt;p&gt;손대호: 내용을 자연스럽게 변경&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]]&lt;br /&gt;
[[분류:정보처리기사]]&lt;br /&gt;
&lt;br /&gt;
;;Database Normalization&lt;br /&gt;
&lt;br /&gt;
==[[데이터베이스 이상 현상|이상(Anomaly) 현상]]==&lt;br /&gt;
&lt;br /&gt;
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상&lt;br /&gt;
*데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생&lt;br /&gt;
*애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생&lt;br /&gt;
&lt;br /&gt;
===이상 종류===&lt;br /&gt;
&lt;br /&gt;
;삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;삽입 이상(Insertion Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삽입 시 의도와 다른 값들도 삽입됨&lt;br /&gt;
*&#039;&#039;&#039;삭제 이상(Delete Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨&lt;br /&gt;
*&#039;&#039;&#039;갱신 이상(Update Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**속성값 갱신 시 일부 튜플만 갱신되어 모순 발생&lt;br /&gt;
&lt;br /&gt;
==정규화 목적==&lt;br /&gt;
&lt;br /&gt;
*중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지&lt;br /&gt;
*각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할&lt;br /&gt;
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함&lt;br /&gt;
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소&lt;br /&gt;
*효과적인 검색 알고리즘 생성 가능&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==정규화 과정==&lt;br /&gt;
===1NF===&lt;br /&gt;
&lt;br /&gt;
;First Normal Form&lt;br /&gt;
&lt;br /&gt;
1NF를 만족하려면 &#039;&#039;&#039;도메인이 원자값&#039;&#039;&#039;이어야 한다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정, 신사임당&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|홍길동, 임꺽정&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자1&lt;br /&gt;
!수강자2 &lt;br /&gt;
!수강자3&lt;br /&gt;
|-&lt;br /&gt;
|국어&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|영어&lt;br /&gt;
|고길동&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|}&lt;br /&gt;
:*수강자 속성이 원자값이 아니다.&lt;br /&gt;
:*유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 홍길동이 사회과목을 &#039;역사&#039;로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.&lt;br /&gt;
*** UPDATE 과목 SET 수강과목 = &#039;역사&#039; WHERE 수강과목 = &#039;사회&#039; AND 수강자 = &#039;홍길동&#039;&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 임꺽정이 &#039;과학&#039; 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.&lt;br /&gt;
***DELETE FROM 과목 WHERE 수강과목 = &#039;과학&#039; AND 수강자 = &#039;임꺽정&#039;&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
!일련번호 &lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|신사임당&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|사회 &lt;br /&gt;
|홍길동&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|임꺽정&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.&lt;br /&gt;
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.&lt;br /&gt;
&lt;br /&gt;
===2NF===&lt;br /&gt;
&lt;br /&gt;
;Second Normal Form&lt;br /&gt;
;2NF를 만족하려면 &#039;&#039;&#039;부분적 함수 종속&#039;&#039;&#039;을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*즉 완전 함수 종속이 되도록 해야 한다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!학과장&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|천교수&lt;br /&gt;
|-&lt;br /&gt;
| 1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|}&lt;br /&gt;
:*학번 &amp;lt;-&amp;gt; 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)&lt;br /&gt;
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 &amp;lt;-&amp;gt; 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.&lt;br /&gt;
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 &#039;김교수&#039;와 같이 계속 중복적재 될것이다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**삽입 이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 중복 정보인 학과장 정보가 삽입되어야 한다.&lt;br /&gt;
**갱신 이상: 컴퓨터과의 학과장이 변경될 경우, 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**삭제 이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져 버린다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정 &lt;br /&gt;
|전자과&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
| 신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학과&lt;br /&gt;
! 학과장&lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
| 기계과 &lt;br /&gt;
|천교수&lt;br /&gt;
|}&lt;br /&gt;
:*이와 같이 릴레이션을 구분하는 것이 바람직하다.&lt;br /&gt;
&lt;br /&gt;
===3NF===&lt;br /&gt;
&lt;br /&gt;
;Third Normal Form&lt;br /&gt;
;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계&lt;br /&gt;
*3NF를 만족하지 않는 릴레이션&lt;br /&gt;
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.&lt;br /&gt;
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동 &lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
| 임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|공대 &lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당 &lt;br /&gt;
|경제&lt;br /&gt;
|경상 &lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 컴퓨터과의 소속 대학이 &#039;IT대학&#039;으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.&lt;br /&gt;
*3NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과 &lt;br /&gt;
|-&lt;br /&gt;
|1706 &lt;br /&gt;
|신사임당&lt;br /&gt;
|경제&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학 &lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
| 전자과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|경제&lt;br /&gt;
|경상&lt;br /&gt;
|-&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BCNF===&lt;br /&gt;
&lt;br /&gt;
;Boyce and Codd Normal Form&lt;br /&gt;
;BCNF를 만족하려면 결정자이면서 후보 키가 아닌 속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*BCNF를 만족하지 않는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! 학번&lt;br /&gt;
!과목&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*제약사항&lt;br /&gt;
**한 학생은 동일한 과목에 대해 한 교수에게만 수강 가능&lt;br /&gt;
**각 교수는 하나의 과목만 담당&lt;br /&gt;
**한 과목은 여러 교수가 담당 가능&lt;br /&gt;
*후보 키: (학번, 과목)&lt;br /&gt;
*함수적 종속성&lt;br /&gt;
**(학번, 과목) → 교수&lt;br /&gt;
**교수 → 과목&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 장영실 교수의 담당 과목이 알고리즘으로 변경되면, 장영실 교수의 과목을 수강하는 모든 학생들의 튜플도 검색해서 수정해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.&lt;br /&gt;
*BCNF 분해 방법&lt;br /&gt;
**함수적 종속성 Z → X가 있으며 Z가 후보 키가 아닌 경우, (R - X)와 ZX로 릴레이션을 분리&lt;br /&gt;
**예시. 함수적 종속성 (교수 → 과목)이 있으며, 교수가 후보 키가 아니기 때문에, (학번, 교수), (교수, 과목)으로 분리&lt;br /&gt;
*BCNF 분해의 특징&lt;br /&gt;
**무손실 조인 분해&lt;br /&gt;
**종속성 유지가 불가능할 수 있음(예시의 경우 함수적 종속성 &amp;quot;(학번, 과목) → 교수&amp;quot;를 유지할 수 없음)&lt;br /&gt;
*BCNF를 만족시키는 릴레이션&lt;br /&gt;
**삽입 이상 해결: 200 학생이 데이터베이스를 수강하기 위해, 홍길동 교수의 정보가 삽입될 필요가 없어진다.&lt;br /&gt;
**갱신 이상 해결: 장영실 교수의 담당 과목을 변경하기 위해 다른 튜플들을 검색해서 수정할 필요가 없다.&lt;br /&gt;
**삭제 이상 해결: 300 학생이 자퇴하면, 300 학생의 수강 정보만 삭제하면 된다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!과목&lt;br /&gt;
! 교수&lt;br /&gt;
|-&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|네트워크&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===4NF===&lt;br /&gt;
&lt;br /&gt;
;Fourth Normal Form&lt;br /&gt;
;4NF를 만족하려면 다치 종속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*4NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
* 4NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
===5NF===&lt;br /&gt;
&lt;br /&gt;
;Fifth Normal Form&lt;br /&gt;
;5NF를 만족하려면 조인 종속성 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*5NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
*5NF를 만족시키는 릴레이션&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=39293</id>
		<title>데이터베이스 정규화</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4_%EC%A0%95%EA%B7%9C%ED%99%94&amp;diff=39293"/>
		<updated>2024-05-04T08:09:02Z</updated>

		<summary type="html">&lt;p&gt;손대호: 띄어쓰기 및 불필요한 단어 제거&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]]&lt;br /&gt;
[[분류:정보처리기사]]&lt;br /&gt;
&lt;br /&gt;
;;Database Normalization&lt;br /&gt;
&lt;br /&gt;
==[[데이터베이스 이상 현상|이상(Anomaly) 현상]]==&lt;br /&gt;
&lt;br /&gt;
*정규화를 거치지 않은 데이터베이스에서 발생할 수 있는 현상&lt;br /&gt;
*데이터들이 불필요하게 중복되어 릴레이션 조작에 예기치 못한 문제 발생&lt;br /&gt;
*애트리뷰트들의 종속관계를 하나의 릴레이션에 표현하기 때문에 발생&lt;br /&gt;
&lt;br /&gt;
===이상 종류===&lt;br /&gt;
&lt;br /&gt;
;삽입할 때 잘못 삽입됨, 갱신할 때 잘못 갱신됨 등의 일반적인 내용이다. 아래 정규화과정에서 예시 참고&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;삽입 이상(Insertion Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삽입 시 의도와 다른 값들도 삽입됨&lt;br /&gt;
*&#039;&#039;&#039;삭제 이상(Delete Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**데이터 삭제 시 의도와 다른 값들도 연쇄 삭제됨&lt;br /&gt;
*&#039;&#039;&#039;갱신 이상(Update Anomaly)&#039;&#039;&#039;&lt;br /&gt;
**속성값 갱신 시 일부 튜플만 갱신되어 모순 발생&lt;br /&gt;
&lt;br /&gt;
==정규화 목적==&lt;br /&gt;
&lt;br /&gt;
*중복을 배제하여 삽입, 삭제, 갱신 이상의 발생을 방지&lt;br /&gt;
*각 릴레이션에 중복된 종속성을 여러개의 릴레이션에 분할&lt;br /&gt;
*어떠한 릴레이션이라도 데이터베이스 내에서 표현 가능하게 함&lt;br /&gt;
*데이터 삽입 시 릴레이션을 재구성할 필요성 감소&lt;br /&gt;
*효과적인 검색 알고리즘 생성 가능&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==정규화 과정==&lt;br /&gt;
===1NF===&lt;br /&gt;
&lt;br /&gt;
;First Normal Form&lt;br /&gt;
&lt;br /&gt;
1NF를 만족하려면 &#039;&#039;&#039;도메인이 원자값&#039;&#039;&#039;이어야 한다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정, 신사임당&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|홍길동, 임꺽정&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자1&lt;br /&gt;
!수강자2 &lt;br /&gt;
!수강자3&lt;br /&gt;
|-&lt;br /&gt;
|국어&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|영어&lt;br /&gt;
|고길동&lt;br /&gt;
|신사임당&lt;br /&gt;
|홍길동&lt;br /&gt;
|}&lt;br /&gt;
:*수강자 속성이 원자값이 아니다.&lt;br /&gt;
:*유사한 속성이 중복, 반복되는 경우도 정규화의 대상이 된다&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 홍길동이 사회과목을 &#039;역사&#039;로 바꾸었다. 그럼 임꺽정이 듣고 있는 사회 과목도 바뀌어버린다.&lt;br /&gt;
*** UPDATE 과목 SET 수강과목 = &#039;역사&#039; WHERE 수강과목 = &#039;사회&#039; AND 수강자 = &#039;홍길동&#039;&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 임꺽정이 &#039;과학&#039; 과목을 수강취소했다. 그럼 신사임당의 수강 정보도 삭제된다.&lt;br /&gt;
***DELETE FROM 과목 WHERE 수강과목 = &#039;과학&#039; AND 수강자 = &#039;임꺽정&#039;&lt;br /&gt;
*&#039;&#039;&#039;1NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!수강과목&lt;br /&gt;
!수강자&lt;br /&gt;
!일련번호 &lt;br /&gt;
|-&lt;br /&gt;
|수학&lt;br /&gt;
|홍길동&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|임꺽정&lt;br /&gt;
|2&lt;br /&gt;
|-&lt;br /&gt;
|과학&lt;br /&gt;
|신사임당&lt;br /&gt;
|3&lt;br /&gt;
|-&lt;br /&gt;
|사회 &lt;br /&gt;
|홍길동&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|사회&lt;br /&gt;
|임꺽정&lt;br /&gt;
|5&lt;br /&gt;
|}&lt;br /&gt;
:* 가장 간단한 것은 원자값으로 분해해 튜플로 구분하고 다른 키를 추가하는 것이다.&lt;br /&gt;
:*실제로 복잡한 테이블은 이렇게 단순하게 분해해버리면 다른 중복 문제들이 많이 생겨 테이블 구조를 따져봐야한다.&lt;br /&gt;
&lt;br /&gt;
===2NF===&lt;br /&gt;
&lt;br /&gt;
;Second Normal Form&lt;br /&gt;
;2NF를 만족하려면 &#039;&#039;&#039;부분적 함수 종속&#039;&#039;&#039;을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*즉 완전 함수 종속이 되도록 해야 한다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족하지 않는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!학과장&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|천교수&lt;br /&gt;
|-&lt;br /&gt;
| 1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|}&lt;br /&gt;
:*학번 &amp;lt;-&amp;gt; 이름+소속+학과장은 종속 관계가 있다.(한 학과내의 이름은 중복되지 않는다고 가정)&lt;br /&gt;
:*하지만 사실 학과장은 소속학과 하나만에도 종속(소속학과 &amp;lt;-&amp;gt; 학과장)되므로 이는 부분적인 종속관계가 포함되어 있다.&lt;br /&gt;
:*즉 학과장은 꼭 이 릴레이션에 있어야 할 필요도 없고, 이 릴레이션에 있는 순간 &#039;김교수&#039;와 같이 계속 중복적재 될것이다.&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**삽입 이상: 컴퓨터과, 전자과, 기계과 학생을 추가하고자 할 경우 중복 정보인 학과장 정보가 삽입되어야 한다.&lt;br /&gt;
**갱신 이상: 컴퓨터과의 학과장이 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**삭제 이상: 신사임당이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 기계과 학과장의 정보가 사라져 버린다.&lt;br /&gt;
*&#039;&#039;&#039;2NF를 만족시키는 릴레이션&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정 &lt;br /&gt;
|전자과&lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
| 신사임당&lt;br /&gt;
|기계과&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|}&lt;br /&gt;
:{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학과&lt;br /&gt;
! 학과장&lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|김교수&lt;br /&gt;
|-&lt;br /&gt;
|전자과&lt;br /&gt;
|박교수&lt;br /&gt;
|-&lt;br /&gt;
| 기계과 &lt;br /&gt;
|천교수&lt;br /&gt;
|}&lt;br /&gt;
:*이와 같이 릴레이션을 구분하는 것이 바람직하다.&lt;br /&gt;
&lt;br /&gt;
===3NF===&lt;br /&gt;
&lt;br /&gt;
;Third Normal Form&lt;br /&gt;
;3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*이행적 함수 종속: A→B 이고 B→C 일 때 A→C 인 관계&lt;br /&gt;
*3NF를 만족하지 않는 릴레이션&lt;br /&gt;
**소속학과는 특정 대학에 속한다. 즉 대학은 소속학과에 종속된다.&lt;br /&gt;
**홍길동 → 컴퓨터과이고 컴퓨터과→공대일 때, 홍길동→공대인 관계가 성립한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동 &lt;br /&gt;
|컴퓨터과 &lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
| 임꺽정&lt;br /&gt;
|전자과&lt;br /&gt;
|공대 &lt;br /&gt;
|-&lt;br /&gt;
|1706&lt;br /&gt;
|신사임당 &lt;br /&gt;
|경제&lt;br /&gt;
|경상 &lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 컴퓨터과, 전자과 학생을 추가하고자 할 경우 더이상 불필요한 중복정보인 대학 정보가 삽입되어야 한다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 컴퓨터과의 소속 대학이 &#039;IT대학&#039;으로 변경되었다. 하나만 변경하면 모순이 발생하므로 다 찾아서 변경해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 홍길동이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 컴퓨터과의 대학 정보가 사라져 버린다.&lt;br /&gt;
*3NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!이름&lt;br /&gt;
!소속학과&lt;br /&gt;
|-&lt;br /&gt;
|1901&lt;br /&gt;
|홍길동&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|-&lt;br /&gt;
|1845&lt;br /&gt;
|임꺽정&lt;br /&gt;
|전자과 &lt;br /&gt;
|-&lt;br /&gt;
|1706 &lt;br /&gt;
|신사임당&lt;br /&gt;
|경제&lt;br /&gt;
|-&lt;br /&gt;
|1925&lt;br /&gt;
|장영실&lt;br /&gt;
|경영&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!소속학과&lt;br /&gt;
!대학 &lt;br /&gt;
|-&lt;br /&gt;
|컴퓨터과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
| 전자과&lt;br /&gt;
|공대&lt;br /&gt;
|-&lt;br /&gt;
|경제&lt;br /&gt;
|경상&lt;br /&gt;
|-&lt;br /&gt;
|경영&lt;br /&gt;
|경상&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===BCNF===&lt;br /&gt;
&lt;br /&gt;
;Boyce and Codd Normal Form&lt;br /&gt;
;BCNF를 만족하려면 결정자이면서 후보 키가 아닌 속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*BCNF를 만족하지 않는 릴레이션&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! 학번&lt;br /&gt;
!과목&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|네트워크 &lt;br /&gt;
|장영실 &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*제약사항&lt;br /&gt;
**한 학생은 동일한 과목에 대해 한 교수에게만 수강 가능&lt;br /&gt;
**각 교수는 하나의 과목만 담당&lt;br /&gt;
**한 과목은 여러 교수가 담당 가능&lt;br /&gt;
*후보 키: (학번, 과목)&lt;br /&gt;
*함수적 종속성&lt;br /&gt;
**(학번, 과목) → 교수&lt;br /&gt;
**교수 → 과목&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
**&#039;&#039;&#039;삽입 이상&#039;&#039;&#039;: 200 학생이 데이터베이스를 수강하고자 할 경우, 현재 불필요한 홍길동 교수 정보가 한번 더 삽입된다.&lt;br /&gt;
**&#039;&#039;&#039;갱신 이상&#039;&#039;&#039;: 장영실 교수의 담당 과목이 알고리즘으로 변경되면, 장영실 교수의 과목을 수강하는 모든 학생들의 튜플도 검색해서 수정해야 한다.&lt;br /&gt;
**&#039;&#039;&#039;삭제 이상&#039;&#039;&#039;: 300 학생이 자퇴해서 삭제하고자 한다. 이 삭제로 인해 인공지능 과목을 유관순 교수가 담당하고 있다는 정보가 사라진다.&lt;br /&gt;
*BCNF 분해 방법&lt;br /&gt;
**함수적 종속성 Z → X가 있으며 Z가 후보 키가 아닌 경우, (R - X)와 ZX로 릴레이션을 분리&lt;br /&gt;
**예시. 함수적 종속성 (교수 → 과목)이 있으며, 교수가 후보 키가 아니기 때문에, (학번, 교수), (교수, 과목)으로 분리&lt;br /&gt;
*BCNF 분해의 특징&lt;br /&gt;
**무손실 조인 분해&lt;br /&gt;
**종속성 유지가 불가능할 수 있음(예시의 경우 함수적 종속성 &amp;quot;(학번, 과목) → 교수&amp;quot;를 유지할 수 없음)&lt;br /&gt;
*BCNF를 만족시키는 릴레이션&lt;br /&gt;
**삽입 이상 해결: 200 학생이 데이터베이스를 수강하기 위해, 홍길동 교수의 정보가 삽입될 필요가 없어진다.&lt;br /&gt;
**갱신 이상 해결: 장영실 교수의 담당 과목을 변경하기 위해 다른 튜플들을 검색해서 수정할 필요가 없다.&lt;br /&gt;
**삭제 이상 해결: 300 학생이 자퇴하면, 300 학생의 수강 정보만 삭제하면 된다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!학번&lt;br /&gt;
!교수&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|100&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|200&lt;br /&gt;
|장영실&lt;br /&gt;
|-&lt;br /&gt;
|300&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!과목&lt;br /&gt;
! 교수&lt;br /&gt;
|-&lt;br /&gt;
|데이터베이스&lt;br /&gt;
|홍길동&lt;br /&gt;
|-&lt;br /&gt;
|자료구조&lt;br /&gt;
|임꺽정&lt;br /&gt;
|-&lt;br /&gt;
|네트워크&lt;br /&gt;
|장영실&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===4NF===&lt;br /&gt;
&lt;br /&gt;
;Fourth Normal Form&lt;br /&gt;
;4NF를 만족하려면 다치 종속성을 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*4NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
* 4NF를 만족시키는 릴레이션&lt;br /&gt;
&lt;br /&gt;
===5NF===&lt;br /&gt;
&lt;br /&gt;
;Fifth Normal Form&lt;br /&gt;
;5NF를 만족하려면 조인 종속성 제거해야 한다.&lt;br /&gt;
&lt;br /&gt;
*5NF를 만족하지 않는 릴레이션&lt;br /&gt;
*&#039;&#039;&#039;발생할 수 있는 이상(Anomaly)의 예&#039;&#039;&#039;&lt;br /&gt;
*5NF를 만족시키는 릴레이션&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD_%EB%AA%85%EC%84%B8&amp;diff=39292</id>
		<title>요구사항 명세</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%9A%94%EA%B5%AC%EC%82%AC%ED%95%AD_%EB%AA%85%EC%84%B8&amp;diff=39292"/>
		<updated>2024-05-04T07:17:45Z</updated>

		<summary type="html">&lt;p&gt;손대호: 오타 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Requirement Specification&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
※ Requirement Specification은 때로는 &#039;[[소프트웨어 요구사항 명세서|요구사항 명세서]]&#039;, 즉 문서 그 자체를 의미하기도 함&lt;br /&gt;
&lt;br /&gt;
* 요구사항 명세는 분석된 요구사항을 바탕으로 모델을 작성하고 문서화하는 것을 의미&lt;br /&gt;
* 기능 요구사항을 빠짐없이 기술&lt;br /&gt;
* 비기능 요구사항은 필요한 것만 기술&lt;br /&gt;
* 구체적인 명세를 위해 소단위 명세서(Mini-Spec)가 사용될 수 있음&lt;br /&gt;
&lt;br /&gt;
== 요구사항 명세 기법 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;구분&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;정형 명세 기법&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;비정형 명세 기법&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;기법&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
* 수학적 원리 기반&lt;br /&gt;
* 모델 기반&lt;br /&gt;
|&lt;br /&gt;
* 상태/기능/객체 중심&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;작성기법&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
* 수학적 기호&lt;br /&gt;
* 정형화된 표기법&lt;br /&gt;
|&lt;br /&gt;
* 일반 명사, 동사 등의 자연어를 기반으로 서술&lt;br /&gt;
* 다이어그램으로 작성&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;특징&#039;&#039;&#039;&lt;br /&gt;
|&lt;br /&gt;
* 요구사항을 정확하고 간결하게 표현 가능&lt;br /&gt;
* 요구사항에 대한 결과가 작성자에 관계없이 일관성이 있으므로 완전성 검증이 가능함&lt;br /&gt;
* 표기법이 어려워 사용자가 이해하기 어려움&lt;br /&gt;
|&lt;br /&gt;
* 자연어의 사용으로 인해 요구사항에 대한 결과가 작성자에 따라 다를 수 있어 일관성이 떨어지고, 해석이 달라질 수 있음&lt;br /&gt;
* 내용의 이해가 쉬워 의사소통이 용이함&lt;br /&gt;
|-&lt;br /&gt;
!&#039;&#039;&#039;종류&#039;&#039;&#039;&lt;br /&gt;
|VDM, Z, Petri-net, CSP 등&lt;br /&gt;
|FSM, Decision Table, ER 모델링, State Chart(SADT) 등&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%95%98%EB%91%A1&amp;diff=39291</id>
		<title>하둡</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%95%98%EB%91%A1&amp;diff=39291"/>
		<updated>2024-05-03T08:44:33Z</updated>

		<summary type="html">&lt;p&gt;손대호: 어색한 문자 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:데이터베이스]]&lt;br /&gt;
&lt;br /&gt;
;Hadoop&lt;br /&gt;
;다수의 컴퓨터로 분산 구성된 [[빅데이터]]를 병렬로 처리할 수 있는 [[공개 소프트웨어]] 프레임워크&lt;br /&gt;
&lt;br /&gt;
==특징==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;분산 구조&#039;&#039;&#039;: 여러개의 서버, 일반 PC 등을 모아 분산된 파일시스템 및 분석 시스템 형성 가능&lt;br /&gt;
*&#039;&#039;&#039;[[공개 소프트웨어]]&#039;&#039;&#039;: 무료로 자유롭게, 필요한 경우 변형하여 사용 가능&lt;br /&gt;
*&#039;&#039;&#039;[[결함 허용]] 및 [[확장성]]&#039;&#039;&#039;: 성능 증강이 필요하면 노드를 쉽게 추가 가능, 일부 노드가 죽어도 정상 동작&lt;br /&gt;
&lt;br /&gt;
==구조==&lt;br /&gt;
&lt;br /&gt;
;크게 [[맵리듀스]]와 하둡 분산 파일 시스템(HDFS)으로 나눌 수 있다.&lt;br /&gt;
&lt;br /&gt;
[[파일:하둡 클러스터.png]]&lt;br /&gt;
&lt;br /&gt;
===하둡 분산 파일 시스템===&lt;br /&gt;
&lt;br /&gt;
;Hadoop Distributed File System&lt;br /&gt;
&lt;br /&gt;
*네임노드(Namenode): 마스터 노드&lt;br /&gt;
*데이터노드(Datanode): 슬레이브 노드&lt;br /&gt;
&lt;br /&gt;
===맵리듀스===&lt;br /&gt;
&lt;br /&gt;
;MapReduce&lt;br /&gt;
&lt;br /&gt;
*잡 트래커&lt;br /&gt;
*태스크 트래커&lt;br /&gt;
&lt;br /&gt;
==하둡 에코시스템==&lt;br /&gt;
[[파일:하둡 에코시스템.png]]&lt;br /&gt;
&lt;br /&gt;
;하둡 코어 프로젝트(HDFS, 맵리듀스)와 하둡 서브 프로젝트(수집, 분석, 마이닝 등)로 구성&lt;br /&gt;
&lt;br /&gt;
===Zookeeper(주키퍼)===&lt;br /&gt;
===Oozie(우지)===&lt;br /&gt;
===Avro(에이브로)===&lt;br /&gt;
===Parquet(파케이)===&lt;br /&gt;
===Flume(플룸)===&lt;br /&gt;
===Sqoop(스쿱)===&lt;br /&gt;
===Pig(피그)===&lt;br /&gt;
===Crunch(크런치)===&lt;br /&gt;
===HBase===&lt;br /&gt;
&lt;br /&gt;
*HDFS를 보다 효율적으로 사용하기 위한 시스템&lt;br /&gt;
*구조화된 대용량의 데이터에 빠른 [[임의 접근]]을 제공(Latency 감소)&lt;br /&gt;
*HDFS의 데이터에 대한 실시간 읽기/쓰기 기능 제공&lt;br /&gt;
&lt;br /&gt;
===Hive(하이브)===&lt;br /&gt;
===Impala===&lt;br /&gt;
===Tajo(타조)===&lt;br /&gt;
&lt;br /&gt;
* 오픈소스 기반 분산 컴퓨터 플랫폼인 아파치 하둡(Apache Hadoop) 기반의 분산 데이터 웨어하우스 프로젝트로 대규모 데이터 처리와 실시간 상호 분석에 모두 사용 가능함.&lt;br /&gt;
&lt;br /&gt;
==하둡 배포판==&lt;br /&gt;
&lt;br /&gt;
*아파치 하둡&lt;br /&gt;
*클라우데라 하둡(CDH)&lt;br /&gt;
*호튼웍스 하둡&lt;br /&gt;
*앱알(MAPR) 하둡&lt;br /&gt;
&lt;br /&gt;
==한계==&lt;br /&gt;
&lt;br /&gt;
*실시간 데이터 처리에는 비효율적&lt;br /&gt;
*비동기적 데이터 처리에 비효율적&lt;br /&gt;
*반복 작업이 많은 경우에는 비효율적&lt;br /&gt;
&lt;br /&gt;
==참조 문헌==&lt;br /&gt;
&lt;br /&gt;
*[http://www.incodom.kr/hadoop_%EC%B4%9D%EC%A0%95%EB%A6%AC_2%ED%8E%B8 hadoop 총정리 2편]&lt;br /&gt;
*[https://www.youtube.com/channel/UCKttG86PDVKdGXHmTxnLD-A Big Data Koo(구자환 교수님 채널)]&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C&amp;diff=39290</id>
		<title>교착상태</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C&amp;diff=39290"/>
		<updated>2024-05-03T05:58:23Z</updated>

		<summary type="html">&lt;p&gt;손대호: /* 교착상태의 방지법 */  띄어쓰기 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 개요 ==&lt;br /&gt;
* 교착상태: Deadlock&lt;br /&gt;
* 두 개 이상의 프로세스가 서로의 작업이 끝나기만을 기다리고 있어 둘 다 영원히 끝나지 않는 상황을 가리킨다.&lt;br /&gt;
&lt;br /&gt;
== 예시 ==&lt;br /&gt;
semaphores A and B, initialized to 1&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| Process1&lt;br /&gt;
| Process2&lt;br /&gt;
|-&lt;br /&gt;
| wait(A);&lt;br /&gt;
| wait(B);&lt;br /&gt;
|-&lt;br /&gt;
| wait(B);&lt;br /&gt;
| wait(A);&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 교착상태의 4가지 필요조건 ==&lt;br /&gt;
* 아래 4가지 조건&amp;lt;ref&amp;gt;순서나 우선순위는 없다.&amp;lt;/ref&amp;gt;이 모두 만족되는 경우 데드락이 &#039;&#039;&#039;발생할 가능성&#039;&#039;&#039;이 있다.&lt;br /&gt;
* 하나라도 만족하지 않으면 절대 발생하지 않는다.&lt;br /&gt;
# &#039;&#039;&#039;상호 배제(Mutual exclusion)&#039;&#039;&#039; &lt;br /&gt;
#* 한 리소스는 한 번에 한 프로세스만이 사용할 수 있음&lt;br /&gt;
# &#039;&#039;&#039;점유와 대기(Hold and wait)&#039;&#039;&#039; &lt;br /&gt;
#* 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 기다리고 있음&lt;br /&gt;
# &#039;&#039;&#039;비선점(No preemption)&#039;&#039;&#039;&lt;br /&gt;
#* 프로세스가 태스크를 마친 후 리소스를 자발적으로 반환할 때까지 기다림 (강제로 빼앗지 않는다)&lt;br /&gt;
# &#039;&#039;&#039;환형 대기(Circular wait)&#039;&#039;&#039; &lt;br /&gt;
#* Hold and wait 관계의 프로세스들이 서로를 기다림&lt;br /&gt;
&lt;br /&gt;
== 교착상태의 방지법 ==&lt;br /&gt;
* 사전에 교착상태가 발생하지 않도록 조치하거나, 발생한 뒤에 고치는 방법이 있다. 대표적으로 아래 세 가지로 나눈다.&lt;br /&gt;
# &#039;&#039;&#039;방지(Prevention)&#039;&#039;&#039;&lt;br /&gt;
#* 할당 구조 측면에서, 교착상태가 발생할 수 있는 요구조건을 만족시키지 않게 함으로써 교착상태를 방지한다.&lt;br /&gt;
# &#039;&#039;&#039;회피(Avoidance)&#039;&#039;&#039;&lt;br /&gt;
#* 리소스 할당의 측면에서, 교착상태가 발생할 가능성이 있는 자원 할당(unsafe allocation)을 하지 않는다.&lt;br /&gt;
#* 대표적으로 [[은행원 알고리즘]], [[자원 할당 그래프]]가 있다.&lt;br /&gt;
# &#039;&#039;&#039;탐지 및 회복(Detection and Recovery)&#039;&#039;&#039;&lt;br /&gt;
#* 교착상태가 발생할 수 있도록 놔두고 교착상태가 발생할 경우 찾아내어 고친다.&lt;br /&gt;
&lt;br /&gt;
== 참고 ==&lt;br /&gt;
* 초기 원문 출처: [http://raisonde.tistory.com/entry/Deadlock의-발생-조건과-해결법 [지식잡식 블로그]]&lt;br /&gt;
&lt;br /&gt;
[[분류:운영체제]]&lt;br /&gt;
[[분류:정보처리기사]]&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%AA%A8%EB%93%88&amp;diff=39289</id>
		<title>모듈</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%AA%A8%EB%93%88&amp;diff=39289"/>
		<updated>2024-05-03T02:44:04Z</updated>

		<summary type="html">&lt;p&gt;손대호: 모듈에 대한 설명 추가/변경&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:일반 IT용어]]&lt;br /&gt;
;Module&lt;br /&gt;
프로그램을 구성하는 구성 요소로, 관련된 데이터와 함수를 하나로 묶은 단위&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
- 소프트웨어 구조를 이루며, 다른 것들과 구별될 수 있는 독립적인 기능을 갖는 단위이다.&lt;br /&gt;
&lt;br /&gt;
- 하나 또는 몇 개의 논리적인 기능을 수행하기 위한 명령어들의 집합이라고도 할 수 있다.&lt;br /&gt;
&lt;br /&gt;
- 서로 모여 하나의 완전한 프로그램으로 만들어질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[모듈화]]&lt;br /&gt;
* [[공통 모듈]]&lt;br /&gt;
* [[응집도]]&lt;br /&gt;
* [[결합도]]&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EB%B9%84%EC%9A%A9_%EC%82%B0%EC%A0%95&amp;diff=39288</id>
		<title>소프트웨어 비용 산정</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%EB%B9%84%EC%9A%A9_%EC%82%B0%EC%A0%95&amp;diff=39288"/>
		<updated>2024-05-03T02:35:26Z</updated>

		<summary type="html">&lt;p&gt;손대호: 잘못된 링크 제거(Putnam) 및 모형 별 간략한 설명 추가&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:소프트웨어 공학]]&lt;br /&gt;
[[분류:프로젝트 관리]]&lt;br /&gt;
&lt;br /&gt;
;Software development cost estimate&lt;br /&gt;
&lt;br /&gt;
=구분=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!방식&lt;br /&gt;
!설명&lt;br /&gt;
!예시&lt;br /&gt;
|-&lt;br /&gt;
|하향식 산정&lt;br /&gt;
|경험자의 경험, 지식을 기반으로 합의를 통해 산정&lt;br /&gt;
|&lt;br /&gt;
*[[델파이법]]&lt;br /&gt;
|-&lt;br /&gt;
|상향식 산정&lt;br /&gt;
|각 업무 분류별로 산정하여 합산&lt;br /&gt;
|&lt;br /&gt;
*[[LOC]]&lt;br /&gt;
|-&lt;br /&gt;
|수학적 산정&lt;br /&gt;
|과학적인 방법론 및 수학 공식 적용&lt;br /&gt;
|&lt;br /&gt;
*[[COCOMO]]&lt;br /&gt;
*[[기능 점수]]&lt;br /&gt;
*Putnam&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=기본 구성=&lt;br /&gt;
개발비 + 직접경비 + 이윤(개발비의 25% 이내)&lt;br /&gt;
&lt;br /&gt;
=모형 종류=&lt;br /&gt;
&lt;br /&gt;
== [[델파이법]] ==&lt;br /&gt;
&lt;br /&gt;
* 시스템에 관리 전문적인 지식을 가진 전문가 집단을 구성하고, 토론을 통해 위험을 분석하는 정성적인 방법&lt;br /&gt;
&lt;br /&gt;
== [[LOC]] ==&lt;br /&gt;
&#039;&#039;&#039;LOC, Life Of Code&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 각 기능의 LOC(원시 코드 라인 수)의 낙관치, 기대치, 비관치를 측정하여 예측치를 구하고 이것으로 비용을 산정하는 기법&lt;br /&gt;
&lt;br /&gt;
==[[COCOMO]]==&lt;br /&gt;
&#039;&#039;&#039;COCOMO, COnstructive COst Model&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 시스템의 비용을 산정하기 위해 시스템을 구성하고 있는 모듈과 서브 시스템의 비용 합계를 계산하는 방식&lt;br /&gt;
&lt;br /&gt;
== [[기능 점수]] ==&lt;br /&gt;
&#039;&#039;&#039;FP, Function Point&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* 최종 사용자 입장에서의 기능적 복잡도를 고려하는 국제 표준(ISO/IEC 14143) 소프트웨어 규모 및 비용산정 방식&lt;br /&gt;
&lt;br /&gt;
== Putnam ==&lt;br /&gt;
&lt;br /&gt;
* 시간에 따라 함수로 표현되는 Rayleigh-Norden 곡선의 노력 분포도를 기초로 하며, 소프트웨어 생명 주기의 전 과정 동안에 사용될 노력의 분포를 예상하는 모형&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%96%B8%EC%96%B4&amp;diff=39287</id>
		<title>스크립트 언어</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8_%EC%96%B8%EC%96%B4&amp;diff=39287"/>
		<updated>2024-05-02T17:29:21Z</updated>

		<summary type="html">&lt;p&gt;손대호: /* 종류 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:프로그래밍]][[분류:프로그래밍 언어]]&lt;br /&gt;
;[[프로그래밍 언어]]의 한 종류로, 이미 존재하는 애플리케이션을 제어하기 위한 [[프로그래밍 언어]]&lt;br /&gt;
* 대표적인 예로, 웹브라우저를 제어하기 위한 [[자바 스크립트]]&lt;br /&gt;
&lt;br /&gt;
== 특징 ==&lt;br /&gt;
* 단위 코드의 실행 속도가 빠르나, 프로그램 전체의 속도는 느림&lt;br /&gt;
* 고급 언어로, 대부분 사용자가 이해하기 쉬운 형태로 이루어짐&lt;br /&gt;
* [[튜링 완전성]]을 제공하지 않을 수도 있음&lt;br /&gt;
&lt;br /&gt;
== 인터프리터 언어 ==&lt;br /&gt;
* 대부분의 스크립트 언어는 [[인터프리터 언어]]&lt;br /&gt;
&lt;br /&gt;
=== 컴파일용 언어의 단점 ===&lt;br /&gt;
* 대부분의 고급 [[프로그래밍 언어]]는 컴파일러를 통해 기계어로 번역 후 실행&lt;br /&gt;
* 소스코드 전체를 컴파일 하는데 상당한 시간 소요&lt;br /&gt;
* 수정 시 마다 재 컴파일이 필요하여, 개발 중 잦은 컴파일에 따른 시간 지연&lt;br /&gt;
&lt;br /&gt;
=== 인터프리터 언어의 장점 ===&lt;br /&gt;
* 인터프리터 언어 한줄씩 읽어 실행하는 방식으로, 컴파일 과정이 불필요&lt;br /&gt;
* 스크립트 언어는 프로그램 동작 중에 프로그램을 보조하기 위해 동적으로 실행되는 코드로, 인터프리터 언어가 유리&lt;br /&gt;
&lt;br /&gt;
== 언어인지에 대한 논란 ==&lt;br /&gt;
* 스크립트 언어는 제한된 기능으로, &#039;언어&#039;라고 부르기 적절치 않다는 의견 존재&lt;br /&gt;
* &#039;언어&#039;를 제외하고 스크립트라고 부르기도 함&lt;br /&gt;
&lt;br /&gt;
== 종류 ==&lt;br /&gt;
* [[애플스크립트]]&lt;br /&gt;
* [[자바스크립트]]&lt;br /&gt;
* ActionScript&lt;br /&gt;
* AutoHotKey[1]&lt;br /&gt;
* Perl&lt;br /&gt;
* [[JSP]]&lt;br /&gt;
* [[PHP]]&lt;br /&gt;
* [[파이썬]]&lt;br /&gt;
* Lua&lt;br /&gt;
* Ruby&lt;br /&gt;
* VBS&lt;br /&gt;
* 셸 스크립트&lt;br /&gt;
* Basic&lt;br /&gt;
* 제이쿼리(jQuery)&lt;br /&gt;
* JSP&lt;br /&gt;
* ASP&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%ED%8A%B8%EB%A6%AC&amp;diff=39286</id>
		<title>트리</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8A%B8%EB%A6%AC&amp;diff=39286"/>
		<updated>2024-05-02T17:16:40Z</updated>

		<summary type="html">&lt;p&gt;손대호: 전위 순회, 중위 순회, 후위 순회에 대한 설명과 방법 추가. 레벨 순서 순회 추가&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:자료 구조]]&lt;br /&gt;
;Tree&lt;br /&gt;
;Root를 중심으로 하위 노드들을 가지며 가지처럼 뻗어나가는 [[비선형 구조|비선형]], [[비순환 구조]]&lt;br /&gt;
&lt;br /&gt;
== 관련 용어 ==&lt;br /&gt;
[[파일:트리 용어.jpeg]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 용어 !! 의미&lt;br /&gt;
|-&lt;br /&gt;
| 차수(degree) || 노드의 부족 트리의 개수&lt;br /&gt;
* 트리 전체의 차수: 트리에 속한 최대 차수&lt;br /&gt;
|-&lt;br /&gt;
| 단말 노드(leaf, terminal) || 차수가 0인, 가장 끝의 노드&lt;br /&gt;
|-&lt;br /&gt;
| 내부 노드(internal) || 차수가 1 이상인, 단말이 아닌 노드&lt;br /&gt;
|-&lt;br /&gt;
| 부모(parent) || 바로 상위 노드&lt;br /&gt;
|-&lt;br /&gt;
| 자식(child) || 바로 하위 노드&lt;br /&gt;
|-&lt;br /&gt;
| 형제(sibling) || 부모가 같은 노드&lt;br /&gt;
|-&lt;br /&gt;
| 조상(ancestor) || 상위 노드, 부모 노드들의 집합&lt;br /&gt;
|-&lt;br /&gt;
| 자손(descendant) || 하위 노드, 자식 노드들의 집합&lt;br /&gt;
|-&lt;br /&gt;
| 레벨(level) || 상위 노드를 기준으로 한 깊이&lt;br /&gt;
|-&lt;br /&gt;
| 깊이(depth) || 트리에 속한 최대 레벨&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 트리의 활용 ==&lt;br /&gt;
* 검색: log(n)의 효율&lt;br /&gt;
* 인덱스: [[B 트리]], [[AVL 트리]], [[T 트리]] 등&lt;br /&gt;
* 정렬: [[힙|Heap]] 구조 이용&lt;br /&gt;
&lt;br /&gt;
== 트리의 순회 ==&lt;br /&gt;
;Tree Traversal&lt;br /&gt;
트리를 조회하는 방식&lt;br /&gt;
&lt;br /&gt;
====== 전위 순회(Preorder) ======&lt;br /&gt;
* 깊이 우선 순회(DFT, Depth-First Traversal) 라고도 하며, 주로 트리를 복사하거나 전위표기법을 구하는데 사용한다.[https://ko.wikipedia.org/wiki/%ED%8A%B8%EB%A6%AC_%EC%88%9C%ED%9A%8C#%EC%A0%84%EC%9C%84_%EC%88%9C%ED%9A%8C_2]&lt;br /&gt;
* 복사할 때 사용하는 이유는 트리의 노드부터 복사해야하기 때문이다.&lt;br /&gt;
* 다음과 같은 방법으로 진행한다.&lt;br /&gt;
*# 노드를 방문한다.&lt;br /&gt;
*# 왼쪽 서브 트리를 전위 순회한다.&lt;br /&gt;
*# 오른쪽 서브 트리를 전위 순회한다.&lt;br /&gt;
&lt;br /&gt;
====== 중위 순회(Inorder) ======&lt;br /&gt;
* 대칭 순회(symmetric) 라고도 하며, 이진 탐색 트리(BST, Binary Search Tree) 에서 값을 가져올 때 주로 사용한다.&lt;br /&gt;
* 다음과 같은 방법으로 진행한다.&lt;br /&gt;
*# 왼쪽 서브 트리를 중위 순회한다.&lt;br /&gt;
*# 노드를 방문한다.&lt;br /&gt;
*# 오른쪽 서브 트리를 중위 순회한다.&lt;br /&gt;
&lt;br /&gt;
====== 후위 순회(Postorder) ======&lt;br /&gt;
* 값을 삭제할 때 주로 사용한다. 그 이유는 루트 노드를 지우기 전에 하위 노드를 먼저 지워야하기 때문이다.&lt;br /&gt;
* 다음과 같은 방법으로 진행한다.&lt;br /&gt;
*# 왼쪽 서브 트리를 후위 순회한다.&lt;br /&gt;
*# 오른쪽 서브 트리를 후위 순회한다.&lt;br /&gt;
*# 노드를 방문한다.&lt;br /&gt;
&lt;br /&gt;
====== 레벨 순서 순회(level-order) ======&lt;br /&gt;
* 너비 우선 순회(breadth-first traversal) 라고도 한다.&lt;br /&gt;
* 모든 노드를 낮은 레벨부터 차례대로 순회한다.&lt;br /&gt;
&lt;br /&gt;
== [[이진 트리]] ==&lt;br /&gt;
;Binary Tree&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%ED%8C%A8%ED%82%A4%EC%A7%95_%EB%8F%84%EA%B5%AC&amp;diff=39285</id>
		<title>소프트웨어 패키징 도구</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%ED%8C%A8%ED%82%A4%EC%A7%95_%EB%8F%84%EA%B5%AC&amp;diff=39285"/>
		<updated>2024-05-02T16:42:53Z</updated>

		<summary type="html">&lt;p&gt;손대호: 띄어쓰기 수정&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:소프트웨어 공학]]&lt;br /&gt;
* 상위 문서 : [[소프트웨어 패키징]]&lt;br /&gt;
;Software Packaging Tool&lt;br /&gt;
;배포를 위한 패키징 시에 디지털 콘텐츠의 지식재산권을 보호하고 관리하는 기능을 제공하며, 안전한 유통과 배포를 보장하는 도구&lt;br /&gt;
* 불법 복제로부터 디지털 콘텐츠의 지식재산권을 보호해 주는 사용 권한 제어 기술, 패키징 기술, 라이선스 관리, 권한 통제 기술 등을 포함&lt;br /&gt;
&lt;br /&gt;
== 패키징 도구 활용 시 고려 사항 ==&lt;br /&gt;
* 반드시 암호화/보안을 고려&lt;br /&gt;
** 패키징 시 사용자에게 배포되는 소프트웨어임을 감안하여 반드시 내부 콘텐츠에 대 한 암호화 및 보안을 고려&lt;br /&gt;
* 추가로 다양한 이기종 연동을 고려&lt;br /&gt;
** 패키징 도구를 활용하여 여러 가지 이기종 콘텐츠 및 단말기 간 DRM 연동을 고려&lt;br /&gt;
* 사용자 편의성을 위한 복잡성 및 비효율성 문제를 고려&lt;br /&gt;
** 패키징 도구를 고려하면 사용자의 입장에서 불편해질 수 있는 문제를 고려하여, 최대 한 효율적으로 적용될 수 있도록 고려&lt;br /&gt;
* 제품 소프트웨어의 종류에 적합한 암호화 알고리즘을 적용&lt;br /&gt;
** 암호화 알고리즘이 여러 가지 종류가 있는데, 제품 소프트웨어의 종류에 맞는 알고리 즘을 선택하여 배포 시 범용성에 지장이 없도록 고려&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%ED%8C%A8%ED%82%A4%EC%A7%95_%EB%8F%84%EA%B5%AC&amp;diff=39284</id>
		<title>소프트웨어 패키징 도구</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4_%ED%8C%A8%ED%82%A4%EC%A7%95_%EB%8F%84%EA%B5%AC&amp;diff=39284"/>
		<updated>2024-05-02T16:41:57Z</updated>

		<summary type="html">&lt;p&gt;손대호: 용어 변경&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[분류:소프트웨어 공학]]&lt;br /&gt;
* 상위 문서 : [[소프트웨어 패키징]]&lt;br /&gt;
;Software Packaging Tool&lt;br /&gt;
;배포를 위한 패키징 시에 디지털 콘텐츠의 지식재산권 을 보호하고 관리하는 기능을 제공하며, 안전한 유통과 배포를 보장하는 도구&lt;br /&gt;
* 불법 복제로부터 디지털 콘텐츠의 지식재산권을 보호해 주는 사용 권한 제어 기술, 패키징 기술, 라이선스 관리, 권한 통제 기술 등을 포함&lt;br /&gt;
&lt;br /&gt;
== 패키징 도구 활용 시 고려 사항 ==&lt;br /&gt;
* 반드시 암호화/보안을 고려&lt;br /&gt;
** 패키징 시 사용자에게 배포되는 소프트웨어임을 감안하여 반드시 내부 콘텐츠에 대 한 암호화 및 보안을 고려&lt;br /&gt;
* 추가로 다양한 이기종 연동을 고려&lt;br /&gt;
** 패키징 도구를 활용하여 여러 가지 이기종 콘텐츠 및 단말기 간 DRM 연동을 고려&lt;br /&gt;
* 사용자 편의성을 위한 복잡성 및 비효율성 문제를 고려&lt;br /&gt;
** 패키징 도구를 고려하면 사용자의 입장에서 불편해질 수 있는 문제를 고려하여, 최대 한 효율적으로 적용될 수 있도록 고려&lt;br /&gt;
* 제품 소프트웨어의 종류에 적합한 암호화 알고리즘을 적용&lt;br /&gt;
** 암호화 알고리즘이 여러 가지 종류가 있는데, 제품 소프트웨어의 종류에 맞는 알고리 즘을 선택하여 배포 시 범용성에 지장이 없도록 고려&lt;/div&gt;</summary>
		<author><name>손대호</name></author>
	</entry>
</feed>