<?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=%EB%9D%BC%EC%9D%B4%EC%96%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=%EB%9D%BC%EC%9D%B4%EC%96%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/%EB%9D%BC%EC%9D%B4%EC%96%B8"/>
	<updated>2026-09-16T01:51:51Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%A7%84%EB%B2%95&amp;diff=54445</id>
		<title>진법</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%A7%84%EB%B2%95&amp;diff=54445"/>
		<updated>2026-05-22T15:25:57Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 진법(Numeral System)은 수를 표현하는 체계이다. 컴퓨터와 정보처리 분야에서는 특히 2진법, 8진법, 10진법, 16진법이 자주 사용되며, 수의 표현, 자료 표현, 컴퓨터 구조, 프로그래밍, 네트워크 주소 표현 등과 밀접하게 관련된다.  == 개요 == 진법은 숫자를 어떤 기준으로 묶어 표현할 것인지를 정하는 방식이다. 일반적으로 사용하는 10진법은 0부터 9까지의...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;진법(Numeral System)은 수를 표현하는 체계이다. 컴퓨터와 정보처리 분야에서는 특히 [[2진법]], [[8진법]], [[10진법]], [[16진법]]이 자주 사용되며, 수의 표현, 자료 표현, 컴퓨터 구조, 프로그래밍, 네트워크 주소 표현 등과 밀접하게 관련된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
진법은 숫자를 어떤 기준으로 묶어 표현할 것인지를 정하는 방식이다. 일반적으로 사용하는 [[10진법]]은 0부터 9까지의 10개 숫자를 사용하고, 컴퓨터 내부에서 사용하는 [[2진법]]은 0과 1만 사용한다.&lt;br /&gt;
&lt;br /&gt;
진법에서 기준이 되는 수를 기수 또는 밑(base, radix)이라고 한다. 예를 들어 2진법의 밑은 2이고, 10진법의 밑은 10이며, 16진법의 밑은 16이다.&lt;br /&gt;
&lt;br /&gt;
위치적 기수법에서는 숫자의 위치에 따라 값이 달라진다. 같은 숫자 1이라도 10진수 10의 자리와 1의 자리에서 의미가 다르다.&lt;br /&gt;
&lt;br /&gt;
== 기수 ==&lt;br /&gt;
기수(base)는 진법에서 사용하는 숫자의 개수를 의미한다.&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;
| [[2진법]]&lt;br /&gt;
| 2&lt;br /&gt;
| 0, 1&lt;br /&gt;
| 1011&lt;br /&gt;
|-&lt;br /&gt;
| [[8진법]]&lt;br /&gt;
| 8&lt;br /&gt;
| 0 ~ 7&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| [[10진법]]&lt;br /&gt;
| 10&lt;br /&gt;
| 0 ~ 9&lt;br /&gt;
| 123&lt;br /&gt;
|-&lt;br /&gt;
| [[16진법]]&lt;br /&gt;
| 16&lt;br /&gt;
| 0 ~ 9, A ~ F&lt;br /&gt;
| 7B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 위치적 기수법 ==&lt;br /&gt;
위치적 기수법은 숫자가 놓인 위치에 따라 자릿값이 결정되는 수 표현 방식이다.&lt;br /&gt;
&lt;br /&gt;
10진수 123은 다음과 같이 해석된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
123 = 1 × 10^2 + 2 × 10^1 + 3 × 10^0&lt;br /&gt;
    = 100 + 20 + 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2진수 1011은 다음과 같이 해석된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1011(2) = 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0&lt;br /&gt;
        = 8 + 0 + 2 + 1&lt;br /&gt;
        = 11(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉, 각 자리의 값은 해당 진법의 기수를 거듭제곱한 값과 곱해져 전체 수를 이룬다.&lt;br /&gt;
&lt;br /&gt;
== 주요 진법 ==&lt;br /&gt;
&lt;br /&gt;
=== 2진법 ===&lt;br /&gt;
[[2진법]]은 0과 1만 사용하는 진법이다. 컴퓨터 내부의 데이터 표현에 사용된다.&lt;br /&gt;
&lt;br /&gt;
컴퓨터는 전기적 신호의 상태를 이용하여 정보를 표현하므로, 켜짐과 꺼짐, 참과 거짓, 1과 0으로 표현하기 쉬운 2진법을 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1010(2) = 10(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8진법 ===&lt;br /&gt;
[[8진법]]은 0부터 7까지의 숫자를 사용하는 진법이다.&lt;br /&gt;
&lt;br /&gt;
2진수 3자리와 8진수 1자리가 정확히 대응되므로, 과거 컴퓨터 시스템에서 2진수를 간단히 표현하는 데 사용되었다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
111(2) = 7(8)&lt;br /&gt;
1000(2) = 10(8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10진법 ===&lt;br /&gt;
[[10진법]]은 사람이 일상적으로 가장 많이 사용하는 진법이다. 0부터 9까지의 10개 숫자를 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
256(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16진법 ===&lt;br /&gt;
[[16진법]]은 0부터 9까지의 숫자와 A부터 F까지의 문자를 사용하는 진법이다.&lt;br /&gt;
&lt;br /&gt;
16진법의 각 문자는 다음 값을 의미한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 16진수&lt;br /&gt;
! 10진수&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| C&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| D&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| E&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| F&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
16진수 1자리는 2진수 4자리와 정확히 대응된다. 이 때문에 컴퓨터 분야에서 메모리 주소, 색상 코드, 기계어, 네트워크 주소 표현 등에 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1111(2) = F(16)&lt;br /&gt;
11111111(2) = FF(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 진법 표기 ==&lt;br /&gt;
서로 다른 진법의 수를 구분하기 위해 괄호와 밑을 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1010(2)&lt;br /&gt;
12(8)&lt;br /&gt;
10(10)&lt;br /&gt;
A(16)&lt;br /&gt;
&amp;lt;/pre&amp;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;
! 예&lt;br /&gt;
|-&lt;br /&gt;
| 0b&lt;br /&gt;
| 2진수&lt;br /&gt;
| 0b1010&lt;br /&gt;
|-&lt;br /&gt;
| 0o&lt;br /&gt;
| 8진수&lt;br /&gt;
| 0o12&lt;br /&gt;
|-&lt;br /&gt;
| 0x&lt;br /&gt;
| 16진수&lt;br /&gt;
| 0x0A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
언어에 따라 8진수 표기 방식이 다를 수 있으므로 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 10진수로 변환 ==&lt;br /&gt;
다른 진법의 수를 10진수로 변환하려면 각 자리의 값을 기수의 거듭제곱과 곱하여 더한다.&lt;br /&gt;
&lt;br /&gt;
=== 2진수에서 10진수 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1011(2)&lt;br /&gt;
= 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0&lt;br /&gt;
= 8 + 0 + 2 + 1&lt;br /&gt;
= 11(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8진수에서 10진수 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
17(8)&lt;br /&gt;
= 1 × 8^1 + 7 × 8^0&lt;br /&gt;
= 8 + 7&lt;br /&gt;
= 15(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16진수에서 10진수 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2F(16)&lt;br /&gt;
= 2 × 16^1 + F × 16^0&lt;br /&gt;
= 2 × 16 + 15&lt;br /&gt;
= 47(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10진수에서 다른 진법으로 변환 ==&lt;br /&gt;
10진수를 다른 진법으로 변환할 때는 변환하려는 기수로 반복해서 나누고, 나머지를 역순으로 읽는다.&lt;br /&gt;
&lt;br /&gt;
=== 10진수에서 2진수 ===&lt;br /&gt;
10진수 13을 2진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
13 ÷ 2 = 6 ... 1&lt;br /&gt;
 6 ÷ 2 = 3 ... 0&lt;br /&gt;
 3 ÷ 2 = 1 ... 1&lt;br /&gt;
 1 ÷ 2 = 0 ... 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
나머지를 아래에서 위로 읽는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
13(10) = 1101(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10진수에서 8진수 ===&lt;br /&gt;
10진수 29를 8진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
29 ÷ 8 = 3 ... 5&lt;br /&gt;
 3 ÷ 8 = 0 ... 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
29(10) = 35(8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10진수에서 16진수 ===&lt;br /&gt;
10진수 47을 16진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
47 ÷ 16 = 2 ... 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
나머지 15는 16진수에서 F이므로 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
47(10) = 2F(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2진수와 8진수 변환 ==&lt;br /&gt;
2진수와 8진수는 서로 쉽게 변환할 수 있다. 8은 2의 3제곱이므로, 2진수 3자리와 8진수 1자리가 대응된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
110101(2)&lt;br /&gt;
= 110 101&lt;br /&gt;
= 6   5&lt;br /&gt;
= 65(8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8진수를 2진수로 바꿀 때는 각 8진수 자리를 3비트 2진수로 바꾼다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65(8)&lt;br /&gt;
= 6      5&lt;br /&gt;
= 110    101&lt;br /&gt;
= 110101(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2진수와 16진수 변환 ==&lt;br /&gt;
2진수와 16진수도 쉽게 변환할 수 있다. 16은 2의 4제곱이므로, 2진수 4자리와 16진수 1자리가 대응된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
11111111(2)&lt;br /&gt;
= 1111 1111&lt;br /&gt;
= F    F&lt;br /&gt;
= FF(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
16진수를 2진수로 바꿀 때는 각 16진수 자리를 4비트 2진수로 바꾼다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2F(16)&lt;br /&gt;
= 2      F&lt;br /&gt;
= 0010   1111&lt;br /&gt;
= 00101111(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
앞쪽의 불필요한 0은 생략할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2F(16) = 101111(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 진법 변환표 ==&lt;br /&gt;
자주 사용하는 10진수, 2진수, 8진수, 16진수의 대응 관계는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 10진수&lt;br /&gt;
! 2진수&lt;br /&gt;
! 8진수&lt;br /&gt;
! 16진수&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0000&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0001&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0010&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0011&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0100&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0101&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 0110&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0111&lt;br /&gt;
| 7&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 1000&lt;br /&gt;
| 10&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 1001&lt;br /&gt;
| 11&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 1010&lt;br /&gt;
| 12&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1011&lt;br /&gt;
| 13&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 1100&lt;br /&gt;
| 14&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 1101&lt;br /&gt;
| 15&lt;br /&gt;
| D&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 1110&lt;br /&gt;
| 16&lt;br /&gt;
| E&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 1111&lt;br /&gt;
| 17&lt;br /&gt;
| F&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;
== 2진법과 컴퓨터 ==&lt;br /&gt;
컴퓨터는 내부적으로 데이터를 0과 1의 조합으로 표현한다. 이는 전기적 신호의 유무, 트랜지스터의 상태, 논리 회로의 참과 거짓을 표현하기에 적합하기 때문이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 8비트는 2진수 8자리로 표현할 수 있으며, 총 256개의 값을 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2^8 = 256&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 1바이트는 일반적으로 0부터 255까지의 값을 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 16진법과 컴퓨터 ==&lt;br /&gt;
16진법은 2진수를 사람이 읽기 쉽게 표현하는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
2진수 8자리는 16진수 2자리로 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
11111111(2) = FF(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 때문에 16진법은 다음과 같은 곳에서 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
* 메모리 주소&lt;br /&gt;
* 색상 코드&lt;br /&gt;
* MAC 주소&lt;br /&gt;
* IPv6 주소&lt;br /&gt;
* 기계어 표현&lt;br /&gt;
* 바이너리 덤프&lt;br /&gt;
* 디버깅 로그&lt;br /&gt;
&lt;br /&gt;
== 색상 코드 ==&lt;br /&gt;
웹 색상은 16진수로 표현되는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#FF0000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이는 빨강, 초록, 파랑 값을 각각 16진수로 표현한 것이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FF = 255&lt;br /&gt;
00 = 0&lt;br /&gt;
00 = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 `#FF0000`은 빨간색을 의미한다.&lt;br /&gt;
&lt;br /&gt;
== 파일 권한과 8진법 ==&lt;br /&gt;
UNIX와 Linux의 파일 권한은 8진법으로 표현되는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 755 file.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 755는 사용자, 그룹, 기타 사용자에 대한 권한을 8진수로 나타낸 것이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 값&lt;br /&gt;
! 권한&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 읽기&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 쓰기&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 실행&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
따라서 7은 읽기, 쓰기, 실행 권한을 모두 가진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
7 = 4 + 2 + 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소수 부분의 진법 변환 ==&lt;br /&gt;
정수뿐 아니라 소수 부분도 진법 변환이 가능하다.&lt;br /&gt;
&lt;br /&gt;
10진수 소수를 2진수로 변환할 때는 소수 부분에 변환하려는 기수를 반복해서 곱하고, 정수 부분을 순서대로 읽는다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 0.625를 2진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.625 × 2 = 1.25  → 1&lt;br /&gt;
0.25  × 2 = 0.5   → 0&lt;br /&gt;
0.5   × 2 = 1.0   → 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.625(10) = 0.101(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 보수와 진법 ==&lt;br /&gt;
컴퓨터에서 음수를 표현할 때 [[보수]] 개념이 사용된다. 특히 2진수에서는 [[1의 보수]]와 [[2의 보수]]가 중요하다.&lt;br /&gt;
&lt;br /&gt;
2의 보수는 현대 컴퓨터에서 정수를 표현할 때 널리 사용되는 방식이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 4비트에서 5는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0101&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-5를 2의 보수로 표현하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0101 → 비트 반전 1010 → 1을 더함 1011&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 4비트 2의 보수 표현에서 -5는 1011이다.&lt;br /&gt;
&lt;br /&gt;
== 진법과 비트 수 ==&lt;br /&gt;
n비트로 표현할 수 있는 값의 개수는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2^n개&lt;br /&gt;
&amp;lt;/pre&amp;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;
! 부호 없는 정수 범위&lt;br /&gt;
|-&lt;br /&gt;
| 4비트&lt;br /&gt;
| 16개&lt;br /&gt;
| 0 ~ 15&lt;br /&gt;
|-&lt;br /&gt;
| 8비트&lt;br /&gt;
| 256개&lt;br /&gt;
| 0 ~ 255&lt;br /&gt;
|-&lt;br /&gt;
| 16비트&lt;br /&gt;
| 65,536개&lt;br /&gt;
| 0 ~ 65,535&lt;br /&gt;
|-&lt;br /&gt;
| 32비트&lt;br /&gt;
| 4,294,967,296개&lt;br /&gt;
| 0 ~ 4,294,967,295&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
부호 있는 정수는 표현 방식에 따라 범위가 달라진다.&lt;br /&gt;
&lt;br /&gt;
== 관련 개념 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== 2진법과 10진법 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 2진법&lt;br /&gt;
! 10진법&lt;br /&gt;
|-&lt;br /&gt;
| 기수&lt;br /&gt;
| 2&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 사용 숫자&lt;br /&gt;
| 0, 1&lt;br /&gt;
| 0 ~ 9&lt;br /&gt;
|-&lt;br /&gt;
| 주요 사용처&lt;br /&gt;
| 컴퓨터 내부 표현&lt;br /&gt;
| 일상적인 수 표현&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 8진법과 16진법 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 8진법&lt;br /&gt;
! 16진법&lt;br /&gt;
|-&lt;br /&gt;
| 기수&lt;br /&gt;
| 8&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| 2진수 대응&lt;br /&gt;
| 3비트&lt;br /&gt;
| 4비트&lt;br /&gt;
|-&lt;br /&gt;
| 사용 숫자&lt;br /&gt;
| 0 ~ 7&lt;br /&gt;
| 0 ~ 9, A ~ F&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;
|-&lt;br /&gt;
| 숫자&lt;br /&gt;
| 수를 나타내기 위해 사용하는 기호&lt;br /&gt;
|-&lt;br /&gt;
| 수&lt;br /&gt;
| 양이나 크기를 나타내는 추상적 값&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예를 들어 10이라는 표기는 10진법에서는 열을 뜻하지만, 2진법에서는 둘을 뜻한다. 즉, 표기는 같아도 진법에 따라 값이 달라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 학습 포인트 ==&lt;br /&gt;
진법은 컴퓨터 구조와 프로그래밍의 기초 개념이다. 학습할 때는 다음 내용을 중심으로 정리하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
* 기수의 의미&lt;br /&gt;
* 위치적 기수법&lt;br /&gt;
* 2진수, 8진수, 10진수, 16진수의 차이&lt;br /&gt;
* 2진수와 8진수의 3비트 대응&lt;br /&gt;
* 2진수와 16진수의 4비트 대응&lt;br /&gt;
* 10진수와 다른 진법 간 변환&lt;br /&gt;
* 16진수 A~F의 의미&lt;br /&gt;
* 비트 수와 표현 가능한 값의 개수&lt;br /&gt;
* 2의 보수와 음수 표현&lt;br /&gt;
* 컴퓨터에서 16진수를 사용하는 이유&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 진법은 수를 표현하는 체계이다.&lt;br /&gt;
* 진법의 기수는 사용하는 숫자의 개수이다.&lt;br /&gt;
* 2진법은 0과 1을 사용한다.&lt;br /&gt;
* 8진법은 0부터 7까지 사용한다.&lt;br /&gt;
* 10진법은 0부터 9까지 사용한다.&lt;br /&gt;
* 16진법은 0부터 9와 A부터 F까지 사용한다.&lt;br /&gt;
* 16진법에서 A는 10, F는 15를 의미한다.&lt;br /&gt;
* 2진수 3자리는 8진수 1자리와 대응된다.&lt;br /&gt;
* 2진수 4자리는 16진수 1자리와 대응된다.&lt;br /&gt;
* 다른 진법을 10진수로 바꿀 때는 각 자리 값에 기수의 거듭제곱을 곱해 더한다.&lt;br /&gt;
* 10진수를 다른 진법으로 바꿀 때는 해당 기수로 반복해서 나누고 나머지를 역순으로 읽는다.&lt;br /&gt;
* n비트로 표현할 수 있는 값의 개수는 2^n개이다.&lt;br /&gt;
* 8비트로 표현할 수 있는 부호 없는 정수 범위는 0부터 255까지이다.&lt;br /&gt;
* 컴퓨터 내부에서는 2진법을 사용하지만, 사람이 읽기 쉽게 16진법을 함께 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[2진법]]&lt;br /&gt;
* [[8진법]]&lt;br /&gt;
* [[10진법]]&lt;br /&gt;
* [[16진법]]&lt;br /&gt;
* [[비트]]&lt;br /&gt;
* [[바이트]]&lt;br /&gt;
* [[보수]]&lt;br /&gt;
* [[1의 보수]]&lt;br /&gt;
* [[2의 보수]]&lt;br /&gt;
* [[컴퓨터 구조]]&lt;br /&gt;
* [[자료 표현]]&lt;br /&gt;
* [[문자 인코딩]]&lt;br /&gt;
* [[16진수 색상 코드]]&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%A7%84%EB%B2%95_%EB%B3%80%ED%99%98&amp;diff=54444</id>
		<title>진법 변환</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%A7%84%EB%B2%95_%EB%B3%80%ED%99%98&amp;diff=54444"/>
		<updated>2026-05-22T15:25:52Z</updated>

		<summary type="html">&lt;p&gt;라이언: 진법 문서로 넘겨주기&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#넘겨주기 [[진법]]&lt;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%A4%ED%94%84%EC%8A%A4%ED%84%B0_%EB%8B%A4%EC%9D%B4%EB%B9%99&amp;diff=53772</id>
		<title>덤프스터 다이빙</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%8D%A4%ED%94%84%EC%8A%A4%ED%84%B0_%EB%8B%A4%EC%9D%B4%EB%B9%99&amp;diff=53772"/>
		<updated>2026-05-20T10:16:00Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 덤프스터 다이빙(Dumpster Diving)은 쓰레기통, 폐기 문서, 폐기 저장매체, 버려진 장비 등에서 민감한 정보를 수집하는 사회공학 기반 정보수집 기법이다. 공격자는 폐기된 자료를 통해 조직의 내부 정보, 계정 정보, 시스템 구성, 고객 정보 등을 획득할 수 있다.  == 개요 == 덤프스터 다이빙은 문자 그대로 &amp;quot;쓰레기통을 뒤지는 행위&amp;quot;에서 유래한 표현이다. 정보보안에...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;덤프스터 다이빙(Dumpster Diving)은 쓰레기통, 폐기 문서, 폐기 저장매체, 버려진 장비 등에서 민감한 정보를 수집하는 [[사회공학]] 기반 정보수집 기법이다. 공격자는 폐기된 자료를 통해 조직의 내부 정보, 계정 정보, 시스템 구성, 고객 정보 등을 획득할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
덤프스터 다이빙은 문자 그대로 &amp;quot;쓰레기통을 뒤지는 행위&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;
* 물리적 침입 또는 시스템 침투의 사전 정찰&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;
* 메모지에 적힌 ID와 비밀번호&lt;br /&gt;
* 초기 비밀번호 안내서&lt;br /&gt;
* 임시 계정 정보&lt;br /&gt;
* 인증서 관련 문서&lt;br /&gt;
* VPN 접속 정보&lt;br /&gt;
* 관리자 계정 정보&lt;br /&gt;
* 일회용 비밀번호 생성기 관련 자료&lt;br /&gt;
&lt;br /&gt;
=== 시스템 및 네트워크 정보 ===&lt;br /&gt;
* [[IP 주소]] 목록&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;
* [[SSD]]&lt;br /&gt;
* USB 메모리&lt;br /&gt;
* CD/DVD&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;
덤프스터 다이빙은 일반적으로 다음과 같은 흐름으로 이루어진다.&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;
* VPN 사용 안내문&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;
사회공학 공격은 사람의 심리, 업무 절차, 조직의 허점, 정보 노출을 악용하는 공격이다. 덤프스터 다이빙은 사람이나 조직이 &amp;quot;버린 정보&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;
* [[APT]] 공격의 사전 정찰&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;
* 계약서&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;
=== 폐기 절차 수립 ===&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;
* 메모지에 비밀번호 작성 금지&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;
* CCTV 설치&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;
{| 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;
| HDD에 효과적이나 SSD에서는 한계가 있을 수 있음&lt;br /&gt;
|-&lt;br /&gt;
| 암호화 후 폐기&lt;br /&gt;
| 저장매체를 암호화한 뒤 키를 폐기&lt;br /&gt;
| 데이터 복구 위험을 줄일 수 있음&lt;br /&gt;
|-&lt;br /&gt;
| 디가우징&lt;br /&gt;
| 강한 자기장으로 자기 저장매체 데이터 제거&lt;br /&gt;
| HDD나 테이프에 사용 가능, SSD에는 부적합&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;
! 피싱&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;
{| 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;
| 비밀번호, PIN, 화면 정보&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;
! 내부자 위협&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;
* 폐기된 저장매체의 데이터 삭제가 검증되는가&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;
* 외주업체 관리&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;
* 문서 파쇄와 저장매체 완전 삭제&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;
* robots.txt처럼 공개 규칙으로 숨기는 것이 아니라, 실제 접근통제와 폐기 절차가 중요하다.&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;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%88%84%EB%8D%94_%EC%84%9C%ED%95%91&amp;diff=53771</id>
		<title>숄더 서핑</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%88%84%EB%8D%94_%EC%84%9C%ED%95%91&amp;diff=53771"/>
		<updated>2026-05-20T10:15:44Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 숄더 서핑(Shoulder Surfing)은 공격자가 사용자의 어깨너머로 화면, 키보드 입력, 문서, 카드 정보 등을 몰래 관찰하여 민감한 정보를 알아내는 사회공학 공격 기법이다. 비밀번호, PIN, 인증번호, 계좌번호, 출입코드 등 짧고 중요한 정보가 주요 표적이 된다.  == 개요 == 숄더 서핑은 사용자가 정보를 입력하거나 확인하는 순간을 직접 관찰하여 정보를 탈취하는 방식...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;숄더 서핑(Shoulder Surfing)은 공격자가 사용자의 어깨너머로 화면, 키보드 입력, 문서, 카드 정보 등을 몰래 관찰하여 민감한 정보를 알아내는 [[사회공학]] 공격 기법이다. 비밀번호, PIN, 인증번호, 계좌번호, 출입코드 등 짧고 중요한 정보가 주요 표적이 된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
숄더 서핑은 사용자가 정보를 입력하거나 확인하는 순간을 직접 관찰하여 정보를 탈취하는 방식이다. 공격자는 특별한 해킹 도구 없이 사람의 부주의, 주변 환경, 시야 노출을 이용한다.&lt;br /&gt;
&lt;br /&gt;
대표적인 상황은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* ATM에서 비밀번호 입력 장면을 보는 경우&lt;br /&gt;
* 카페나 지하철에서 노트북 화면을 훔쳐보는 경우&lt;br /&gt;
* 스마트폰 잠금해제 패턴이나 PIN을 보는 경우&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;
* PIN&lt;br /&gt;
* 잠금해제 패턴&lt;br /&gt;
* 일회용 인증번호&lt;br /&gt;
* 보안카드 번호&lt;br /&gt;
* OTP 값&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;
* CVC&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;
* ATM 주변&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;
예:&lt;br /&gt;
* ATM PIN 입력 장면 관찰&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;
* ATM 키패드 입력 장면 촬영&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;
=== ATM 비밀번호 탈취 ===&lt;br /&gt;
공격자가 ATM 뒤에 서서 사용자가 입력하는 비밀번호를 본다. 이후 카드 절도나 복제와 결합되면 금융 피해로 이어질 수 있다.&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;
* 비밀번호와 PIN이 직접 노출될 수 있다.&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;
=== 주변 확인 ===&lt;br /&gt;
민감한 정보를 입력하거나 확인하기 전에 주변에 사람이 있는지 확인한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* ATM 이용 전 뒤쪽 확인&lt;br /&gt;
* 공공장소에서 로그인 전 주변 확인&lt;br /&gt;
* 회의자료 열람 전 방문자 확인&lt;br /&gt;
&lt;br /&gt;
=== 입력 가리기 ===&lt;br /&gt;
PIN이나 비밀번호를 입력할 때 손이나 몸으로 키패드와 화면을 가린다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* ATM 비밀번호 입력 시 한 손으로 키패드 가리기&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;
* 보안 출력 기능 사용&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;
* OTP&lt;br /&gt;
* 생체인증&lt;br /&gt;
* FIDO 보안키&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;
* 긴 PIN&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;
개인정보보호 관점의 대책은 다음과 같다.&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;
! 덤프스터 다이빙&lt;br /&gt;
|-&lt;br /&gt;
| 정보 획득 방식&lt;br /&gt;
| 화면, 키보드 입력, 문서 등을 직접 관찰&lt;br /&gt;
| 폐기 문서나 저장매체에서 정보 수집&lt;br /&gt;
|-&lt;br /&gt;
| 주요 장소&lt;br /&gt;
| ATM, 카페, 사무실, 대중교통&lt;br /&gt;
| 쓰레기장, 폐기 문서함, 장비 폐기 장소&lt;br /&gt;
|-&lt;br /&gt;
| 주요 대상&lt;br /&gt;
| 비밀번호, PIN, 화면 정보&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;
! 피싱&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;
| PIN, 비밀번호, 화면 정보&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;
! 스니핑&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;
| 암호화, HTTPS, VPN&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;
* 사회공학 공격의 한 유형&lt;br /&gt;
* 화면과 키보드 입력 관찰을 통한 정보 수집&lt;br /&gt;
* ATM, 스마트폰, 공공장소, 사무실에서의 위험&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;
* 비밀번호, PIN, OTP, 잠금 패턴, 고객 정보 등이 주요 표적이다.&lt;br /&gt;
* ATM, 카페, 대중교통, 사무실, 상담 창구 등에서 발생할 수 있다.&lt;br /&gt;
* 숄더 서핑은 기술적 해킹보다 물리적 관찰과 사람의 부주의를 이용한다.&lt;br /&gt;
* 화면 보호 필름은 시야각을 제한하여 화면 노출을 줄인다.&lt;br /&gt;
* PIN이나 비밀번호 입력 시 손으로 가리는 것이 기본적인 방어 방법이다.&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;
[[분류:사회공학]]&lt;br /&gt;
[[분류:물리적 보안]]&lt;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%82%B4%EC%9E%A5_SQL&amp;diff=53770</id>
		<title>내장 SQL</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%82%B4%EC%9E%A5_SQL&amp;diff=53770"/>
		<updated>2026-05-20T10:15:24Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 내장 SQL(Embedded SQL)은 C, Java, COBOL 등 일반 프로그래밍 언어의 소스코드 안에 SQL 문장을 삽입하여 데이터베이스를 조작하는 방식이다. 호스트 언어의 절차적 처리 능력과 SQL의 데이터 조작 능력을 함께 사용하기 위해 활용된다.  == 개요 == 내장 SQL은 일반 프로그래밍 언어 안에 SQL 문장을 직접 포함시키는 데이터베이스 프로그래밍 방식이다. SQL은 데이터베이스...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;내장 SQL(Embedded SQL)은 C, Java, COBOL 등 일반 프로그래밍 언어의 소스코드 안에 [[SQL]] 문장을 삽입하여 [[데이터베이스]]를 조작하는 방식이다. 호스트 언어의 절차적 처리 능력과 SQL의 데이터 조작 능력을 함께 사용하기 위해 활용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
내장 SQL은 일반 프로그래밍 언어 안에 SQL 문장을 직접 포함시키는 데이터베이스 프로그래밍 방식이다. SQL은 데이터베이스에 대한 질의, 삽입, 수정, 삭제를 담당하고, 호스트 언어는 조건 처리, 반복 처리, 화면 출력, 파일 처리, 업무 로직 처리를 담당한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 C 언어 프로그램 안에 SQL 문장을 삽입하여 데이터베이스에서 데이터를 조회하고, 조회 결과를 C 언어 변수에 저장하여 처리할 수 있다.&lt;br /&gt;
&lt;br /&gt;
내장 SQL은 독립적으로 실행되는 SQL과 달리, 호스트 언어 프로그램의 일부로 작성되고 전처리 과정을 거쳐 일반 프로그램 코드로 변환된다.&lt;br /&gt;
&lt;br /&gt;
== 등장 배경 ==&lt;br /&gt;
SQL은 데이터베이스를 다루는 데 강력하지만, 단독 SQL만으로 복잡한 업무 로직을 모두 처리하기는 어렵다. 반대로 C, COBOL, Java 같은 일반 프로그래밍 언어는 절차적 처리에는 강하지만 데이터베이스 질의를 직접 표현하기에는 불편하다.&lt;br /&gt;
&lt;br /&gt;
내장 SQL은 이 두 가지를 결합하기 위해 등장하였다.&lt;br /&gt;
&lt;br /&gt;
* SQL로 데이터베이스 접근 수행&lt;br /&gt;
* 호스트 언어로 업무 로직 처리&lt;br /&gt;
* 데이터베이스 결과를 프로그램 변수에 저장&lt;br /&gt;
* 반복, 조건, 예외 처리와 SQL을 결합&lt;br /&gt;
* 업무 애플리케이션에서 데이터베이스를 직접 활용&lt;br /&gt;
&lt;br /&gt;
== 호스트 언어 ==&lt;br /&gt;
내장 SQL에서 SQL 문장을 포함하는 일반 프로그래밍 언어를 호스트 언어(Host Language)라고 한다.&lt;br /&gt;
&lt;br /&gt;
대표적인 호스트 언어는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[C 언어]]&lt;br /&gt;
* [[C++]]&lt;br /&gt;
* [[COBOL]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
* [[Fortran]]&lt;br /&gt;
* [[PL/I]]&lt;br /&gt;
&lt;br /&gt;
호스트 언어는 프로그램의 전체 실행 흐름과 업무 로직을 담당하고, SQL은 데이터베이스 조작을 담당한다.&lt;br /&gt;
&lt;br /&gt;
== 기본 구조 ==&lt;br /&gt;
내장 SQL에서는 일반적으로 SQL 문장 앞에 특별한 키워드를 붙여 SQL 문장임을 표시한다.&lt;br /&gt;
&lt;br /&gt;
대표적인 형식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL SQL문;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL SELECT name&lt;br /&gt;
    INTO :name&lt;br /&gt;
    FROM employee&lt;br /&gt;
    WHERE emp_id = :emp_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예에서 `EXEC SQL`은 해당 문장이 내장 SQL임을 나타낸다. `:name`, `:emp_id`는 호스트 변수이다.&lt;br /&gt;
&lt;br /&gt;
== 호스트 변수 ==&lt;br /&gt;
호스트 변수(Host Variable)는 호스트 언어에서 선언된 변수로, SQL 문장과 값을 주고받는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
SQL 문장에서 호스트 변수를 사용할 때는 보통 변수명 앞에 콜론을 붙인다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL SELECT salary&lt;br /&gt;
    INTO :salary&lt;br /&gt;
    FROM employee&lt;br /&gt;
    WHERE emp_id = :emp_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예에서 `salary`와 `emp_id`는 호스트 언어에서 선언된 변수이며, SQL 문장 안에서는 `:salary`, `:emp_id` 형태로 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 호스트 변수의 역할 ==&lt;br /&gt;
호스트 변수는 다음과 같은 역할을 한다.&lt;br /&gt;
&lt;br /&gt;
* 프로그램에서 SQL에 조건값 전달&lt;br /&gt;
* SQL 실행 결과를 프로그램 변수에 저장&lt;br /&gt;
* 삽입할 데이터 전달&lt;br /&gt;
* 수정할 데이터 전달&lt;br /&gt;
* 커서 처리 시 조회 결과 저장&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL INSERT INTO employee(emp_id, name, salary)&lt;br /&gt;
    VALUES (:emp_id, :name, :salary);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 문장은 호스트 변수의 값을 데이터베이스 테이블에 삽입한다.&lt;br /&gt;
&lt;br /&gt;
== 내장 SQL의 처리 과정 ==&lt;br /&gt;
내장 SQL은 일반 프로그래밍 언어 코드와 SQL 문장이 섞여 있으므로, 일반 컴파일러가 바로 처리할 수 없다. 따라서 전처리 과정이 필요하다.&lt;br /&gt;
&lt;br /&gt;
일반적인 처리 과정은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
# 내장 SQL이 포함된 소스코드 작성&lt;br /&gt;
# 전처리기(Precompiler)가 SQL 문장 분석&lt;br /&gt;
# SQL 문장을 데이터베이스 호출 코드로 변환&lt;br /&gt;
# 변환된 호스트 언어 소스코드 생성&lt;br /&gt;
# 호스트 언어 컴파일러로 컴파일&lt;br /&gt;
# 링크 및 실행 파일 생성&lt;br /&gt;
# 실행 시 DBMS와 통신하여 SQL 수행&lt;br /&gt;
&lt;br /&gt;
== 전처리기 ==&lt;br /&gt;
전처리기 또는 프리컴파일러(Precompiler)는 내장 SQL이 포함된 소스코드를 일반 호스트 언어 소스코드로 변환하는 도구이다.&lt;br /&gt;
&lt;br /&gt;
전처리기의 주요 역할은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* `EXEC SQL` 문장 식별&lt;br /&gt;
* SQL 문법 검사&lt;br /&gt;
* 호스트 변수와 SQL 변수 매핑&lt;br /&gt;
* SQL 문장을 DBMS 호출 코드로 변환&lt;br /&gt;
* 커서 처리 코드 생성&lt;br /&gt;
* 오류 처리 관련 코드 생성&lt;br /&gt;
&lt;br /&gt;
== 커서 ==&lt;br /&gt;
커서(Cursor)는 SQL 질의 결과가 여러 행일 때, 결과 집합을 한 행씩 처리하기 위해 사용하는 개념이다.&lt;br /&gt;
&lt;br /&gt;
일반적인 SELECT 문이 하나의 행만 반환한다면 `SELECT INTO` 방식으로 처리할 수 있다. 그러나 여러 행을 반환하는 경우에는 커서를 사용해야 한다.&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL DECLARE emp_cursor CURSOR FOR&lt;br /&gt;
    SELECT emp_id, name&lt;br /&gt;
    FROM employee;&lt;br /&gt;
&lt;br /&gt;
EXEC SQL OPEN emp_cursor;&lt;br /&gt;
&lt;br /&gt;
EXEC SQL FETCH emp_cursor&lt;br /&gt;
    INTO :emp_id, :name;&lt;br /&gt;
&lt;br /&gt;
EXEC SQL CLOSE emp_cursor;&lt;br /&gt;
&amp;lt;/pre&amp;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;
| DECLARE CURSOR&lt;br /&gt;
| 커서를 선언한다.&lt;br /&gt;
|-&lt;br /&gt;
| OPEN&lt;br /&gt;
| 커서를 열고 질의를 실행한다.&lt;br /&gt;
|-&lt;br /&gt;
| FETCH&lt;br /&gt;
| 커서에서 한 행씩 데이터를 가져온다.&lt;br /&gt;
|-&lt;br /&gt;
| CLOSE&lt;br /&gt;
| 커서를 닫는다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 단일 행 조회 ==&lt;br /&gt;
단일 행 조회는 SELECT 문 결과가 하나의 행일 때 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL SELECT name, salary&lt;br /&gt;
    INTO :name, :salary&lt;br /&gt;
    FROM employee&lt;br /&gt;
    WHERE emp_id = :emp_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
조회 결과는 `INTO` 절에 지정된 호스트 변수에 저장된다.&lt;br /&gt;
&lt;br /&gt;
== 다중 행 조회 ==&lt;br /&gt;
여러 행을 조회할 때는 커서를 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL DECLARE c1 CURSOR FOR&lt;br /&gt;
    SELECT emp_id, name&lt;br /&gt;
    FROM employee&lt;br /&gt;
    WHERE dept_id = :dept_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
커서를 열고 FETCH를 반복하여 결과 행을 하나씩 처리한다.&lt;br /&gt;
&lt;br /&gt;
== 데이터 삽입 ==&lt;br /&gt;
내장 SQL에서 INSERT 문을 사용하여 데이터를 삽입할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL INSERT INTO employee(emp_id, name, salary)&lt;br /&gt;
    VALUES (:emp_id, :name, :salary);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
호스트 변수에 저장된 값이 테이블에 삽입된다.&lt;br /&gt;
&lt;br /&gt;
== 데이터 수정 ==&lt;br /&gt;
UPDATE 문을 사용하여 데이터를 수정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL UPDATE employee&lt;br /&gt;
    SET salary = :salary&lt;br /&gt;
    WHERE emp_id = :emp_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 데이터 삭제 ==&lt;br /&gt;
DELETE 문을 사용하여 데이터를 삭제할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL DELETE FROM employee&lt;br /&gt;
    WHERE emp_id = :emp_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 트랜잭션 처리 ==&lt;br /&gt;
내장 SQL에서는 트랜잭션 제어문도 사용할 수 있다.&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;
| COMMIT&lt;br /&gt;
| 트랜잭션의 변경 내용을 확정한다.&lt;br /&gt;
|-&lt;br /&gt;
| ROLLBACK&lt;br /&gt;
| 트랜잭션의 변경 내용을 취소한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL COMMIT;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL ROLLBACK;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 오류 처리 ==&lt;br /&gt;
내장 SQL에서는 SQL 실행 결과와 오류 상태를 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
대표적인 오류 처리 방식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* SQLCODE 확인&lt;br /&gt;
* SQLSTATE 확인&lt;br /&gt;
* WHENEVER 문 사용&lt;br /&gt;
* 예외 처리 루틴 호출&lt;br /&gt;
* 오류 메시지 기록&lt;br /&gt;
&lt;br /&gt;
== SQLCODE ==&lt;br /&gt;
SQLCODE는 SQL 실행 결과를 나타내는 상태 코드이다.&lt;br /&gt;
&lt;br /&gt;
일반적으로 다음과 같이 해석한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SQLCODE 값&lt;br /&gt;
! 의미&lt;br /&gt;
|-&lt;br /&gt;
| 0&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;
DBMS와 환경에 따라 세부 값은 달라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== SQLSTATE ==&lt;br /&gt;
SQLSTATE는 SQL 표준에서 정의한 5자리 문자열 형태의 상태 코드이다.&lt;br /&gt;
&lt;br /&gt;
SQLCODE보다 표준화된 오류 표현 방식으로 사용된다.&lt;br /&gt;
&lt;br /&gt;
== WHENEVER 문 ==&lt;br /&gt;
WHENEVER 문은 특정 SQL 실행 상태가 발생했을 때 수행할 동작을 지정하는 내장 SQL 구문이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL WHENEVER SQLERROR GOTO error_handler;&lt;br /&gt;
EXEC SQL WHENEVER NOT FOUND GOTO not_found;&lt;br /&gt;
&amp;lt;/pre&amp;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;
|-&lt;br /&gt;
| SQLERROR&lt;br /&gt;
| SQL 오류 발생&lt;br /&gt;
|-&lt;br /&gt;
| NOT FOUND&lt;br /&gt;
| 조회 결과가 없거나 커서 FETCH 결과가 없음&lt;br /&gt;
|-&lt;br /&gt;
| SQLWARNING&lt;br /&gt;
| SQL 경고 발생&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 정적 SQL과 동적 SQL ==&lt;br /&gt;
내장 SQL은 SQL 문장이 프로그램 작성 시점에 정해지는지 여부에 따라 정적 SQL과 동적 SQL로 구분할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 정적 SQL ===&lt;br /&gt;
정적 SQL은 프로그램 작성 시점에 SQL 문장이 고정되어 있는 방식이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
EXEC SQL SELECT name&lt;br /&gt;
    INTO :name&lt;br /&gt;
    FROM employee&lt;br /&gt;
    WHERE emp_id = :emp_id;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
정적 SQL은 전처리 시점에 SQL 구조를 확인할 수 있어 안정적이고 성능 최적화가 쉽다.&lt;br /&gt;
&lt;br /&gt;
=== 동적 SQL ===&lt;br /&gt;
동적 SQL은 실행 시점에 SQL 문장을 문자열로 구성하여 실행하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 사용자의 입력이나 조건에 따라 SELECT 문이 달라지는 경우에 사용한다.&lt;br /&gt;
&lt;br /&gt;
동적 SQL은 유연하지만 SQL Injection 위험과 성능 관리 문제가 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 내장 SQL과 동적 SQL의 관계 ==&lt;br /&gt;
내장 SQL 안에서도 동적 SQL을 사용할 수 있다. 즉, 내장 SQL은 프로그래밍 언어 안에 SQL을 포함하는 방식이고, 동적 SQL은 SQL 문장의 구조가 실행 시점에 결정되는 방식이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| 내장 SQL&lt;br /&gt;
| 호스트 언어 안에 SQL 문장을 삽입하는 방식&lt;br /&gt;
|-&lt;br /&gt;
| 정적 SQL&lt;br /&gt;
| SQL 문장이 프로그램 작성 시점에 고정된 방식&lt;br /&gt;
|-&lt;br /&gt;
| 동적 SQL&lt;br /&gt;
| SQL 문장이 실행 시점에 생성되거나 결정되는 방식&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 장점 ==&lt;br /&gt;
내장 SQL의 장점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 호스트 언어와 SQL을 함께 사용할 수 있다.&lt;br /&gt;
* 업무 로직과 데이터베이스 처리를 결합하기 쉽다.&lt;br /&gt;
* SQL 문장이 코드 안에 명시되어 이해하기 쉽다.&lt;br /&gt;
* 정적 SQL은 전처리 단계에서 일부 오류를 확인할 수 있다.&lt;br /&gt;
* DBMS의 데이터 조작 기능을 직접 활용할 수 있다.&lt;br /&gt;
* 커서를 이용해 다중 행 결과를 절차적으로 처리할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 단점 ==&lt;br /&gt;
내장 SQL의 단점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 전처리 과정이 필요하다.&lt;br /&gt;
* 호스트 언어와 SQL이 섞여 코드가 복잡해질 수 있다.&lt;br /&gt;
* 특정 DBMS나 프리컴파일러에 종속될 수 있다.&lt;br /&gt;
* SQL 변경 시 프로그램 재컴파일이 필요할 수 있다.&lt;br /&gt;
* 동적 SQL 사용 시 보안 취약점이 발생할 수 있다.&lt;br /&gt;
* 객체지향 언어의 구조와 잘 맞지 않는 경우가 있다.&lt;br /&gt;
&lt;br /&gt;
== 사용 분야 ==&lt;br /&gt;
내장 SQL은 다음과 같은 환경에서 사용된다.&lt;br /&gt;
&lt;br /&gt;
* 업무용 데이터베이스 애플리케이션&lt;br /&gt;
* C 또는 COBOL 기반 레거시 시스템&lt;br /&gt;
* 금융권 배치 프로그램&lt;br /&gt;
* 공공기관 업무 시스템&lt;br /&gt;
* 대형 기간계 시스템&lt;br /&gt;
* 데이터베이스 중심 업무 프로그램&lt;br /&gt;
&lt;br /&gt;
== 내장 SQL과 API 방식 ==&lt;br /&gt;
데이터베이스를 사용하는 방법에는 내장 SQL 외에도 API 방식이 있다.&lt;br /&gt;
&lt;br /&gt;
대표적인 API 방식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[ODBC]]&lt;br /&gt;
* [[JDBC]]&lt;br /&gt;
* [[CLI]]&lt;br /&gt;
* [[ADO.NET]]&lt;br /&gt;
&lt;br /&gt;
API 방식은 SQL 문장을 문자열로 작성하여 라이브러리나 드라이버를 통해 DBMS에 전달하는 방식이 많다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 내장 SQL&lt;br /&gt;
! API 방식&lt;br /&gt;
|-&lt;br /&gt;
| 작성 방식&lt;br /&gt;
| 호스트 언어 안에 SQL 문장을 직접 삽입&lt;br /&gt;
| API 호출을 통해 SQL 실행&lt;br /&gt;
|-&lt;br /&gt;
| 전처리&lt;br /&gt;
| 필요&lt;br /&gt;
| 일반적으로 불필요&lt;br /&gt;
|-&lt;br /&gt;
| SQL 확인 시점&lt;br /&gt;
| 정적 SQL은 전처리 시 확인 가능&lt;br /&gt;
| 주로 실행 시 확인&lt;br /&gt;
|-&lt;br /&gt;
| 유연성&lt;br /&gt;
| 상대적으로 낮음&lt;br /&gt;
| 상대적으로 높음&lt;br /&gt;
|-&lt;br /&gt;
| 대표 예&lt;br /&gt;
| EXEC SQL&lt;br /&gt;
| ODBC, JDBC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 내장 SQL과 저장 프로시저 ==&lt;br /&gt;
[[저장 프로시저]]는 SQL과 절차적 로직을 DBMS 내부에 저장하여 실행하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 내장 SQL&lt;br /&gt;
! 저장 프로시저&lt;br /&gt;
|-&lt;br /&gt;
| 위치&lt;br /&gt;
| 응용 프로그램 소스코드 안&lt;br /&gt;
| DBMS 내부&lt;br /&gt;
|-&lt;br /&gt;
| 실행 주체&lt;br /&gt;
| 응용 프로그램이 SQL 호출&lt;br /&gt;
| DBMS가 저장된 절차 실행&lt;br /&gt;
|-&lt;br /&gt;
| 장점&lt;br /&gt;
| 프로그램 로직과 SQL을 함께 관리 가능&lt;br /&gt;
| DB 내부에서 반복 로직과 성능 최적화 가능&lt;br /&gt;
|-&lt;br /&gt;
| 단점&lt;br /&gt;
| 프로그램 재컴파일 필요 가능&lt;br /&gt;
| DBMS 종속성 증가 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 내장 SQL과 ORM ==&lt;br /&gt;
[[ORM]]은 객체와 관계형 데이터베이스 테이블을 매핑하여 SQL 작성을 줄이는 방식이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 내장 SQL&lt;br /&gt;
! ORM&lt;br /&gt;
|-&lt;br /&gt;
| 중심 관점&lt;br /&gt;
| SQL 중심&lt;br /&gt;
| 객체 중심&lt;br /&gt;
|-&lt;br /&gt;
| SQL 작성&lt;br /&gt;
| 개발자가 명시적으로 작성&lt;br /&gt;
| 프레임워크가 생성하는 경우 많음&lt;br /&gt;
|-&lt;br /&gt;
| 장점&lt;br /&gt;
| SQL 제어가 명확함&lt;br /&gt;
| 객체지향 개발에 적합&lt;br /&gt;
|-&lt;br /&gt;
| 단점&lt;br /&gt;
| 코드와 SQL이 섞일 수 있음&lt;br /&gt;
| 생성 SQL의 성능 이해가 필요&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 보안 고려사항 ==&lt;br /&gt;
내장 SQL에서도 사용자 입력을 부적절하게 SQL에 결합하면 [[SQL Injection]] 위험이 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
보안 대책은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 호스트 변수와 바인딩 사용&lt;br /&gt;
* 사용자 입력값 검증&lt;br /&gt;
* 동적 SQL 문자열 결합 최소화&lt;br /&gt;
* 최소 권한 DB 계정 사용&lt;br /&gt;
* 오류 메시지 과다 노출 방지&lt;br /&gt;
* 트랜잭션 처리와 예외 처리 명확화&lt;br /&gt;
&lt;br /&gt;
== 감리 관점 ==&lt;br /&gt;
정보시스템 감리에서는 내장 SQL을 사용하는 시스템에 대해 다음 사항을 점검할 수 있다.&lt;br /&gt;
&lt;br /&gt;
* SQL 문장이 요구사항을 정확히 반영하는가&lt;br /&gt;
* 호스트 변수 사용이 적절한가&lt;br /&gt;
* 동적 SQL 사용 시 보안 취약점이 없는가&lt;br /&gt;
* SQL 오류 처리 로직이 적절한가&lt;br /&gt;
* 커서 사용 후 CLOSE가 수행되는가&lt;br /&gt;
* 트랜잭션 COMMIT, ROLLBACK 처리가 명확한가&lt;br /&gt;
* DBMS 종속성이 과도하지 않은가&lt;br /&gt;
* SQL 성능 문제가 없는가&lt;br /&gt;
* 개인정보와 중요정보 접근이 통제되는가&lt;br /&gt;
* 소스코드와 SQL 변경 이력이 관리되는가&lt;br /&gt;
&lt;br /&gt;
== 학습 포인트 ==&lt;br /&gt;
내장 SQL은 데이터베이스 프로그래밍 방식 중 하나로, 호스트 언어와 SQL의 역할 분담을 이해하는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
학습 시 다음 내용을 중심으로 정리한다.&lt;br /&gt;
&lt;br /&gt;
* 내장 SQL의 정의&lt;br /&gt;
* 호스트 언어와 호스트 변수&lt;br /&gt;
* EXEC SQL 구문&lt;br /&gt;
* 전처리기 또는 프리컴파일러&lt;br /&gt;
* SELECT INTO&lt;br /&gt;
* 커서 사용 절차&lt;br /&gt;
* SQLCODE와 SQLSTATE&lt;br /&gt;
* 트랜잭션 처리&lt;br /&gt;
* 정적 SQL과 동적 SQL&lt;br /&gt;
* 내장 SQL과 API 방식의 차이&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 내장 SQL은 일반 프로그래밍 언어 안에 SQL 문장을 삽입하는 방식이다.&lt;br /&gt;
* SQL 문장을 포함하는 언어를 호스트 언어라고 한다.&lt;br /&gt;
* 호스트 변수는 SQL과 프로그램 사이에서 값을 주고받는 변수이다.&lt;br /&gt;
* 내장 SQL 문장은 일반적으로 `EXEC SQL`로 시작한다.&lt;br /&gt;
* 내장 SQL은 전처리기 또는 프리컴파일러를 통해 일반 호스트 언어 코드로 변환된다.&lt;br /&gt;
* 단일 행 조회에는 SELECT INTO를 사용할 수 있다.&lt;br /&gt;
* 다중 행 조회에는 커서를 사용한다.&lt;br /&gt;
* 커서 처리 절차는 DECLARE, OPEN, FETCH, CLOSE 순서로 정리할 수 있다.&lt;br /&gt;
* SQLCODE와 SQLSTATE는 SQL 실행 결과와 오류 상태를 확인하는 데 사용된다.&lt;br /&gt;
* COMMIT은 트랜잭션을 확정하고 ROLLBACK은 트랜잭션을 취소한다.&lt;br /&gt;
* 정적 SQL은 SQL 문장이 프로그램 작성 시점에 고정되어 있다.&lt;br /&gt;
* 동적 SQL은 SQL 문장이 실행 시점에 결정된다.&lt;br /&gt;
* 내장 SQL은 SQL을 직접 제어할 수 있지만 전처리 과정과 DBMS 종속성이 문제가 될 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[SQL]]&lt;br /&gt;
* [[데이터베이스]]&lt;br /&gt;
* [[관계형 데이터베이스]]&lt;br /&gt;
* [[호스트 언어]]&lt;br /&gt;
* [[호스트 변수]]&lt;br /&gt;
* [[커서]]&lt;br /&gt;
* [[정적 SQL]]&lt;br /&gt;
* [[동적 SQL]]&lt;br /&gt;
* [[SQLCODE]]&lt;br /&gt;
* [[SQLSTATE]]&lt;br /&gt;
* [[트랜잭션]]&lt;br /&gt;
* [[ODBC]]&lt;br /&gt;
* [[JDBC]]&lt;br /&gt;
* [[저장 프로시저]]&lt;br /&gt;
* [[ORM]]&lt;br /&gt;
* [[SQL Injection]]&lt;br /&gt;
&lt;br /&gt;
[[분류:데이터베이스]]&lt;br /&gt;
[[분류:SQL]]&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%A7%84%EB%B2%95_%EB%B3%80%ED%99%98&amp;diff=53769</id>
		<title>진법 변환</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%A7%84%EB%B2%95_%EB%B3%80%ED%99%98&amp;diff=53769"/>
		<updated>2026-05-20T10:15:05Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 진법(Numeral System)은 수를 표현하는 체계이다. 컴퓨터와 정보처리 분야에서는 특히 2진법, 8진법, 10진법, 16진법이 자주 사용되며, 수의 표현, 자료 표현, 컴퓨터 구조, 프로그래밍, 네트워크 주소 표현 등과 밀접하게 관련된다.  == 개요 == 진법은 숫자를 어떤 기준으로 묶어 표현할 것인지를 정하는 방식이다. 일반적으로 사용하는 10진법은 0부터 9까지의...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;진법(Numeral System)은 수를 표현하는 체계이다. 컴퓨터와 정보처리 분야에서는 특히 [[2진법]], [[8진법]], [[10진법]], [[16진법]]이 자주 사용되며, 수의 표현, 자료 표현, 컴퓨터 구조, 프로그래밍, 네트워크 주소 표현 등과 밀접하게 관련된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
진법은 숫자를 어떤 기준으로 묶어 표현할 것인지를 정하는 방식이다. 일반적으로 사용하는 [[10진법]]은 0부터 9까지의 10개 숫자를 사용하고, 컴퓨터 내부에서 사용하는 [[2진법]]은 0과 1만 사용한다.&lt;br /&gt;
&lt;br /&gt;
진법에서 기준이 되는 수를 기수 또는 밑(base, radix)이라고 한다. 예를 들어 2진법의 밑은 2이고, 10진법의 밑은 10이며, 16진법의 밑은 16이다.&lt;br /&gt;
&lt;br /&gt;
위치적 기수법에서는 숫자의 위치에 따라 값이 달라진다. 같은 숫자 1이라도 10진수 10의 자리와 1의 자리에서 의미가 다르다.&lt;br /&gt;
&lt;br /&gt;
== 기수 ==&lt;br /&gt;
기수(base)는 진법에서 사용하는 숫자의 개수를 의미한다.&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;
| [[2진법]]&lt;br /&gt;
| 2&lt;br /&gt;
| 0, 1&lt;br /&gt;
| 1011&lt;br /&gt;
|-&lt;br /&gt;
| [[8진법]]&lt;br /&gt;
| 8&lt;br /&gt;
| 0 ~ 7&lt;br /&gt;
| 17&lt;br /&gt;
|-&lt;br /&gt;
| [[10진법]]&lt;br /&gt;
| 10&lt;br /&gt;
| 0 ~ 9&lt;br /&gt;
| 123&lt;br /&gt;
|-&lt;br /&gt;
| [[16진법]]&lt;br /&gt;
| 16&lt;br /&gt;
| 0 ~ 9, A ~ F&lt;br /&gt;
| 7B&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 위치적 기수법 ==&lt;br /&gt;
위치적 기수법은 숫자가 놓인 위치에 따라 자릿값이 결정되는 수 표현 방식이다.&lt;br /&gt;
&lt;br /&gt;
10진수 123은 다음과 같이 해석된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
123 = 1 × 10^2 + 2 × 10^1 + 3 × 10^0&lt;br /&gt;
    = 100 + 20 + 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2진수 1011은 다음과 같이 해석된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1011(2) = 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0&lt;br /&gt;
        = 8 + 0 + 2 + 1&lt;br /&gt;
        = 11(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉, 각 자리의 값은 해당 진법의 기수를 거듭제곱한 값과 곱해져 전체 수를 이룬다.&lt;br /&gt;
&lt;br /&gt;
== 주요 진법 ==&lt;br /&gt;
&lt;br /&gt;
=== 2진법 ===&lt;br /&gt;
[[2진법]]은 0과 1만 사용하는 진법이다. 컴퓨터 내부의 데이터 표현에 사용된다.&lt;br /&gt;
&lt;br /&gt;
컴퓨터는 전기적 신호의 상태를 이용하여 정보를 표현하므로, 켜짐과 꺼짐, 참과 거짓, 1과 0으로 표현하기 쉬운 2진법을 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1010(2) = 10(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8진법 ===&lt;br /&gt;
[[8진법]]은 0부터 7까지의 숫자를 사용하는 진법이다.&lt;br /&gt;
&lt;br /&gt;
2진수 3자리와 8진수 1자리가 정확히 대응되므로, 과거 컴퓨터 시스템에서 2진수를 간단히 표현하는 데 사용되었다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
111(2) = 7(8)&lt;br /&gt;
1000(2) = 10(8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10진법 ===&lt;br /&gt;
[[10진법]]은 사람이 일상적으로 가장 많이 사용하는 진법이다. 0부터 9까지의 10개 숫자를 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
256(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16진법 ===&lt;br /&gt;
[[16진법]]은 0부터 9까지의 숫자와 A부터 F까지의 문자를 사용하는 진법이다.&lt;br /&gt;
&lt;br /&gt;
16진법의 각 문자는 다음 값을 의미한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 16진수&lt;br /&gt;
! 10진수&lt;br /&gt;
|-&lt;br /&gt;
| A&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| B&lt;br /&gt;
| 11&lt;br /&gt;
|-&lt;br /&gt;
| C&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| D&lt;br /&gt;
| 13&lt;br /&gt;
|-&lt;br /&gt;
| E&lt;br /&gt;
| 14&lt;br /&gt;
|-&lt;br /&gt;
| F&lt;br /&gt;
| 15&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
16진수 1자리는 2진수 4자리와 정확히 대응된다. 이 때문에 컴퓨터 분야에서 메모리 주소, 색상 코드, 기계어, 네트워크 주소 표현 등에 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1111(2) = F(16)&lt;br /&gt;
11111111(2) = FF(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 진법 표기 ==&lt;br /&gt;
서로 다른 진법의 수를 구분하기 위해 괄호와 밑을 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1010(2)&lt;br /&gt;
12(8)&lt;br /&gt;
10(10)&lt;br /&gt;
A(16)&lt;br /&gt;
&amp;lt;/pre&amp;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;
! 예&lt;br /&gt;
|-&lt;br /&gt;
| 0b&lt;br /&gt;
| 2진수&lt;br /&gt;
| 0b1010&lt;br /&gt;
|-&lt;br /&gt;
| 0o&lt;br /&gt;
| 8진수&lt;br /&gt;
| 0o12&lt;br /&gt;
|-&lt;br /&gt;
| 0x&lt;br /&gt;
| 16진수&lt;br /&gt;
| 0x0A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
언어에 따라 8진수 표기 방식이 다를 수 있으므로 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 10진수로 변환 ==&lt;br /&gt;
다른 진법의 수를 10진수로 변환하려면 각 자리의 값을 기수의 거듭제곱과 곱하여 더한다.&lt;br /&gt;
&lt;br /&gt;
=== 2진수에서 10진수 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1011(2)&lt;br /&gt;
= 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0&lt;br /&gt;
= 8 + 0 + 2 + 1&lt;br /&gt;
= 11(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 8진수에서 10진수 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
17(8)&lt;br /&gt;
= 1 × 8^1 + 7 × 8^0&lt;br /&gt;
= 8 + 7&lt;br /&gt;
= 15(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 16진수에서 10진수 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2F(16)&lt;br /&gt;
= 2 × 16^1 + F × 16^0&lt;br /&gt;
= 2 × 16 + 15&lt;br /&gt;
= 47(10)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 10진수에서 다른 진법으로 변환 ==&lt;br /&gt;
10진수를 다른 진법으로 변환할 때는 변환하려는 기수로 반복해서 나누고, 나머지를 역순으로 읽는다.&lt;br /&gt;
&lt;br /&gt;
=== 10진수에서 2진수 ===&lt;br /&gt;
10진수 13을 2진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
13 ÷ 2 = 6 ... 1&lt;br /&gt;
 6 ÷ 2 = 3 ... 0&lt;br /&gt;
 3 ÷ 2 = 1 ... 1&lt;br /&gt;
 1 ÷ 2 = 0 ... 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
나머지를 아래에서 위로 읽는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
13(10) = 1101(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10진수에서 8진수 ===&lt;br /&gt;
10진수 29를 8진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
29 ÷ 8 = 3 ... 5&lt;br /&gt;
 3 ÷ 8 = 0 ... 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
29(10) = 35(8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 10진수에서 16진수 ===&lt;br /&gt;
10진수 47을 16진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
47 ÷ 16 = 2 ... 15&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
나머지 15는 16진수에서 F이므로 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
47(10) = 2F(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2진수와 8진수 변환 ==&lt;br /&gt;
2진수와 8진수는 서로 쉽게 변환할 수 있다. 8은 2의 3제곱이므로, 2진수 3자리와 8진수 1자리가 대응된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
110101(2)&lt;br /&gt;
= 110 101&lt;br /&gt;
= 6   5&lt;br /&gt;
= 65(8)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8진수를 2진수로 바꿀 때는 각 8진수 자리를 3비트 2진수로 바꾼다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
65(8)&lt;br /&gt;
= 6      5&lt;br /&gt;
= 110    101&lt;br /&gt;
= 110101(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2진수와 16진수 변환 ==&lt;br /&gt;
2진수와 16진수도 쉽게 변환할 수 있다. 16은 2의 4제곱이므로, 2진수 4자리와 16진수 1자리가 대응된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
11111111(2)&lt;br /&gt;
= 1111 1111&lt;br /&gt;
= F    F&lt;br /&gt;
= FF(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
16진수를 2진수로 바꿀 때는 각 16진수 자리를 4비트 2진수로 바꾼다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2F(16)&lt;br /&gt;
= 2      F&lt;br /&gt;
= 0010   1111&lt;br /&gt;
= 00101111(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
앞쪽의 불필요한 0은 생략할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2F(16) = 101111(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 진법 변환표 ==&lt;br /&gt;
자주 사용하는 10진수, 2진수, 8진수, 16진수의 대응 관계는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 10진수&lt;br /&gt;
! 2진수&lt;br /&gt;
! 8진수&lt;br /&gt;
! 16진수&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0000&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 0001&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 0010&lt;br /&gt;
| 2&lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| 0011&lt;br /&gt;
| 3&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 0100&lt;br /&gt;
| 4&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| 0101&lt;br /&gt;
| 5&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| 0110&lt;br /&gt;
| 6&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| 0111&lt;br /&gt;
| 7&lt;br /&gt;
| 7&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| 1000&lt;br /&gt;
| 10&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| 1001&lt;br /&gt;
| 11&lt;br /&gt;
| 9&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| 1010&lt;br /&gt;
| 12&lt;br /&gt;
| A&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| 1011&lt;br /&gt;
| 13&lt;br /&gt;
| B&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| 1100&lt;br /&gt;
| 14&lt;br /&gt;
| C&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| 1101&lt;br /&gt;
| 15&lt;br /&gt;
| D&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| 1110&lt;br /&gt;
| 16&lt;br /&gt;
| E&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| 1111&lt;br /&gt;
| 17&lt;br /&gt;
| F&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;
== 2진법과 컴퓨터 ==&lt;br /&gt;
컴퓨터는 내부적으로 데이터를 0과 1의 조합으로 표현한다. 이는 전기적 신호의 유무, 트랜지스터의 상태, 논리 회로의 참과 거짓을 표현하기에 적합하기 때문이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 8비트는 2진수 8자리로 표현할 수 있으며, 총 256개의 값을 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2^8 = 256&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 1바이트는 일반적으로 0부터 255까지의 값을 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 16진법과 컴퓨터 ==&lt;br /&gt;
16진법은 2진수를 사람이 읽기 쉽게 표현하는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
2진수 8자리는 16진수 2자리로 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
11111111(2) = FF(16)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 때문에 16진법은 다음과 같은 곳에서 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
* 메모리 주소&lt;br /&gt;
* 색상 코드&lt;br /&gt;
* MAC 주소&lt;br /&gt;
* IPv6 주소&lt;br /&gt;
* 기계어 표현&lt;br /&gt;
* 바이너리 덤프&lt;br /&gt;
* 디버깅 로그&lt;br /&gt;
&lt;br /&gt;
== 색상 코드 ==&lt;br /&gt;
웹 색상은 16진수로 표현되는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#FF0000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이는 빨강, 초록, 파랑 값을 각각 16진수로 표현한 것이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FF = 255&lt;br /&gt;
00 = 0&lt;br /&gt;
00 = 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 `#FF0000`은 빨간색을 의미한다.&lt;br /&gt;
&lt;br /&gt;
== 파일 권한과 8진법 ==&lt;br /&gt;
UNIX와 Linux의 파일 권한은 8진법으로 표현되는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod 755 file.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 755는 사용자, 그룹, 기타 사용자에 대한 권한을 8진수로 나타낸 것이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 값&lt;br /&gt;
! 권한&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| 읽기&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| 쓰기&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| 실행&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
따라서 7은 읽기, 쓰기, 실행 권한을 모두 가진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
7 = 4 + 2 + 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 소수 부분의 진법 변환 ==&lt;br /&gt;
정수뿐 아니라 소수 부분도 진법 변환이 가능하다.&lt;br /&gt;
&lt;br /&gt;
10진수 소수를 2진수로 변환할 때는 소수 부분에 변환하려는 기수를 반복해서 곱하고, 정수 부분을 순서대로 읽는다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 0.625를 2진수로 변환하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.625 × 2 = 1.25  → 1&lt;br /&gt;
0.25  × 2 = 0.5   → 0&lt;br /&gt;
0.5   × 2 = 1.0   → 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0.625(10) = 0.101(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 보수와 진법 ==&lt;br /&gt;
컴퓨터에서 음수를 표현할 때 [[보수]] 개념이 사용된다. 특히 2진수에서는 [[1의 보수]]와 [[2의 보수]]가 중요하다.&lt;br /&gt;
&lt;br /&gt;
2의 보수는 현대 컴퓨터에서 정수를 표현할 때 널리 사용되는 방식이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 4비트에서 5는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0101&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-5를 2의 보수로 표현하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0101 → 비트 반전 1010 → 1을 더함 1011&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 4비트 2의 보수 표현에서 -5는 1011이다.&lt;br /&gt;
&lt;br /&gt;
== 진법과 비트 수 ==&lt;br /&gt;
n비트로 표현할 수 있는 값의 개수는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2^n개&lt;br /&gt;
&amp;lt;/pre&amp;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;
! 부호 없는 정수 범위&lt;br /&gt;
|-&lt;br /&gt;
| 4비트&lt;br /&gt;
| 16개&lt;br /&gt;
| 0 ~ 15&lt;br /&gt;
|-&lt;br /&gt;
| 8비트&lt;br /&gt;
| 256개&lt;br /&gt;
| 0 ~ 255&lt;br /&gt;
|-&lt;br /&gt;
| 16비트&lt;br /&gt;
| 65,536개&lt;br /&gt;
| 0 ~ 65,535&lt;br /&gt;
|-&lt;br /&gt;
| 32비트&lt;br /&gt;
| 4,294,967,296개&lt;br /&gt;
| 0 ~ 4,294,967,295&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
부호 있는 정수는 표현 방식에 따라 범위가 달라진다.&lt;br /&gt;
&lt;br /&gt;
== 관련 개념 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== 2진법과 10진법 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 2진법&lt;br /&gt;
! 10진법&lt;br /&gt;
|-&lt;br /&gt;
| 기수&lt;br /&gt;
| 2&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| 사용 숫자&lt;br /&gt;
| 0, 1&lt;br /&gt;
| 0 ~ 9&lt;br /&gt;
|-&lt;br /&gt;
| 주요 사용처&lt;br /&gt;
| 컴퓨터 내부 표현&lt;br /&gt;
| 일상적인 수 표현&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 8진법과 16진법 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 8진법&lt;br /&gt;
! 16진법&lt;br /&gt;
|-&lt;br /&gt;
| 기수&lt;br /&gt;
| 8&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| 2진수 대응&lt;br /&gt;
| 3비트&lt;br /&gt;
| 4비트&lt;br /&gt;
|-&lt;br /&gt;
| 사용 숫자&lt;br /&gt;
| 0 ~ 7&lt;br /&gt;
| 0 ~ 9, A ~ F&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;
|-&lt;br /&gt;
| 숫자&lt;br /&gt;
| 수를 나타내기 위해 사용하는 기호&lt;br /&gt;
|-&lt;br /&gt;
| 수&lt;br /&gt;
| 양이나 크기를 나타내는 추상적 값&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예를 들어 10이라는 표기는 10진법에서는 열을 뜻하지만, 2진법에서는 둘을 뜻한다. 즉, 표기는 같아도 진법에 따라 값이 달라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 학습 포인트 ==&lt;br /&gt;
진법은 컴퓨터 구조와 프로그래밍의 기초 개념이다. 학습할 때는 다음 내용을 중심으로 정리하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
* 기수의 의미&lt;br /&gt;
* 위치적 기수법&lt;br /&gt;
* 2진수, 8진수, 10진수, 16진수의 차이&lt;br /&gt;
* 2진수와 8진수의 3비트 대응&lt;br /&gt;
* 2진수와 16진수의 4비트 대응&lt;br /&gt;
* 10진수와 다른 진법 간 변환&lt;br /&gt;
* 16진수 A~F의 의미&lt;br /&gt;
* 비트 수와 표현 가능한 값의 개수&lt;br /&gt;
* 2의 보수와 음수 표현&lt;br /&gt;
* 컴퓨터에서 16진수를 사용하는 이유&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 진법은 수를 표현하는 체계이다.&lt;br /&gt;
* 진법의 기수는 사용하는 숫자의 개수이다.&lt;br /&gt;
* 2진법은 0과 1을 사용한다.&lt;br /&gt;
* 8진법은 0부터 7까지 사용한다.&lt;br /&gt;
* 10진법은 0부터 9까지 사용한다.&lt;br /&gt;
* 16진법은 0부터 9와 A부터 F까지 사용한다.&lt;br /&gt;
* 16진법에서 A는 10, F는 15를 의미한다.&lt;br /&gt;
* 2진수 3자리는 8진수 1자리와 대응된다.&lt;br /&gt;
* 2진수 4자리는 16진수 1자리와 대응된다.&lt;br /&gt;
* 다른 진법을 10진수로 바꿀 때는 각 자리 값에 기수의 거듭제곱을 곱해 더한다.&lt;br /&gt;
* 10진수를 다른 진법으로 바꿀 때는 해당 기수로 반복해서 나누고 나머지를 역순으로 읽는다.&lt;br /&gt;
* n비트로 표현할 수 있는 값의 개수는 2^n개이다.&lt;br /&gt;
* 8비트로 표현할 수 있는 부호 없는 정수 범위는 0부터 255까지이다.&lt;br /&gt;
* 컴퓨터 내부에서는 2진법을 사용하지만, 사람이 읽기 쉽게 16진법을 함께 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[2진법]]&lt;br /&gt;
* [[8진법]]&lt;br /&gt;
* [[10진법]]&lt;br /&gt;
* [[16진법]]&lt;br /&gt;
* [[비트]]&lt;br /&gt;
* [[바이트]]&lt;br /&gt;
* [[보수]]&lt;br /&gt;
* [[1의 보수]]&lt;br /&gt;
* [[2의 보수]]&lt;br /&gt;
* [[컴퓨터 구조]]&lt;br /&gt;
* [[자료 표현]]&lt;br /&gt;
* [[문자 인코딩]]&lt;br /&gt;
* [[16진수 색상 코드]]&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=%ED%8A%B9%EC%9D%B4%EB%8F%84&amp;diff=53700</id>
		<title>특이도</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%ED%8A%B9%EC%9D%B4%EB%8F%84&amp;diff=53700"/>
		<updated>2026-05-19T19:03:44Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 특이도(Specificity)는 실제 음성인 데이터 중에서 모델이 음성으로 올바르게 예측한 비율을 나타내는 분류 모델의 성능 평가 지표이다. 주로 질병 진단, 이상 탐지, 스팸 탐지, 보안 탐지 등에서 실제 음성을 얼마나 잘 걸러내는지를 평가할 때 사용된다.  == 개요 == 특이도는 이진 분류 문제에서 실제로 음성인 대상을 모델이 얼마나 정확하게 음성으로 판별했는지를...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;특이도(Specificity)는 실제 음성인 데이터 중에서 모델이 음성으로 올바르게 예측한 비율을 나타내는 [[분류 모델]]의 성능 평가 지표이다. 주로 질병 진단, 이상 탐지, 스팸 탐지, 보안 탐지 등에서 실제 음성을 얼마나 잘 걸러내는지를 평가할 때 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
특이도는 이진 분류 문제에서 실제로 음성인 대상을 모델이 얼마나 정확하게 음성으로 판별했는지를 나타낸다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 질병 진단 모델에서 음성은 &amp;quot;질병이 없는 사람&amp;quot;을 의미할 수 있다. 이때 특이도가 높다는 것은 실제로 질병이 없는 사람을 정상으로 잘 판별한다는 뜻이다.&lt;br /&gt;
&lt;br /&gt;
특이도는 [[재현율]]과 함께 이진 분류 모델의 성능을 해석할 때 중요하다. 재현율이 실제 양성을 얼마나 잘 찾아내는지를 나타낸다면, 특이도는 실제 음성을 얼마나 잘 제외하는지를 나타낸다.&lt;br /&gt;
&lt;br /&gt;
== 정의 ==&lt;br /&gt;
특이도는 실제 음성 중에서 음성으로 올바르게 예측한 비율이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
특이도 = 실제 음성 중 음성으로 올바르게 예측한 수 / 전체 실제 음성 수&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
혼동 행렬 기준으로 표현하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
특이도 = TN / (TN + FP)&lt;br /&gt;
&amp;lt;/pre&amp;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;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| TN&lt;br /&gt;
| True Negative&lt;br /&gt;
| 실제 음성을 음성으로 올바르게 예측&lt;br /&gt;
|-&lt;br /&gt;
| FP&lt;br /&gt;
| False Positive&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;
! 음성 예측&lt;br /&gt;
|-&lt;br /&gt;
| 실제 양성&lt;br /&gt;
| TP&lt;br /&gt;
| FN&lt;br /&gt;
|-&lt;br /&gt;
| 실제 음성&lt;br /&gt;
| FP&lt;br /&gt;
| TN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
특이도는 실제 음성인 FP와 TN 중에서 TN이 차지하는 비율이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
특이도 = TN / (FP + TN)&lt;br /&gt;
&amp;lt;/pre&amp;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;
|-&lt;br /&gt;
| True Positive&lt;br /&gt;
| 40&lt;br /&gt;
|-&lt;br /&gt;
| True Negative&lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
| False Positive&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| False Negative&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
특이도는 실제 음성 데이터인 TN과 FP를 기준으로 계산한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
특이도 = TN / (TN + FP)&lt;br /&gt;
특이도 = 50 / (50 + 10)&lt;br /&gt;
특이도 = 50 / 60&lt;br /&gt;
특이도 = 0.8333&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 이 모델의 특이도는 약 83.3%이다.&lt;br /&gt;
&lt;br /&gt;
== 의미 ==&lt;br /&gt;
특이도가 높다는 것은 실제 음성인 대상을 양성으로 잘못 판단하는 경우가 적다는 뜻이다.&lt;br /&gt;
&lt;br /&gt;
즉, 특이도는 다음 질문에 답하는 지표이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
실제로 음성인 것들 중에서 모델이 얼마나 잘 음성으로 판별했는가?&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예를 들어 질병 진단에서 특이도가 높으면 실제로 질병이 없는 사람을 질병이 있다고 오진하는 경우가 줄어든다.&lt;br /&gt;
&lt;br /&gt;
== 위양성률과의 관계 ==&lt;br /&gt;
특이도는 [[위양성률]](False Positive Rate)과 반대되는 개념이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
위양성률 = FP / (FP + TN)&lt;br /&gt;
특이도 = TN / (TN + FP)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 다음 관계가 성립한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
특이도 = 1 - 위양성률&lt;br /&gt;
위양성률 = 1 - 특이도&lt;br /&gt;
&amp;lt;/pre&amp;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;
| TN / (TN + FP)&lt;br /&gt;
|-&lt;br /&gt;
| 위양성률&lt;br /&gt;
| 실제 음성 중 양성으로 잘못 예측한 비율&lt;br /&gt;
| FP / (FP + TN)&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;
! 기준&lt;br /&gt;
! 식&lt;br /&gt;
|-&lt;br /&gt;
| 재현율&lt;br /&gt;
| Sensitivity, Recall&lt;br /&gt;
| 실제 양성&lt;br /&gt;
| TP / (TP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| 특이도&lt;br /&gt;
| Specificity&lt;br /&gt;
| 실제 음성&lt;br /&gt;
| TN / (TN + FP)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
재현율은 양성을 잘 찾아내는 능력이고, 특이도는 음성을 잘 배제하는 능력이다.&lt;br /&gt;
&lt;br /&gt;
== 민감도와 특이도 ==&lt;br /&gt;
재현율은 의료 통계나 진단 검사 분야에서 [[민감도]](Sensitivity)라고도 부른다.&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;
{| 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;
| (TP + TN) / (TP + TN + FP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| 특이도&lt;br /&gt;
| 실제 음성 중 음성으로 맞힌 비율&lt;br /&gt;
| TN / (TN + FP)&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;
! 식&lt;br /&gt;
|-&lt;br /&gt;
| 정밀도&lt;br /&gt;
| 양성 예측 중 실제 양성 비율&lt;br /&gt;
| TP / (TP + FP)&lt;br /&gt;
|-&lt;br /&gt;
| 특이도&lt;br /&gt;
| 실제 음성 중 음성 예측 비율&lt;br /&gt;
| TN / (TN + FP)&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;
&lt;br /&gt;
=== 침입 탐지 ===&lt;br /&gt;
정상 트래픽이나 정상 행위를 공격으로 잘못 탐지하는 오탐을 줄이는 데 활용된다.&lt;br /&gt;
&lt;br /&gt;
=== 품질 검사 ===&lt;br /&gt;
정상 제품을 불량으로 잘못 판정하는 경우를 줄이는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 특이도가 중요한 경우 ==&lt;br /&gt;
특이도는 위양성, 즉 False Positive를 줄이는 것이 중요한 상황에서 특히 중요하다.&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
예측 확률 &amp;gt;= 임계값 → 양성&lt;br /&gt;
예측 확률 &amp;lt; 임계값 → 음성&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
임계값을 높이면 양성으로 예측하는 기준이 엄격해진다. 이 경우 FP가 줄어들 수 있으므로 특이도는 높아지는 경향이 있다.&lt;br /&gt;
&lt;br /&gt;
반대로 임계값을 낮추면 양성으로 예측하는 대상이 늘어나므로 FP가 증가하고 특이도가 낮아질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 민감도와 특이도의 trade-off ==&lt;br /&gt;
민감도와 특이도는 서로 trade-off 관계를 가질 수 있다.&lt;br /&gt;
&lt;br /&gt;
* 민감도를 높이려면 양성을 더 많이 잡아내야 한다.&lt;br /&gt;
* 이 과정에서 실제 음성을 양성으로 잘못 판단하는 FP가 늘어날 수 있다.&lt;br /&gt;
* FP가 늘어나면 특이도는 낮아질 수 있다.&lt;br /&gt;
&lt;br /&gt;
반대로 특이도를 높이기 위해 양성 판정 기준을 엄격하게 하면 실제 양성을 놓치는 FN이 늘어나 민감도가 낮아질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== ROC 곡선과의 관계 ==&lt;br /&gt;
[[ROC 곡선]]은 다양한 임계값에서 [[민감도]]와 [[위양성률]]의 관계를 나타낸 그래프이다.&lt;br /&gt;
&lt;br /&gt;
ROC 곡선에서 사용되는 축은 일반적으로 다음과 같다.&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;
| y축&lt;br /&gt;
| 민감도, 재현율, True Positive Rate&lt;br /&gt;
| TP / (TP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| x축&lt;br /&gt;
| 위양성률, False Positive Rate&lt;br /&gt;
| FP / (FP + TN)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
특이도와 위양성률은 다음 관계를 가지므로, ROC 곡선은 특이도와도 밀접하게 관련된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
위양성률 = 1 - 특이도&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== PR 곡선과의 차이 ==&lt;br /&gt;
[[PR 곡선]]은 정밀도와 재현율의 관계를 나타내는 그래프이다.&lt;br /&gt;
&lt;br /&gt;
ROC 곡선은 민감도와 위양성률을 사용하므로 특이도와 관련이 깊다. 반면 PR 곡선은 양성 클래스 예측 성능을 더 직접적으로 보여준다.&lt;br /&gt;
&lt;br /&gt;
불균형 데이터에서는 ROC-AUC보다 PR-AUC가 더 유용한 경우도 있다.&lt;br /&gt;
&lt;br /&gt;
== 특이도와 오탐 ==&lt;br /&gt;
보안이나 이상 탐지에서는 FP를 오탐이라고 부르는 경우가 많다.&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;
어떤 진단 검사에서 실제로 질병이 없는 사람이 100명이고, 이 중 95명을 정상으로 판정하고 5명을 질병 있음으로 잘못 판정했다고 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TN = 95&lt;br /&gt;
FP = 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특이도는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
특이도 = 95 / (95 + 5)&lt;br /&gt;
특이도 = 0.95&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉, 이 검사의 특이도는 95%이다.&lt;br /&gt;
&lt;br /&gt;
이는 질병이 없는 사람을 정상으로 잘 판정하는 능력이 높다는 뜻이다.&lt;br /&gt;
&lt;br /&gt;
== Python 예시 ==&lt;br /&gt;
scikit-learn에서는 특이도를 직접 계산하는 함수가 기본 지표명으로 제공되지 않는 경우가 많으므로, 혼동 행렬에서 TN과 FP를 구해 계산할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from sklearn.metrics import confusion_matrix&lt;br /&gt;
&lt;br /&gt;
y_true = [1, 1, 0, 0, 0, 1]&lt;br /&gt;
y_pred = [1, 0, 0, 0, 1, 1]&lt;br /&gt;
&lt;br /&gt;
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()&lt;br /&gt;
&lt;br /&gt;
specificity = tn / (tn + fp)&lt;br /&gt;
print(specificity)&lt;br /&gt;
&amp;lt;/pre&amp;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;
* False Positive를 줄이는 관점에서 유용하다.&lt;br /&gt;
* 의료 진단, 보안 탐지, 사기 탐지 등에서 중요하다.&lt;br /&gt;
* 민감도와 함께 모델의 균형을 평가할 수 있다.&lt;br /&gt;
* ROC 분석과 연결하여 해석할 수 있다.&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;
! 식&lt;br /&gt;
|-&lt;br /&gt;
| 정확도&lt;br /&gt;
| 전체 예측 중 맞힌 비율&lt;br /&gt;
| (TP + TN) / (TP + TN + FP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| 정밀도&lt;br /&gt;
| 양성 예측 중 실제 양성 비율&lt;br /&gt;
| TP / (TP + FP)&lt;br /&gt;
|-&lt;br /&gt;
| 재현율&lt;br /&gt;
| 실제 양성 중 양성으로 맞힌 비율&lt;br /&gt;
| TP / (TP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| 특이도&lt;br /&gt;
| 실제 음성 중 음성으로 맞힌 비율&lt;br /&gt;
| TN / (TN + FP)&lt;br /&gt;
|-&lt;br /&gt;
| 위양성률&lt;br /&gt;
| 실제 음성 중 양성으로 잘못 예측한 비율&lt;br /&gt;
| FP / (FP + TN)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 학습 관점 ==&lt;br /&gt;
특이도는 혼동 행렬에서 TN과 FP를 기준으로 계산하는 지표이므로, 혼동 행렬과 함께 학습하는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
학습할 때는 다음을 중심으로 정리한다.&lt;br /&gt;
&lt;br /&gt;
* 특이도의 정의&lt;br /&gt;
* 특이도의 계산식&lt;br /&gt;
* TN과 FP의 의미&lt;br /&gt;
* 민감도와의 차이&lt;br /&gt;
* 재현율과의 관계&lt;br /&gt;
* 위양성률과의 관계&lt;br /&gt;
* ROC 곡선과의 관계&lt;br /&gt;
* 임계값 변화에 따른 특이도 변화&lt;br /&gt;
* 오탐을 줄이는 상황에서의 활용&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 특이도는 실제 음성 중 음성으로 올바르게 예측한 비율이다.&lt;br /&gt;
* 특이도는 TN / (TN + FP)로 계산한다.&lt;br /&gt;
* 특이도는 Specificity라고 한다.&lt;br /&gt;
* 특이도는 실제 음성을 잘 걸러내는 능력을 나타낸다.&lt;br /&gt;
* 민감도는 실제 양성을 잘 찾아내는 능력을 나타낸다.&lt;br /&gt;
* 민감도는 TP / (TP + FN)으로 계산한다.&lt;br /&gt;
* 특이도와 위양성률은 서로 보완 관계이다.&lt;br /&gt;
* 위양성률은 FP / (FP + TN)으로 계산한다.&lt;br /&gt;
* 위양성률 = 1 - 특이도이다.&lt;br /&gt;
* ROC 곡선의 x축은 위양성률이며, 이는 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;
* [[민감도]]&lt;br /&gt;
* [[F1 점수]]&lt;br /&gt;
* [[혼동 행렬]]&lt;br /&gt;
* [[위양성률]]&lt;br /&gt;
* [[위음성률]]&lt;br /&gt;
* [[ROC 곡선]]&lt;br /&gt;
* [[ROC-AUC]]&lt;br /&gt;
* [[PR-AUC]]&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%A0%95%ED%99%95%EB%8F%84&amp;diff=53699</id>
		<title>정확도</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%A0%95%ED%99%95%EB%8F%84&amp;diff=53699"/>
		<updated>2026-05-19T18:59:10Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 정확도(Accuracy)는 전체 예측 중에서 올바르게 예측한 비율을 나타내는 분류 모델의 성능 평가 지표이다. 머신러닝과 데이터과학에서 분류 모델이 얼마나 많은 샘플을 맞혔는지 직관적으로 확인할 때 사용된다.  == 개요 == 정확도는 분류 문제에서 가장 기본적으로 사용되는 성능 지표이다. 전체 데이터 중 모델이 정답을 맞힌 비율을 의미한다.  예를 들어 100...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;정확도(Accuracy)는 전체 예측 중에서 올바르게 예측한 비율을 나타내는 [[분류 모델]]의 성능 평가 지표이다. [[머신러닝]]과 [[데이터과학]]에서 분류 모델이 얼마나 많은 샘플을 맞혔는지 직관적으로 확인할 때 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
정확도는 분류 문제에서 가장 기본적으로 사용되는 성능 지표이다. 전체 데이터 중 모델이 정답을 맞힌 비율을 의미한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 100개의 데이터를 분류했을 때 90개를 올바르게 예측했다면 정확도는 90%이다.&lt;br /&gt;
&lt;br /&gt;
정확도는 이해하기 쉽고 계산이 간단하지만, 클래스 분포가 불균형한 데이터에서는 모델 성능을 제대로 반영하지 못할 수 있다. 따라서 [[정밀도]], [[재현율]], [[F1 점수]], [[혼동 행렬]] 등과 함께 해석하는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
== 정의 ==&lt;br /&gt;
정확도는 전체 예측 건수 중 정답을 맞힌 건수의 비율이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
정확도 = 올바르게 예측한 건수 / 전체 예측 건수&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
혼동 행렬을 기준으로 표현하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
정확도 = (TP + TN) / (TP + TN + FP + FN)&lt;br /&gt;
&amp;lt;/pre&amp;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;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| TP&lt;br /&gt;
| True Positive&lt;br /&gt;
| 실제 양성을 양성으로 올바르게 예측&lt;br /&gt;
|-&lt;br /&gt;
| TN&lt;br /&gt;
| True Negative&lt;br /&gt;
| 실제 음성을 음성으로 올바르게 예측&lt;br /&gt;
|-&lt;br /&gt;
| FP&lt;br /&gt;
| False Positive&lt;br /&gt;
| 실제 음성을 양성으로 잘못 예측&lt;br /&gt;
|-&lt;br /&gt;
| FN&lt;br /&gt;
| False Negative&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;
|-&lt;br /&gt;
| True Positive&lt;br /&gt;
| 40&lt;br /&gt;
|-&lt;br /&gt;
| True Negative&lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
| False Positive&lt;br /&gt;
| 5&lt;br /&gt;
|-&lt;br /&gt;
| False Negative&lt;br /&gt;
| 5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
정확도는 다음과 같이 계산한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
정확도 = (40 + 50) / (40 + 50 + 5 + 5)&lt;br /&gt;
정확도 = 90 / 100&lt;br /&gt;
정확도 = 0.9&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉, 이 모델의 정확도는 90%이다.&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;
! 음성 예측&lt;br /&gt;
|-&lt;br /&gt;
| 실제 양성&lt;br /&gt;
| TP&lt;br /&gt;
| FN&lt;br /&gt;
|-&lt;br /&gt;
| 실제 음성&lt;br /&gt;
| FP&lt;br /&gt;
| TN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
정확도는 TP와 TN을 합한 값을 전체 샘플 수로 나눈 값이다.&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;
예를 들어 전체 데이터의 95%가 정상이고 5%만 이상 거래인 데이터가 있다고 하자. 모델이 모든 데이터를 정상으로 예측하면 정확도는 95%가 된다.&lt;br /&gt;
&lt;br /&gt;
그러나 이 모델은 실제로 중요한 이상 거래를 하나도 탐지하지 못한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
전체 데이터: 1000개&lt;br /&gt;
정상 데이터: 950개&lt;br /&gt;
이상 거래: 50개&lt;br /&gt;
&lt;br /&gt;
모델 예측: 모두 정상&lt;br /&gt;
정확도 = 950 / 1000 = 95%&lt;br /&gt;
&amp;lt;/pre&amp;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;
{| 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;
| (TP + TN) / (TP + TN + FP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| 정밀도&lt;br /&gt;
| 양성 예측 중 실제 양성의 비율&lt;br /&gt;
| TP / (TP + FP)&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;
! 식&lt;br /&gt;
|-&lt;br /&gt;
| 정확도&lt;br /&gt;
| 전체 예측 중 맞힌 비율&lt;br /&gt;
| (TP + TN) / (TP + TN + FP + FN)&lt;br /&gt;
|-&lt;br /&gt;
| 재현율&lt;br /&gt;
| 실제 양성 중 양성으로 맞힌 비율&lt;br /&gt;
| TP / (TP + FN)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
재현율은 놓치면 안 되는 대상을 얼마나 잘 찾아냈는지를 나타낸다. 질병 진단이나 침입 탐지처럼 누락 비용이 큰 문제에서는 재현율이 중요할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== F1 점수와의 관계 ==&lt;br /&gt;
[[F1 점수]]는 정밀도와 재현율의 조화평균이다.&lt;br /&gt;
&lt;br /&gt;
정확도는 전체 정답률을 보는 반면, F1 점수는 양성 클래스 탐지 성능을 더 중점적으로 본다.&lt;br /&gt;
&lt;br /&gt;
따라서 불균형 데이터에서는 정확도보다 F1 점수가 더 적절한 평가 지표가 될 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 다중 분류에서의 정확도 ==&lt;br /&gt;
정확도는 이진 분류뿐 아니라 [[다중 분류]]에서도 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
다중 분류에서는 전체 샘플 중 예측 클래스가 실제 클래스와 일치한 비율로 계산한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 손글씨 숫자 분류에서 1000개 이미지 중 930개를 올바르게 분류했다면 정확도는 93%이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
정확도 = 올바르게 분류한 샘플 수 / 전체 샘플 수&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 정확도와 오차율 ==&lt;br /&gt;
정확도와 [[오차율]]은 서로 반대되는 개념이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
오차율 = 1 - 정확도&lt;br /&gt;
정확도 = 1 - 오차율&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예를 들어 정확도가 0.9이면 오차율은 0.1이다.&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;
* 클래스 분포가 비교적 균형 잡힌 데이터 평가&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;
* False Positive와 False Negative의 비용이 다른 경우&lt;br /&gt;
* 희귀 사건 탐지 문제&lt;br /&gt;
* 의료 진단, 사기 탐지, 보안 탐지 문제&lt;br /&gt;
&lt;br /&gt;
이 경우에는 정밀도, 재현율, F1 점수, ROC-AUC, PR-AUC 등을 함께 고려해야 한다.&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;
| F1 점수&lt;br /&gt;
| 정밀도와 재현율의 조화평균&lt;br /&gt;
| 정밀도와 재현율을 균형 있게 볼 때&lt;br /&gt;
|-&lt;br /&gt;
| ROC-AUC&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
예측 확률 &amp;gt;= 0.5 → 양성&lt;br /&gt;
예측 확률 &amp;lt; 0.5 → 음성&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
임계값을 바꾸면 TP, TN, FP, FN이 달라지고, 정확도도 달라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 정확도는 모델 자체뿐 아니라 분류 임계값의 영향을 받는다.&lt;br /&gt;
&lt;br /&gt;
== Python 예시 ==&lt;br /&gt;
scikit-learn에서는 `accuracy_score` 함수를 사용하여 정확도를 계산할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
from sklearn.metrics import accuracy_score&lt;br /&gt;
&lt;br /&gt;
y_true = [1, 0, 1, 1, 0]&lt;br /&gt;
y_pred = [1, 0, 1, 0, 0]&lt;br /&gt;
&lt;br /&gt;
acc = accuracy_score(y_true, y_pred)&lt;br /&gt;
print(acc)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예시에서는 5개 중 4개를 맞혔으므로 정확도는 0.8이다.&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;
일상어로는 정확도와 정확성이 비슷하게 쓰이지만, 데이터과학에서는 정확도는 분류 모델 평가 지표인 Accuracy를 가리키는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
=== 정확도와 정밀도 ===&lt;br /&gt;
한국어 표현상 정확도와 정밀도는 혼동되기 쉽다. 그러나 머신러닝 평가 지표에서는 Accuracy와 Precision이 서로 다른 지표이다.&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;
| Accuracy&lt;br /&gt;
| 전체 중 맞힌 비율&lt;br /&gt;
|-&lt;br /&gt;
| 정밀도&lt;br /&gt;
| Precision&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;
* TP, TN, FP, FN의 의미&lt;br /&gt;
* 혼동 행렬과의 관계&lt;br /&gt;
* 정밀도와의 차이&lt;br /&gt;
* 재현율과의 차이&lt;br /&gt;
* F1 점수와의 관계&lt;br /&gt;
* 불균형 데이터에서의 한계&lt;br /&gt;
* 오차율과의 관계&lt;br /&gt;
* 임계값 변화에 따른 정확도 변화&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 정확도는 전체 예측 중 올바르게 예측한 비율이다.&lt;br /&gt;
* 정확도는 (TP + TN) / (TP + TN + FP + FN)으로 계산한다.&lt;br /&gt;
* 정확도는 분류 모델의 성능 평가 지표이다.&lt;br /&gt;
* 클래스가 균형적일 때 직관적인 성능 지표로 유용하다.&lt;br /&gt;
* 불균형 데이터에서는 정확도만으로 모델 성능을 평가하면 안 된다.&lt;br /&gt;
* 모든 데이터를 다수 클래스로 예측해도 높은 정확도가 나올 수 있다.&lt;br /&gt;
* 정밀도는 양성으로 예측한 것 중 실제 양성의 비율이다.&lt;br /&gt;
* 재현율은 실제 양성 중 양성으로 맞힌 비율이다.&lt;br /&gt;
* F1 점수는 정밀도와 재현율의 조화평균이다.&lt;br /&gt;
* 정확도와 오차율은 서로 보완적인 관계이다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[분류 모델]]&lt;br /&gt;
* [[혼동 행렬]]&lt;br /&gt;
* [[정밀도]]&lt;br /&gt;
* [[재현율]]&lt;br /&gt;
* [[F1 점수]]&lt;br /&gt;
* [[오차율]]&lt;br /&gt;
* [[ROC-AUC]]&lt;br /&gt;
* [[PR-AUC]]&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=%EB%A6%AC%EB%88%85%EC%8A%A4_rg&amp;diff=53698</id>
		<title>리눅스 rg</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%A6%AC%EB%88%85%EC%8A%A4_rg&amp;diff=53698"/>
		<updated>2026-05-19T18:58:32Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: rg는 ripgrep의 실행 명령어로, 파일과 디렉터리에서 문자열이나 정규표현식 패턴을 빠르게 검색하는 명령어이다. Linux 환경에서는 grep, find, ack, ag와 함께 파일 내용 검색과 소스코드 검색에 자주 사용된다.  == 개요 == rg는 Rust로 작성된 빠른 검색 도구인 ripgrep의 명령어 이름이다. 현재 디렉터리 또는 지정한 경로 아래의 파일을 재귀적으로 검색하고, 검...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;rg는 [[ripgrep]]의 실행 명령어로, 파일과 디렉터리에서 문자열이나 정규표현식 패턴을 빠르게 검색하는 명령어이다. Linux 환경에서는 [[grep]], [[find]], [[ack]], [[ag]]와 함께 파일 내용 검색과 소스코드 검색에 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
rg는 Rust로 작성된 빠른 검색 도구인 ripgrep의 명령어 이름이다. 현재 디렉터리 또는 지정한 경로 아래의 파일을 재귀적으로 검색하고, 검색 패턴과 일치하는 줄을 출력한다.&lt;br /&gt;
&lt;br /&gt;
기본적으로 rg는 다음과 같은 특성을 가진다.&lt;br /&gt;
&lt;br /&gt;
* 현재 디렉터리 이하를 재귀적으로 검색&lt;br /&gt;
* 정규표현식 검색 지원&lt;br /&gt;
* `.gitignore` 규칙 자동 반영&lt;br /&gt;
* 숨김 파일과 숨김 디렉터리 기본 제외&lt;br /&gt;
* 바이너리 파일 기본 제외&lt;br /&gt;
* 검색 결과에 파일명과 줄 번호 표시&lt;br /&gt;
* grep보다 코드 검색에 편리한 기본 동작 제공&lt;br /&gt;
&lt;br /&gt;
== 기본 사용법 ==&lt;br /&gt;
현재 디렉터리 아래에서 특정 문자열을 검색한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg 검색어&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특정 경로에서 검색할 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg password /var/log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특정 파일에서만 검색하려면 파일명을 함께 지정한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg password app.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep과의 차이 ==&lt;br /&gt;
rg는 grep과 비슷하게 파일 내용에서 패턴을 찾는 명령어이지만, 기본 동작이 코드 검색과 프로젝트 검색에 더 적합하다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! grep&lt;br /&gt;
! rg&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;
| .gitignore 반영&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;
rg에서 자주 사용되는 옵션은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* `-i`, `--ignore-case`&lt;br /&gt;
** 대소문자를 구분하지 않고 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -i password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-S`, `--smart-case`&lt;br /&gt;
** 검색어에 대문자가 없으면 대소문자를 무시하고, 대문자가 포함되면 대소문자를 구분한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -S password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-w`, `--word-regexp`&lt;br /&gt;
** 단어 단위로 정확히 일치하는 결과만 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -w user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-n`, `--line-number`&lt;br /&gt;
** 줄 번호를 출력한다.&lt;br /&gt;
** 일반적으로 rg는 기본적으로 줄 번호를 출력하지만, 명시적으로 사용할 수 있다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -n error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-v`, `--invert-match`&lt;br /&gt;
** 검색 패턴과 일치하지 않는 줄을 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -v DEBUG app.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-c`, `--count`&lt;br /&gt;
** 파일별 일치 줄 수를 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -c TODO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-l`, `--files-with-matches`&lt;br /&gt;
** 검색어가 포함된 파일명만 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -l TODO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-L`, `--follow`&lt;br /&gt;
** 심볼릭 링크를 따라가며 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -L config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `--hidden`&lt;br /&gt;
** 숨김 파일과 숨김 디렉터리도 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --hidden password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `--no-ignore`&lt;br /&gt;
** `.gitignore`, `.ignore`, `.rgignore` 등의 무시 규칙을 적용하지 않고 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --no-ignore password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-u`&lt;br /&gt;
** 일부 자동 필터링을 완화한다.&lt;br /&gt;
** 반복해서 사용하면 더 많은 필터링을 해제한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -u password&lt;br /&gt;
rg -uu password&lt;br /&gt;
rg -uuu password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-g`, `--glob`&lt;br /&gt;
** glob 패턴으로 검색 대상 파일을 제한하거나 제외한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -g &amp;quot;*.log&amp;quot;&lt;br /&gt;
rg error -g &amp;quot;!node_modules/**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-t`, `--type`&lt;br /&gt;
** 특정 파일 유형만 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg main -t py&lt;br /&gt;
rg main -t js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-T`, `--type-not`&lt;br /&gt;
** 특정 파일 유형을 제외하고 검색한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg main -T js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-F`, `--fixed-strings`&lt;br /&gt;
** 패턴을 정규표현식이 아니라 일반 문자열로 해석한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -F &amp;quot;user.name&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-e`&lt;br /&gt;
** 검색 패턴을 명시한다.&lt;br /&gt;
** 하이픈으로 시작하는 패턴을 검색하거나 여러 패턴을 사용할 때 유용하다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -e &amp;quot;-option&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-A`&lt;br /&gt;
** 일치한 줄 이후의 줄을 함께 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -A 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-B`&lt;br /&gt;
** 일치한 줄 이전의 줄을 함께 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -B 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `-C`&lt;br /&gt;
** 일치한 줄 앞뒤 문맥을 함께 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -C 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `--files`&lt;br /&gt;
** 검색 가능한 파일 목록만 출력한다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* `--replace`&lt;br /&gt;
** 검색 결과에서 일치한 패턴을 지정한 문자열로 바꾸어 출력한다.&lt;br /&gt;
** 파일 자체를 수정하는 것은 아니다.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;foo&amp;quot; --replace &amp;quot;bar&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 자동 필터링 ==&lt;br /&gt;
rg는 기본적으로 검색 대상에서 일부 파일과 디렉터리를 제외한다.&lt;br /&gt;
&lt;br /&gt;
기본적으로 제외되는 대상은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* `.gitignore`에 의해 무시되는 파일&lt;br /&gt;
* `.ignore`에 의해 무시되는 파일&lt;br /&gt;
* `.rgignore`에 의해 무시되는 파일&lt;br /&gt;
* 숨김 파일과 숨김 디렉터리&lt;br /&gt;
* 바이너리 파일&lt;br /&gt;
&lt;br /&gt;
이러한 자동 필터링 때문에 rg는 소스코드 프로젝트에서 불필요한 결과를 줄이고 빠르게 검색할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 숨김 파일 검색 ==&lt;br /&gt;
숨김 파일과 숨김 디렉터리를 포함하려면 `--hidden` 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --hidden password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 `.gitignore` 규칙은 여전히 적용될 수 있다. 숨김 파일도 포함하고 ignore 규칙까지 무시하려면 다음과 같이 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --hidden --no-ignore password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ignore 규칙 무시 ==&lt;br /&gt;
rg는 기본적으로 `.gitignore`를 따른다.&lt;br /&gt;
&lt;br /&gt;
이를 무시하려면 `--no-ignore` 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --no-ignore password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
더 강하게 자동 필터링을 해제하려면 `-u` 옵션을 반복해서 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -u password&lt;br /&gt;
rg -uu password&lt;br /&gt;
rg -uuu password&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
일반적으로 `rg -uuu`는 숨김 파일, ignore 규칙, 바이너리 제외 등 자동 필터링을 최대한 해제하여 grep -r에 가까운 동작을 하게 한다.&lt;br /&gt;
&lt;br /&gt;
== glob 패턴 검색 ==&lt;br /&gt;
`-g` 옵션을 사용하면 검색할 파일을 glob 패턴으로 제한할 수 있다.&lt;br /&gt;
&lt;br /&gt;
로그 파일만 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -g &amp;quot;*.log&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Python 파일만 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;def main&amp;quot; -g &amp;quot;*.py&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특정 디렉터리 제외:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -g &amp;quot;!node_modules/**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여러 glob 조건을 함께 사용할 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -g &amp;quot;*.log&amp;quot; -g &amp;quot;!old/**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 파일 유형 검색 ==&lt;br /&gt;
rg는 파일 유형(type)을 이용한 검색을 지원한다.&lt;br /&gt;
&lt;br /&gt;
Python 파일만 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg import -t py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
JavaScript 파일만 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg function -t js&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Markdown 파일만 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg TODO -t md&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특정 파일 유형을 제외하려면 `-T`를 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg TODO -T md&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
지원되는 파일 유형 목록은 다음 명령어로 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --type-list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 정규표현식 검색 ==&lt;br /&gt;
rg는 정규표현식 패턴을 이용한 검색을 지원한다.&lt;br /&gt;
&lt;br /&gt;
숫자 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;[0-9]+&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이메일 형태 검색:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특수 문자를 정규표현식이 아니라 일반 문자열로 검색하려면 `-F` 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -F &amp;quot;user.name&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 문맥 출력 ==&lt;br /&gt;
검색 결과 주변 줄을 함께 보고 싶을 때는 `-A`, `-B`, `-C` 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
일치한 줄 이후 3줄 출력:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -A 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
일치한 줄 이전 3줄 출력:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -B 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
일치한 줄 앞뒤 3줄 출력:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg error -C 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 파일명만 출력 ==&lt;br /&gt;
검색어가 포함된 파일명만 알고 싶을 때는 `-l` 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -l TODO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
검색어가 포함되지 않은 파일을 찾고 싶을 때는 `--files-without-match`를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --files-without-match TODO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 개수 출력 ==&lt;br /&gt;
검색어가 몇 번 나타나는지 확인하려면 `-c` 옵션을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -c error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
전체 일치 개수를 합산해서 보고 싶으면 `--count-matches`를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --count-matches error&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 파일 목록 출력 ==&lt;br /&gt;
검색하지 않고 rg가 검색 대상으로 인식하는 파일 목록만 출력하려면 `--files`를 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --files&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
특정 확장자의 파일 목록만 얻고 싶으면 glob과 함께 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --files -g &amp;quot;*.py&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 치환 출력 ==&lt;br /&gt;
`--replace` 옵션은 검색 결과에서 일치한 내용을 다른 문자열로 바꾸어 출력한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;foo&amp;quot; --replace &amp;quot;bar&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
주의할 점은 이 명령이 파일 내용을 직접 수정하지는 않는다는 것이다. 실제 파일 수정이 필요하면 별도의 도구와 함께 사용해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 설치 ==&lt;br /&gt;
Linux 배포판에서는 패키지 관리자를 통해 설치할 수 있다.&lt;br /&gt;
&lt;br /&gt;
Debian 또는 Ubuntu 계열:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt install ripgrep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fedora 계열:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo dnf install ripgrep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Arch Linux 계열:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo pacman -S ripgrep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
설치 후 실행 명령어는 일반적으로 `ripgrep`이 아니라 `rg`이다.&lt;br /&gt;
&lt;br /&gt;
== 활용 예시 ==&lt;br /&gt;
&lt;br /&gt;
=== 프로젝트 전체에서 TODO 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg TODO&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 대소문자 무시 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg -i &amp;quot;error&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 특정 디렉터리에서 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;listen&amp;quot; /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 로그 파일에서 에러 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;error&amp;quot; -g &amp;quot;*.log&amp;quot; /var/log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== node_modules 제외 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;function&amp;quot; -g &amp;quot;!node_modules/**&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python 파일에서 함수 정의 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;^def &amp;quot; -t py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 숨김 파일까지 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --hidden &amp;quot;token&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ignore 규칙 무시 검색 ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg --no-ignore &amp;quot;password&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== grep과 함께 비교한 사용 예 ==&lt;br /&gt;
grep으로 현재 디렉터리 아래를 재귀 검색하려면 보통 다음과 같이 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -R &amp;quot;password&amp;quot; .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rg에서는 다음처럼 더 간단하게 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rg &amp;quot;password&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
rg는 기본적으로 현재 디렉터리를 재귀 검색하므로, 소스코드 프로젝트에서 빠르게 검색하기 좋다.&lt;br /&gt;
&lt;br /&gt;
== find와의 관계 ==&lt;br /&gt;
[[find]]는 파일 이름, 경로, 크기, 수정 시간 등 파일 자체의 속성을 기준으로 파일을 찾는 명령어이다.&lt;br /&gt;
&lt;br /&gt;
rg는 파일 내용에서 문자열이나 패턴을 찾는 명령어이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! find&lt;br /&gt;
! rg&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;
| 이름이 `.log`인 파일 찾기&lt;br /&gt;
| 파일 안의 `error` 문자열 찾기&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ack, ag와의 관계 ==&lt;br /&gt;
rg는 코드 검색 도구인 [[ack]], [[ag]]와 비슷한 목적을 가진다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 도구&lt;br /&gt;
! 특징&lt;br /&gt;
|-&lt;br /&gt;
| grep&lt;br /&gt;
| 전통적인 문자열 검색 도구&lt;br /&gt;
|-&lt;br /&gt;
| ack&lt;br /&gt;
| 프로그래머 친화적인 코드 검색 도구&lt;br /&gt;
|-&lt;br /&gt;
| ag&lt;br /&gt;
| The Silver Searcher. 빠른 코드 검색 도구&lt;br /&gt;
|-&lt;br /&gt;
| rg&lt;br /&gt;
| ripgrep. 빠르고 ignore 규칙을 잘 반영하는 코드 검색 도구&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 주의사항 ==&lt;br /&gt;
rg를 사용할 때는 다음 사항에 주의한다.&lt;br /&gt;
&lt;br /&gt;
* 기본적으로 `.gitignore` 규칙을 따른다.&lt;br /&gt;
* 숨김 파일은 기본 검색 대상에서 제외된다.&lt;br /&gt;
* 바이너리 파일은 기본적으로 검색하지 않는다.&lt;br /&gt;
* 검색 결과가 나오지 않을 때는 ignore 규칙이나 숨김 파일 여부를 확인해야 한다.&lt;br /&gt;
* 정규표현식 특수 문자를 일반 문자로 검색하려면 `-F`를 사용한다.&lt;br /&gt;
* 파일 자체를 수정하는 치환 도구가 아니라 검색 도구이다.&lt;br /&gt;
* 매우 큰 디렉터리를 검색할 때는 대상 경로와 glob 조건을 명확히 지정하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
== 자격시험 학습 관점 ==&lt;br /&gt;
rg는 전통적인 자격시험에서 핵심 명령어로 자주 출제되는 도구는 아니지만, Linux 실무와 개발 환경에서 grep 계열 검색 도구를 이해할 때 함께 알아두면 좋다.&lt;br /&gt;
&lt;br /&gt;
학습할 때는 다음 관점이 중요하다.&lt;br /&gt;
&lt;br /&gt;
* rg는 ripgrep의 실행 명령어이다.&lt;br /&gt;
* 파일 내용에서 문자열이나 정규표현식을 검색한다.&lt;br /&gt;
* 기본적으로 현재 디렉터리를 재귀 검색한다.&lt;br /&gt;
* `.gitignore` 규칙을 기본적으로 따른다.&lt;br /&gt;
* 숨김 파일과 바이너리 파일은 기본적으로 제외한다.&lt;br /&gt;
* `--hidden`, `--no-ignore`, `-u` 옵션으로 자동 필터링을 조정할 수 있다.&lt;br /&gt;
* `-g` 옵션으로 파일 패턴을 제한하거나 제외할 수 있다.&lt;br /&gt;
* `-t` 옵션으로 파일 유형을 지정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* rg는 ripgrep의 명령어 이름이다.&lt;br /&gt;
* rg는 파일 내용에서 문자열이나 정규표현식 패턴을 검색한다.&lt;br /&gt;
* rg는 기본적으로 현재 디렉터리 이하를 재귀적으로 검색한다.&lt;br /&gt;
* rg는 기본적으로 `.gitignore` 규칙을 따른다.&lt;br /&gt;
* rg는 숨김 파일과 바이너리 파일을 기본적으로 제외한다.&lt;br /&gt;
* `-i` 옵션은 대소문자를 구분하지 않는 검색이다.&lt;br /&gt;
* `-w` 옵션은 단어 단위 검색이다.&lt;br /&gt;
* `-g` 옵션은 glob 패턴으로 검색 대상을 제한하거나 제외한다.&lt;br /&gt;
* `-t` 옵션은 파일 유형을 기준으로 검색한다.&lt;br /&gt;
* `--hidden` 옵션은 숨김 파일과 디렉터리를 포함한다.&lt;br /&gt;
* `--no-ignore` 옵션은 ignore 규칙을 무시한다.&lt;br /&gt;
* `-uuu`는 자동 필터링을 최대한 해제하여 검색한다.&lt;br /&gt;
* rg는 grep보다 프로젝트 전체 검색과 코드 검색에 편리한 기본값을 제공한다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[grep]]&lt;br /&gt;
* [[find]]&lt;br /&gt;
* [[ack]]&lt;br /&gt;
* [[ag]]&lt;br /&gt;
* [[정규표현식]]&lt;br /&gt;
* [[Linux 명령어]]&lt;br /&gt;
* [[파일 검색]]&lt;br /&gt;
* [[문자열 검색]]&lt;br /&gt;
* [[.gitignore]]&lt;br /&gt;
* [[셸]]&lt;br /&gt;
* [[터미널]]&lt;br /&gt;
&lt;br /&gt;
== 참고 문헌 ==&lt;br /&gt;
* BurntSushi, ripgrep README.&lt;br /&gt;
* BurntSushi, ripgrep User Guide.&lt;br /&gt;
* Linux manual pages, grep(1).&lt;br /&gt;
* GNU grep manual.&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=C_%EC%96%B8%EC%96%B4&amp;diff=53697</id>
		<title>C 언어</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=C_%EC%96%B8%EC%96%B4&amp;diff=53697"/>
		<updated>2026-05-19T18:57:50Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: C 언어(C programming language)는 시스템 프로그래밍과 응용 프로그램 개발에 널리 사용되는 범용 프로그래밍 언어이다. 절차적 프로그래밍 언어에 속하며, 하드웨어와 가까운 수준의 제어가 가능하면서도 고급 언어의 구조를 제공한다.  == 개요 == C 언어는 1970년대 초 벨 연구소의 데니스 리치(Dennis Ritchie)가 개발한 프로그래밍 언어이다. 원래는 UNIX 운영체제를 구현하...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;C 언어(C programming language)는 시스템 프로그래밍과 응용 프로그램 개발에 널리 사용되는 범용 프로그래밍 언어이다. 절차적 프로그래밍 언어에 속하며, 하드웨어와 가까운 수준의 제어가 가능하면서도 고급 언어의 구조를 제공한다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
C 언어는 1970년대 초 벨 연구소의 데니스 리치(Dennis Ritchie)가 개발한 프로그래밍 언어이다. 원래는 [[UNIX]] 운영체제를 구현하기 위해 사용되었으며, 이후 운영체제, 임베디드 시스템, 컴파일러, 데이터베이스, 네트워크 프로그램 등 다양한 분야에서 활용되었다.&lt;br /&gt;
&lt;br /&gt;
C 언어는 비교적 단순한 문법과 강력한 포인터 기능, 메모리 직접 제어 기능을 제공한다. 이러한 특징 때문에 하드웨어에 가까운 저수준 제어가 필요한 분야에서 중요하게 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 특징 ==&lt;br /&gt;
C 언어의 주요 특징은 다음과 같다.&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;
C 언어는 [[절차적 프로그래밍]] 언어이다. 프로그램을 함수와 명령문의 흐름으로 구성하며, 정해진 순서에 따라 명령을 실행한다.&lt;br /&gt;
&lt;br /&gt;
절차적 프로그래밍에서는 문제를 여러 절차 또는 함수로 나누어 해결한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int add(int a, int b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예시는 두 정수를 더하는 함수를 정의한 것이다.&lt;br /&gt;
&lt;br /&gt;
== 구조적 프로그래밍 ==&lt;br /&gt;
C 언어는 [[구조적 프로그래밍]]을 지원한다. 구조적 프로그래밍은 프로그램을 순차, 선택, 반복 구조로 구성하는 방식이다.&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;
* if&lt;br /&gt;
* if-else&lt;br /&gt;
* switch&lt;br /&gt;
&lt;br /&gt;
=== 반복 구조 ===&lt;br /&gt;
특정 조건이 만족되는 동안 명령문을 반복 실행하는 구조이다.&lt;br /&gt;
&lt;br /&gt;
대표 문법은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* for&lt;br /&gt;
* while&lt;br /&gt;
* do-while&lt;br /&gt;
&lt;br /&gt;
== 기본 구조 ==&lt;br /&gt;
C 프로그램은 일반적으로 `main` 함수에서 실행을 시작한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    printf(&amp;quot;Hello, world!\n&amp;quot;);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 프로그램은 표준 출력에 문자열을 출력하는 가장 기본적인 C 프로그램이다.&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;
|-&lt;br /&gt;
| #include&lt;br /&gt;
| 헤더 파일을 포함한다.&lt;br /&gt;
|-&lt;br /&gt;
| #define&lt;br /&gt;
| 매크로를 정의한다.&lt;br /&gt;
|-&lt;br /&gt;
| #ifdef&lt;br /&gt;
| 조건부 컴파일에 사용한다.&lt;br /&gt;
|-&lt;br /&gt;
| #ifndef&lt;br /&gt;
| 매크로가 정의되지 않았을 때 조건부 컴파일한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
#define MAX_SIZE 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 자료형 ==&lt;br /&gt;
C 언어는 다양한 기본 자료형을 제공한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 자료형&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| char&lt;br /&gt;
| 문자형&lt;br /&gt;
|-&lt;br /&gt;
| int&lt;br /&gt;
| 정수형&lt;br /&gt;
|-&lt;br /&gt;
| float&lt;br /&gt;
| 단정도 실수형&lt;br /&gt;
|-&lt;br /&gt;
| double&lt;br /&gt;
| 배정도 실수형&lt;br /&gt;
|-&lt;br /&gt;
| void&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int age = 20;&lt;br /&gt;
double score = 95.5;&lt;br /&gt;
char grade = &#039;A&#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C 언어에서는 변수를 사용하기 전에 자료형과 함께 선언해야 한다.&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;
* const 변수&lt;br /&gt;
* 매크로 상수&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
const int MAX = 100;&lt;br /&gt;
#define PI 3.14159&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 연산자 ==&lt;br /&gt;
C 언어는 다양한 연산자를 제공한다.&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;
| ==, !=, &amp;amp;lt;, &amp;amp;gt;, &amp;amp;lt;=, &amp;amp;gt;=&lt;br /&gt;
| 값 비교&lt;br /&gt;
|-&lt;br /&gt;
| 논리 연산자&lt;br /&gt;
| &amp;amp;&amp;amp;, ||, !&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;
| 값 1 증가 또는 감소&lt;br /&gt;
|-&lt;br /&gt;
| 비트 연산자&lt;br /&gt;
| &amp;amp;, |, ^, ~, &amp;amp;lt;&amp;amp;lt;, &amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
| 비트 단위 연산&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 제어문 ==&lt;br /&gt;
C 언어의 제어문은 프로그램의 실행 흐름을 제어한다.&lt;br /&gt;
&lt;br /&gt;
=== if 문 ===&lt;br /&gt;
조건이 참일 때 특정 문장을 실행한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if (score &amp;gt;= 60) {&lt;br /&gt;
    printf(&amp;quot;pass\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== switch 문 ===&lt;br /&gt;
하나의 값에 따라 여러 경우 중 하나를 선택한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
switch (grade) {&lt;br /&gt;
case &#039;A&#039;:&lt;br /&gt;
    printf(&amp;quot;excellent\n&amp;quot;);&lt;br /&gt;
    break;&lt;br /&gt;
case &#039;B&#039;:&lt;br /&gt;
    printf(&amp;quot;good\n&amp;quot;);&lt;br /&gt;
    break;&lt;br /&gt;
default:&lt;br /&gt;
    printf(&amp;quot;normal\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== for 문 ===&lt;br /&gt;
반복 횟수가 정해져 있을 때 주로 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i &amp;lt; 10; i++) {&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, i);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== while 문 ===&lt;br /&gt;
조건이 참인 동안 반복한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
while (count &amp;lt; 10) {&lt;br /&gt;
    count++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== do-while 문 ===&lt;br /&gt;
반복문 본문을 최소 한 번 실행한 뒤 조건을 검사한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
do {&lt;br /&gt;
    count++;&lt;br /&gt;
} while (count &amp;lt; 10);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 함수 ==&lt;br /&gt;
[[함수]]는 특정 작업을 수행하는 코드 블록이다. C 언어에서는 프로그램을 여러 함수로 나누어 작성할 수 있다.&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int add(int a, int b) {&lt;br /&gt;
    return a + b;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 배열 ==&lt;br /&gt;
[[배열]]은 같은 자료형의 데이터를 연속된 메모리 공간에 저장하는 구조이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int scores[5] = {90, 80, 70, 60, 50};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
배열의 각 원소는 인덱스를 통해 접근한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, scores[0]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
C 언어의 배열 인덱스는 0부터 시작한다.&lt;br /&gt;
&lt;br /&gt;
== 문자열 ==&lt;br /&gt;
C 언어에서 문자열은 문자 배열로 표현된다. 문자열의 끝은 널 문자 `\0`으로 표시된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char name[] = &amp;quot;Kim&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 문자열은 내부적으로 다음과 같이 저장된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
K  i  m  \0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
문자열 처리를 위해 표준 라이브러리의 `string.h`를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
대표 함수는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* strlen&lt;br /&gt;
* strcpy&lt;br /&gt;
* strcat&lt;br /&gt;
* strcmp&lt;br /&gt;
&lt;br /&gt;
== 포인터 ==&lt;br /&gt;
[[포인터]]는 메모리 주소를 저장하는 변수이다. C 언어의 핵심 개념 중 하나이며, 배열, 문자열, 동적 메모리, 함수 호출, 자료구조 구현 등에 널리 사용된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int a = 10;&lt;br /&gt;
int *p = &amp;amp;a;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 코드에서 `p`는 변수 `a`의 주소를 저장하는 포인터이다.&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;
|-&lt;br /&gt;
| &amp;amp;&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int a = 10;&lt;br /&gt;
int *p = &amp;amp;a;&lt;br /&gt;
&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, *p);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 포인터와 배열 ==&lt;br /&gt;
C 언어에서는 배열 이름이 배열의 첫 번째 원소 주소처럼 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int arr[3] = {10, 20, 30};&lt;br /&gt;
int *p = arr;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
`p`는 배열의 첫 번째 원소를 가리킨다.&lt;br /&gt;
&lt;br /&gt;
포인터 연산을 이용하면 다음과 같이 배열 원소에 접근할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
printf(&amp;quot;%d\n&amp;quot;, *(p + 1));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 구조체 ==&lt;br /&gt;
[[구조체]]는 서로 다른 자료형의 데이터를 하나로 묶어 표현하는 사용자 정의 자료형이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Student {&lt;br /&gt;
    int id;&lt;br /&gt;
    char name[20];&lt;br /&gt;
    double score;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
구조체 변수는 다음과 같이 선언한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Student s1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
구조체 멤버에는 점 연산자를 사용하여 접근한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
s1.id = 1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 공용체 ==&lt;br /&gt;
[[공용체]]는 여러 멤버가 같은 메모리 공간을 공유하는 사용자 정의 자료형이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
union Data {&lt;br /&gt;
    int i;&lt;br /&gt;
    float f;&lt;br /&gt;
    char c;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
enum Day {&lt;br /&gt;
    MON,&lt;br /&gt;
    TUE,&lt;br /&gt;
    WED,&lt;br /&gt;
    THU,&lt;br /&gt;
    FRI&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
열거형은 코드의 가독성을 높이는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 동적 메모리 할당 ==&lt;br /&gt;
C 언어에서는 실행 중 필요한 만큼 메모리를 할당할 수 있다.&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;
| malloc&lt;br /&gt;
| 지정한 크기의 메모리를 할당한다.&lt;br /&gt;
|-&lt;br /&gt;
| calloc&lt;br /&gt;
| 지정한 개수와 크기의 메모리를 0으로 초기화하여 할당한다.&lt;br /&gt;
|-&lt;br /&gt;
| realloc&lt;br /&gt;
| 기존에 할당한 메모리 크기를 변경한다.&lt;br /&gt;
|-&lt;br /&gt;
| free&lt;br /&gt;
| 동적으로 할당한 메모리를 해제한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int) * 10);&lt;br /&gt;
&lt;br /&gt;
if (p != NULL) {&lt;br /&gt;
    free(p);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
동적 메모리를 사용한 뒤에는 반드시 `free`로 해제해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 파일 입출력 ==&lt;br /&gt;
C 언어는 표준 라이브러리를 통해 파일 입출력을 지원한다.&lt;br /&gt;
&lt;br /&gt;
대표 함수는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* fopen&lt;br /&gt;
* fclose&lt;br /&gt;
* fprintf&lt;br /&gt;
* fscanf&lt;br /&gt;
* fgets&lt;br /&gt;
* fputs&lt;br /&gt;
* fread&lt;br /&gt;
* fwrite&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FILE *fp = fopen(&amp;quot;data.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
if (fp != NULL) {&lt;br /&gt;
    fclose(fp);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 표준 입출력 ==&lt;br /&gt;
C 언어의 표준 입출력은 `stdio.h` 헤더를 통해 제공된다.&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;
| printf&lt;br /&gt;
| 형식화된 출력&lt;br /&gt;
|-&lt;br /&gt;
| scanf&lt;br /&gt;
| 형식화된 입력&lt;br /&gt;
|-&lt;br /&gt;
| getchar&lt;br /&gt;
| 문자 입력&lt;br /&gt;
|-&lt;br /&gt;
| putchar&lt;br /&gt;
| 문자 출력&lt;br /&gt;
|-&lt;br /&gt;
| fgets&lt;br /&gt;
| 문자열 입력&lt;br /&gt;
|-&lt;br /&gt;
| puts&lt;br /&gt;
| 문자열 출력&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 컴파일 과정 ==&lt;br /&gt;
C 언어는 [[컴파일 언어]]이다. 소스코드는 컴파일 과정을 거쳐 실행 파일이 된다.&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;
|-&lt;br /&gt;
| 전처리&lt;br /&gt;
| #include, #define 등 전처리 지시문 처리&lt;br /&gt;
|-&lt;br /&gt;
| 컴파일&lt;br /&gt;
| C 소스코드를 어셈블리 코드로 변환&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;
== gcc 사용 예 ==&lt;br /&gt;
Linux 환경에서는 [[gcc]]를 사용하여 C 프로그램을 컴파일할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc main.c -o main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
실행:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
경고 메시지를 더 많이 확인하려면 다음 옵션을 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gcc -Wall -Wextra main.c -o main&lt;br /&gt;
&amp;lt;/pre&amp;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;
|-&lt;br /&gt;
| stdio.h&lt;br /&gt;
| 표준 입출력 함수&lt;br /&gt;
|-&lt;br /&gt;
| stdlib.h&lt;br /&gt;
| 메모리 할당, 변환, 종료 관련 함수&lt;br /&gt;
|-&lt;br /&gt;
| string.h&lt;br /&gt;
| 문자열 처리 함수&lt;br /&gt;
|-&lt;br /&gt;
| math.h&lt;br /&gt;
| 수학 함수&lt;br /&gt;
|-&lt;br /&gt;
| time.h&lt;br /&gt;
| 시간 관련 함수&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== C 언어와 운영체제 ==&lt;br /&gt;
C 언어는 운영체제 개발에 널리 사용되었다. 특히 UNIX 운영체제는 C 언어로 구현되었으며, 이후 많은 운영체제와 시스템 소프트웨어 개발에 영향을 주었다.&lt;br /&gt;
&lt;br /&gt;
C 언어가 운영체제 개발에 적합한 이유는 다음과 같다.&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;
== C 언어와 임베디드 시스템 ==&lt;br /&gt;
C 언어는 [[임베디드 시스템]] 개발에서도 널리 사용된다.&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;
C 언어의 장점은 다음과 같다.&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;
C 언어의 단점은 다음과 같다.&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;
C 언어에서 자주 발생하는 오류는 다음과 같다.&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;
C 언어는 메모리 제어가 강력한 만큼 보안 취약점도 발생하기 쉽다.&lt;br /&gt;
&lt;br /&gt;
대표적인 취약점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[버퍼 오버플로우]]&lt;br /&gt;
* 포맷 스트링 취약점&lt;br /&gt;
* Use-after-free&lt;br /&gt;
* Double free&lt;br /&gt;
* 널 포인터 역참조&lt;br /&gt;
* 정수 오버플로우&lt;br /&gt;
* 메모리 누수&lt;br /&gt;
&lt;br /&gt;
안전한 C 프로그래밍을 위해서는 입력값 검증, 경계 검사, 안전한 문자열 함수 사용, 정적 분석, 코드 리뷰가 중요하다.&lt;br /&gt;
&lt;br /&gt;
== C 언어와 C++ ==&lt;br /&gt;
[[C++]]는 C 언어를 기반으로 객체지향 프로그래밍, 템플릿, 예외 처리 등 다양한 기능을 확장한 언어이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! C&lt;br /&gt;
! C++&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;
&lt;br /&gt;
== C 언어와 Java ==&lt;br /&gt;
[[Java]]는 C/C++의 영향을 받았지만, 메모리 관리와 실행 방식에서 차이가 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! C&lt;br /&gt;
! Java&lt;br /&gt;
|-&lt;br /&gt;
| 실행 방식&lt;br /&gt;
| 네이티브 코드로 컴파일&lt;br /&gt;
| 바이트코드와 JVM 기반 실행&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;
| JVM 기반 이식성&lt;br /&gt;
|-&lt;br /&gt;
| 주요 용도&lt;br /&gt;
| 시스템, 임베디드&lt;br /&gt;
| 웹, 서버, 모바일, 기업 애플리케이션&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 학습 관점 ==&lt;br /&gt;
C 언어는 프로그래밍의 기초뿐 아니라 컴퓨터 구조, 운영체제, 메모리 관리, 자료구조를 이해하는 데 중요한 언어이다.&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;
* C 언어는 절차적 프로그래밍 언어이다.&lt;br /&gt;
* C 언어는 컴파일 언어이다.&lt;br /&gt;
* C 프로그램은 일반적으로 main 함수에서 실행을 시작한다.&lt;br /&gt;
* 포인터는 메모리 주소를 저장하는 변수이다.&lt;br /&gt;
* 배열 인덱스는 0부터 시작한다.&lt;br /&gt;
* 문자열은 널 문자 `\0`으로 끝나는 문자 배열이다.&lt;br /&gt;
* 구조체는 서로 다른 자료형을 하나로 묶는 사용자 정의 자료형이다.&lt;br /&gt;
* malloc, calloc, realloc은 동적 메모리 할당에 사용된다.&lt;br /&gt;
* free는 동적으로 할당한 메모리를 해제한다.&lt;br /&gt;
* C 언어는 배열 경계 검사를 자동으로 수행하지 않는다.&lt;br /&gt;
* 버퍼 오버플로우는 C 언어에서 대표적인 보안 취약점이다.&lt;br /&gt;
* 컴파일 과정은 전처리, 컴파일, 어셈블, 링크 순서로 설명할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[프로그래밍 언어]]&lt;br /&gt;
* [[절차적 프로그래밍]]&lt;br /&gt;
* [[구조적 프로그래밍]]&lt;br /&gt;
* [[컴파일 언어]]&lt;br /&gt;
* [[gcc]]&lt;br /&gt;
* [[포인터]]&lt;br /&gt;
* [[배열]]&lt;br /&gt;
* [[구조체]]&lt;br /&gt;
* [[동적 메모리 할당]]&lt;br /&gt;
* [[파일 입출력]]&lt;br /&gt;
* [[버퍼 오버플로우]]&lt;br /&gt;
* [[C++]]&lt;br /&gt;
* [[Java]]&lt;br /&gt;
* [[UNIX]]&lt;br /&gt;
* [[임베디드 시스템]]&lt;br /&gt;
&lt;br /&gt;
[[분류:프로그래밍 언어]]&lt;br /&gt;
[[분류:C 언어]]&lt;br /&gt;
[[분류:시스템 프로그래밍]]&lt;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=C_%EC%96%B8%EC%96%B4_malloc&amp;diff=53696</id>
		<title>C 언어 malloc</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=C_%EC%96%B8%EC%96%B4_malloc&amp;diff=53696"/>
		<updated>2026-05-19T18:57:11Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: malloc은 C 언어 표준 라이브러리에서 동적 메모리를 할당하기 위해 사용하는 함수이다. 프로그램 실행 중 필요한 크기의 메모리를 힙 영역에 할당하고, 할당된 메모리의 시작 주소를 포인터로 반환한다.  == 개요 == malloc은 memory allocation의 약자로, 실행 시간에 필요한 메모리를 동적으로 확보할 때 사용한다. 배열의 크기나 자료구조의 크기를 컴파일 시점에 확정할 수...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;malloc은 C 언어 표준 라이브러리에서 동적 메모리를 할당하기 위해 사용하는 함수이다. 프로그램 실행 중 필요한 크기의 메모리를 힙 영역에 할당하고, 할당된 메모리의 시작 주소를 포인터로 반환한다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
malloc은 memory allocation의 약자로, 실행 시간에 필요한 메모리를 동적으로 확보할 때 사용한다. 배열의 크기나 자료구조의 크기를 컴파일 시점에 확정할 수 없을 때 유용하다.&lt;br /&gt;
&lt;br /&gt;
malloc 함수는 [[stdlib.h]] 헤더에 선언되어 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdlib.h&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
malloc으로 할당한 메모리는 자동으로 해제되지 않으므로, 사용이 끝나면 반드시 [[free]] 함수를 사용하여 해제해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 함수 원형 ==&lt;br /&gt;
malloc 함수의 원형은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void *malloc(size_t size);&lt;br /&gt;
&amp;lt;/pre&amp;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;
| void 포인터&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;
| NULL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
malloc은 요청한 크기만큼의 메모리를 바이트 단위로 할당한다. 반환형은 `void *`이므로 어떤 자료형의 포인터로도 변환하여 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 기본 사용법 ==&lt;br /&gt;
정수 1개를 저장할 메모리를 동적으로 할당하는 예는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdlib.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    int *p = malloc(sizeof(int));&lt;br /&gt;
&lt;br /&gt;
    if (p == NULL) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    *p = 10;&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, *p);&lt;br /&gt;
&lt;br /&gt;
    free(p);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 코드에서 `malloc(sizeof(int))`는 정수 1개를 저장할 수 있는 크기의 메모리를 할당한다.&lt;br /&gt;
&lt;br /&gt;
== 배열 동적 할당 ==&lt;br /&gt;
정수 10개를 저장할 배열 공간을 동적으로 할당하는 예는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *arr = malloc(sizeof(int) * 10);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사용 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdlib.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    int n = 10;&lt;br /&gt;
    int *arr = malloc(sizeof(int) * n);&lt;br /&gt;
&lt;br /&gt;
    if (arr == NULL) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;amp;lt; n; i++) {&lt;br /&gt;
        arr[i] = i + 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for (int i = 0; i &amp;amp;lt; n; i++) {&lt;br /&gt;
        printf(&amp;quot;%d &amp;quot;, arr[i]);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    free(arr);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
malloc으로 할당한 메모리는 배열처럼 인덱스를 이용하여 접근할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 메모리 초기화 ==&lt;br /&gt;
malloc으로 할당한 메모리는 초기화되지 않는다. 즉, 할당된 공간에는 이전에 사용되던 쓰레기값이 들어 있을 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이때 `*p`의 값은 정해져 있지 않다. 사용하기 전에 직접 초기화해야 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*p = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
메모리를 0으로 초기화하면서 할당하려면 [[calloc]]을 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== malloc과 calloc ==&lt;br /&gt;
malloc과 calloc은 모두 동적 메모리를 할당하지만 초기화 여부가 다르다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! malloc&lt;br /&gt;
! calloc&lt;br /&gt;
|-&lt;br /&gt;
| 목적&lt;br /&gt;
| 지정한 크기의 메모리 할당&lt;br /&gt;
| 지정한 개수와 크기의 메모리 할당&lt;br /&gt;
|-&lt;br /&gt;
| 초기화&lt;br /&gt;
| 초기화하지 않음&lt;br /&gt;
| 0으로 초기화&lt;br /&gt;
|-&lt;br /&gt;
| 매개변수&lt;br /&gt;
| 전체 바이트 크기&lt;br /&gt;
| 요소 개수와 요소 크기&lt;br /&gt;
|-&lt;br /&gt;
| 예&lt;br /&gt;
| malloc(sizeof(int) * 10)&lt;br /&gt;
| calloc(10, sizeof(int))&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== malloc과 realloc ==&lt;br /&gt;
[[realloc]]은 이미 할당한 동적 메모리의 크기를 변경할 때 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *arr = malloc(sizeof(int) * 10);&lt;br /&gt;
int *tmp = realloc(arr, sizeof(int) * 20);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
realloc은 기존 데이터를 가능한 한 유지하면서 메모리 크기를 변경한다. 다만 실패할 수 있으므로 임시 포인터에 결과를 받은 뒤 확인하는 방식이 안전하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *tmp = realloc(arr, sizeof(int) * 20);&lt;br /&gt;
&lt;br /&gt;
if (tmp != NULL) {&lt;br /&gt;
    arr = tmp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== malloc과 free ==&lt;br /&gt;
malloc으로 할당한 메모리는 사용 후 free로 해제해야 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
&lt;br /&gt;
if (p != NULL) {&lt;br /&gt;
    *p = 10;&lt;br /&gt;
    free(p);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
free를 호출하지 않으면 [[메모리 누수]]가 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== NULL 확인 ==&lt;br /&gt;
malloc은 메모리 할당에 실패하면 NULL을 반환한다. 따라서 malloc의 반환값은 사용 전에 확인하는 것이 안전하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
&lt;br /&gt;
if (p == NULL) {&lt;br /&gt;
    printf(&amp;quot;memory allocation failed\n&amp;quot;);&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
메모리 부족 상황에서 NULL 확인 없이 포인터를 사용하면 프로그램이 비정상 종료될 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 형 변환 ==&lt;br /&gt;
C 언어에서는 malloc의 반환값을 명시적으로 형 변환하지 않아도 된다.&lt;br /&gt;
&lt;br /&gt;
권장 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다음과 같이 명시적 형 변환을 하는 코드도 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = (int *)malloc(sizeof(int));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 C에서는 malloc 반환값을 캐스팅하지 않는 방식이 일반적으로 권장된다. 헤더 파일 누락으로 인한 경고를 가릴 수 있기 때문이다.&lt;br /&gt;
&lt;br /&gt;
== sizeof 사용 ==&lt;br /&gt;
malloc을 사용할 때는 자료형 크기를 직접 숫자로 쓰기보다 sizeof를 사용하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
좋은 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *arr = malloc(sizeof(int) * n);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
또는 다음처럼 포인터가 가리키는 대상의 크기를 기준으로 작성할 수도 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *arr = malloc(sizeof(*arr) * n);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 방식은 자료형이 바뀌어도 sizeof 부분을 수정하지 않아도 되어 실수를 줄일 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 구조체 동적 할당 ==&lt;br /&gt;
구조체도 malloc으로 동적 할당할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdio.h&amp;amp;gt;&lt;br /&gt;
#include &amp;amp;lt;stdlib.h&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
struct Student {&lt;br /&gt;
    int id;&lt;br /&gt;
    double score;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
int main(void) {&lt;br /&gt;
    struct Student *s = malloc(sizeof(struct Student));&lt;br /&gt;
&lt;br /&gt;
    if (s == NULL) {&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    s-&amp;amp;gt;id = 1;&lt;br /&gt;
    s-&amp;amp;gt;score = 95.5;&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;%d %.1f\n&amp;quot;, s-&amp;amp;gt;id, s-&amp;amp;gt;score);&lt;br /&gt;
&lt;br /&gt;
    free(s);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
구조체 포인터를 통해 멤버에 접근할 때는 `-&amp;amp;gt;` 연산자를 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 문자열 동적 할당 ==&lt;br /&gt;
문자열을 저장할 메모리도 malloc으로 할당할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
char *str = malloc(sizeof(char) * 6);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
문자열은 마지막에 널 문자 `\0`이 필요하므로, 필요한 문자 수보다 1바이트 더 크게 할당해야 한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 &amp;quot;hello&amp;quot;는 5글자이지만 실제로는 6바이트가 필요하다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
h e l l o \0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2차원 배열 동적 할당 ==&lt;br /&gt;
2차원 배열은 여러 방식으로 동적 할당할 수 있다.&lt;br /&gt;
&lt;br /&gt;
포인터 배열을 이용하는 방식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int **arr = malloc(sizeof(int *) * rows);&lt;br /&gt;
&lt;br /&gt;
for (int i = 0; i &amp;amp;lt; rows; i++) {&lt;br /&gt;
    arr[i] = malloc(sizeof(int) * cols);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
해제할 때는 할당한 순서의 반대로 각 행을 먼저 해제한 뒤 포인터 배열을 해제한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for (int i = 0; i &amp;amp;lt; rows; i++) {&lt;br /&gt;
    free(arr[i]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
free(arr);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 힙 영역 ==&lt;br /&gt;
malloc으로 할당되는 메모리는 일반적으로 [[힙]] 영역에 위치한다.&lt;br /&gt;
&lt;br /&gt;
C 프로그램의 메모리 영역은 보통 다음과 같이 설명된다.&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;
힙 영역은 실행 중 필요한 크기의 메모리를 할당하고 해제할 수 있지만, 개발자가 직접 관리해야 한다.&lt;br /&gt;
&lt;br /&gt;
== malloc 사용 시 주의사항 ==&lt;br /&gt;
&lt;br /&gt;
* 할당 실패 여부를 확인한다.&lt;br /&gt;
** malloc이 NULL을 반환할 수 있으므로 사용 전에 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 사용 후 반드시 free한다.&lt;br /&gt;
** 해제하지 않으면 메모리 누수가 발생한다.&lt;br /&gt;
&lt;br /&gt;
* 해제한 포인터를 다시 사용하지 않는다.&lt;br /&gt;
** 이미 해제된 메모리를 참조하면 use-after-free 오류가 발생한다.&lt;br /&gt;
&lt;br /&gt;
* 같은 메모리를 두 번 해제하지 않는다.&lt;br /&gt;
** double free 오류가 발생할 수 있다.&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;
* 해제 후 포인터를 NULL로 설정하면 안전성에 도움이 된다.&lt;br /&gt;
** 실수로 다시 사용하는 위험을 줄일 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
free(p);&lt;br /&gt;
p = NULL;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 대표 오류 ==&lt;br /&gt;
&lt;br /&gt;
=== 메모리 누수 ===&lt;br /&gt;
할당한 메모리를 해제하지 않으면 메모리 누수가 발생한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void func(void) {&lt;br /&gt;
    int *p = malloc(sizeof(int) * 100);&lt;br /&gt;
&lt;br /&gt;
    if (p == NULL) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // free(p)가 없음&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 널 포인터 역참조 ===&lt;br /&gt;
malloc 실패 후 NULL 포인터를 그대로 사용하면 오류가 발생한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
&lt;br /&gt;
*p = 10;   // p가 NULL이면 오류&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== use-after-free ===&lt;br /&gt;
free한 뒤 해당 포인터를 다시 사용하는 오류이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
free(p);&lt;br /&gt;
&lt;br /&gt;
*p = 10;   // 잘못된 사용&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== double free ===&lt;br /&gt;
같은 메모리를 두 번 해제하는 오류이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *p = malloc(sizeof(int));&lt;br /&gt;
&lt;br /&gt;
free(p);&lt;br /&gt;
free(p);   // 잘못된 사용&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 버퍼 오버플로우 ===&lt;br /&gt;
할당한 크기보다 더 많이 쓰면 버퍼 오버플로우가 발생한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int *arr = malloc(sizeof(int) * 3);&lt;br /&gt;
&lt;br /&gt;
arr[3] = 10;   // 인덱스 범위 초과&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== malloc 관련 함수 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 함수&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| malloc&lt;br /&gt;
| 지정한 바이트 크기의 메모리를 할당한다.&lt;br /&gt;
|-&lt;br /&gt;
| calloc&lt;br /&gt;
| 지정한 개수와 크기의 메모리를 0으로 초기화하여 할당한다.&lt;br /&gt;
|-&lt;br /&gt;
| realloc&lt;br /&gt;
| 기존 동적 메모리의 크기를 변경한다.&lt;br /&gt;
|-&lt;br /&gt;
| free&lt;br /&gt;
| 동적으로 할당한 메모리를 해제한다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 활용 분야 ==&lt;br /&gt;
malloc은 다음과 같은 경우에 사용된다.&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;
== 자료구조와 malloc ==&lt;br /&gt;
C 언어에서 연결 리스트, 트리, 그래프 같은 동적 자료구조는 malloc을 사용하여 노드를 생성하는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
연결 리스트 노드 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Node {&lt;br /&gt;
    int data;&lt;br /&gt;
    struct Node *next;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
struct Node *node = malloc(sizeof(struct Node));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
동적 자료구조는 필요한 만큼 노드를 생성하고, 더 이상 필요하지 않을 때 해제할 수 있다는 장점이 있다.&lt;br /&gt;
&lt;br /&gt;
== malloc과 보안 ==&lt;br /&gt;
malloc 사용 오류는 보안 취약점으로 이어질 수 있다.&lt;br /&gt;
&lt;br /&gt;
대표적인 취약점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[버퍼 오버플로우]]&lt;br /&gt;
* [[메모리 누수]]&lt;br /&gt;
* use-after-free&lt;br /&gt;
* double free&lt;br /&gt;
* heap overflow&lt;br /&gt;
* integer overflow&lt;br /&gt;
* dangling pointer&lt;br /&gt;
&lt;br /&gt;
안전한 사용을 위해서는 크기 검증, NULL 확인, 경계 검사, 해제 후 포인터 관리, 정적 분석 도구 활용 등이 필요하다.&lt;br /&gt;
&lt;br /&gt;
== 관련 개념 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== malloc과 정적 배열 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 정적 배열&lt;br /&gt;
! malloc&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;
| free로 직접 해제&lt;br /&gt;
|-&lt;br /&gt;
| 크기 변경&lt;br /&gt;
| 어려움&lt;br /&gt;
| realloc으로 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== malloc과 calloc ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! malloc&lt;br /&gt;
! calloc&lt;br /&gt;
|-&lt;br /&gt;
| 초기화&lt;br /&gt;
| 하지 않음&lt;br /&gt;
| 0으로 초기화&lt;br /&gt;
|-&lt;br /&gt;
| 매개변수&lt;br /&gt;
| 전체 바이트 수&lt;br /&gt;
| 요소 개수, 요소 크기&lt;br /&gt;
|-&lt;br /&gt;
| 속도&lt;br /&gt;
| 초기화가 없어 상대적으로 빠를 수 있음&lt;br /&gt;
| 0 초기화 비용이 있음&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== malloc과 realloc ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! malloc&lt;br /&gt;
! realloc&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;
C 언어에서 malloc은 포인터, 배열, 구조체, 자료구조, 메모리 관리와 연결되는 핵심 개념이다.&lt;br /&gt;
&lt;br /&gt;
학습 시에는 다음 내용을 함께 이해해야 한다.&lt;br /&gt;
&lt;br /&gt;
* 포인터와 주소&lt;br /&gt;
* 힙 영역과 스택 영역&lt;br /&gt;
* sizeof 사용&lt;br /&gt;
* NULL 반환 확인&lt;br /&gt;
* free를 통한 해제&lt;br /&gt;
* malloc과 calloc의 차이&lt;br /&gt;
* malloc과 realloc의 차이&lt;br /&gt;
* 메모리 누수&lt;br /&gt;
* 버퍼 오버플로우&lt;br /&gt;
* use-after-free&lt;br /&gt;
* double free&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* malloc은 C 언어에서 동적 메모리를 할당하는 함수이다.&lt;br /&gt;
* malloc은 stdlib.h에 선언되어 있다.&lt;br /&gt;
* malloc의 매개변수는 할당할 바이트 수이다.&lt;br /&gt;
* malloc은 할당된 메모리의 시작 주소를 반환한다.&lt;br /&gt;
* malloc의 반환형은 void 포인터이다.&lt;br /&gt;
* malloc은 실패 시 NULL을 반환한다.&lt;br /&gt;
* malloc으로 할당된 메모리는 초기화되지 않는다.&lt;br /&gt;
* malloc으로 할당한 메모리는 free로 해제해야 한다.&lt;br /&gt;
* free하지 않으면 메모리 누수가 발생할 수 있다.&lt;br /&gt;
* 해제한 메모리를 다시 사용하면 use-after-free 오류가 발생할 수 있다.&lt;br /&gt;
* 같은 포인터를 두 번 free하면 double free 오류가 발생할 수 있다.&lt;br /&gt;
* 문자열 공간을 malloc으로 할당할 때는 널 문자 공간까지 고려해야 한다.&lt;br /&gt;
* malloc은 배열, 구조체, 연결 리스트 등 동적 자료구조 구현에 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[C 언어]]&lt;br /&gt;
* [[포인터]]&lt;br /&gt;
* [[동적 메모리 할당]]&lt;br /&gt;
* [[free]]&lt;br /&gt;
* [[calloc]]&lt;br /&gt;
* [[realloc]]&lt;br /&gt;
* [[힙]]&lt;br /&gt;
* [[스택]]&lt;br /&gt;
* [[메모리 누수]]&lt;br /&gt;
* [[버퍼 오버플로우]]&lt;br /&gt;
* [[use-after-free]]&lt;br /&gt;
* [[double free]]&lt;br /&gt;
* [[연결 리스트]]&lt;br /&gt;
* [[자료구조]]&lt;br /&gt;
* [[stdlib.h]]&lt;br /&gt;
&lt;br /&gt;
[[분류:C 언어]]&lt;br /&gt;
[[분류:메모리 관리]]&lt;br /&gt;
[[분류:시스템 프로그래밍]]&lt;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EA%B2%80%EC%82%AC%ED%95%A9&amp;diff=53695</id>
		<title>검사합</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EA%B2%80%EC%82%AC%ED%95%A9&amp;diff=53695"/>
		<updated>2026-05-19T18:56:25Z</updated>

		<summary type="html">&lt;p&gt;라이언: 체크섬 문서로 넘겨주기&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#넘겨주기 [[체크섬]]&lt;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%B2%B4%ED%81%AC%EC%84%AC&amp;diff=53694</id>
		<title>체크섬</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%B2%B4%ED%81%AC%EC%84%AC&amp;diff=53694"/>
		<updated>2026-05-19T18:56:10Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 체크섬(Checksum)은 데이터의 오류 여부를 확인하기 위해 데이터로부터 계산한 작은 크기의 검증값이다. 송신자와 수신자가 같은 방식으로 체크섬을 계산하여 비교함으로써 데이터가 전송 또는 저장 과정에서 손상되었는지 확인할 수 있다.  == 개요 == 체크섬은 데이터의 무결성을 간단히 확인하기 위한 오류 검출 기법이다. 원본 데이터에 대해 특정 계산을 수행하여...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;체크섬(Checksum)은 데이터의 오류 여부를 확인하기 위해 데이터로부터 계산한 작은 크기의 검증값이다. 송신자와 수신자가 같은 방식으로 체크섬을 계산하여 비교함으로써 데이터가 전송 또는 저장 과정에서 손상되었는지 확인할 수 있다.&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;
일반적인 절차는 다음과 같다.&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10, 20, 30, 40&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
단순한 체크섬 방식으로 모든 값을 더하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 + 20 + 30 + 40 = 100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
따라서 체크섬은 100이 된다.&lt;br /&gt;
&lt;br /&gt;
수신자가 받은 데이터가 다음과 같이 바뀌었다고 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10, 20, 31, 40&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다시 합계를 계산하면 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
10 + 20 + 31 + 40 = 101&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
송신자가 보낸 체크섬 100과 수신자가 계산한 체크섬 101이 다르므로 오류를 탐지할 수 있다.&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;
체크섬은 일반적으로 오류 검출(Error Detection)을 위한 기법이다.&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;
&lt;br /&gt;
구현이 쉽고 빠르지만, 서로 다른 오류가 같은 합계를 만들 수 있으므로 검출 능력은 제한적이다.&lt;br /&gt;
&lt;br /&gt;
=== 1의 보수 체크섬 ===&lt;br /&gt;
1의 보수 체크섬은 여러 통신 프로토콜에서 사용되는 방식이다.&lt;br /&gt;
&lt;br /&gt;
데이터를 일정한 크기의 단어로 나누어 더한 뒤, 자리올림을 다시 더하고, 마지막에 1의 보수를 취하는 방식으로 계산한다.&lt;br /&gt;
&lt;br /&gt;
대표적으로 [[IP]], [[TCP]], [[UDP]]의 체크섬 계산과 관련된다.&lt;br /&gt;
&lt;br /&gt;
=== CRC ===&lt;br /&gt;
[[CRC]](Cyclic Redundancy Check)는 다항식 나눗셈을 이용하는 오류 검출 기법이다.&lt;br /&gt;
&lt;br /&gt;
CRC는 단순 합 체크섬보다 오류 검출 능력이 뛰어나며, 네트워크 프레임, 저장장치, 압축 파일 등에서 널리 사용된다.&lt;br /&gt;
&lt;br /&gt;
대표적인 CRC 예는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* CRC-8&lt;br /&gt;
* CRC-16&lt;br /&gt;
* CRC-32&lt;br /&gt;
&lt;br /&gt;
=== 해시값 ===&lt;br /&gt;
[[해시 함수]]를 이용해 데이터의 검증값을 만들 수도 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
* MD5&lt;br /&gt;
* SHA-1&lt;br /&gt;
* SHA-256&lt;br /&gt;
&lt;br /&gt;
다만 일반적인 체크섬과 암호학적 해시는 목적이 다르다. 체크섬은 주로 우연한 오류 검출을 목적으로 하고, 암호학적 해시는 위조나 변조 탐지에 더 강한 보안 특성을 목표로 한다.&lt;br /&gt;
&lt;br /&gt;
== 체크섬과 CRC ==&lt;br /&gt;
체크섬과 CRC는 모두 오류 검출에 사용되지만, CRC는 더 강한 오류 검출 능력을 제공하는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 체크섬&lt;br /&gt;
! CRC&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;
| IP, TCP, UDP 체크섬&lt;br /&gt;
| Ethernet, 압축 파일, 저장장치&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;
! 해시 함수&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;
| 단순 합, IP 체크섬&lt;br /&gt;
| SHA-256, SHA-3&lt;br /&gt;
|-&lt;br /&gt;
| 악의적 변조 탐지&lt;br /&gt;
| 부적합&lt;br /&gt;
| 암호학적 해시 사용 시 적합&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
암호학적 보안이 필요한 경우에는 단순 체크섬이 아니라 [[암호학적 해시 함수]]나 [[전자서명]], [[MAC]] 등을 사용해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 네트워크에서의 체크섬 ==&lt;br /&gt;
네트워크에서는 패킷이나 프레임이 전송 중 손상되었는지 확인하기 위해 체크섬을 사용한다.&lt;br /&gt;
&lt;br /&gt;
=== IP 체크섬 ===&lt;br /&gt;
[[IPv4]] 헤더에는 헤더 오류 검출을 위한 체크섬 필드가 있다.&lt;br /&gt;
&lt;br /&gt;
IPv4 헤더 체크섬은 IP 헤더에 대해서만 계산되며, 데이터 부분은 포함하지 않는다. 라우터를 거칠 때마다 TTL 값이 변경되므로 IPv4 헤더 체크섬도 다시 계산될 수 있다.&lt;br /&gt;
&lt;br /&gt;
참고로 [[IPv6]]에는 IPv4와 같은 헤더 체크섬 필드가 없다.&lt;br /&gt;
&lt;br /&gt;
=== TCP 체크섬 ===&lt;br /&gt;
[[TCP]] 체크섬은 TCP 세그먼트의 오류를 검출하기 위해 사용된다.&lt;br /&gt;
&lt;br /&gt;
TCP 체크섬은 TCP 헤더와 데이터뿐 아니라, 의사 헤더라고 부르는 IP 주소 관련 정보도 함께 포함하여 계산한다.&lt;br /&gt;
&lt;br /&gt;
=== UDP 체크섬 ===&lt;br /&gt;
[[UDP]] 체크섬은 UDP 데이터그램의 오류 검출에 사용된다.&lt;br /&gt;
&lt;br /&gt;
IPv4에서는 UDP 체크섬이 선택적일 수 있었지만, IPv6에서는 UDP 체크섬이 필수이다.&lt;br /&gt;
&lt;br /&gt;
=== Ethernet FCS ===&lt;br /&gt;
[[Ethernet]] 프레임에서는 FCS(Frame Check Sequence)를 사용한다.&lt;br /&gt;
&lt;br /&gt;
FCS는 일반적으로 CRC를 이용하여 프레임의 오류를 검출한다.&lt;br /&gt;
&lt;br /&gt;
== 파일 검증에서의 활용 ==&lt;br /&gt;
파일 다운로드 후 파일이 손상되지 않았는지 확인하기 위해 체크섬 또는 해시값을 제공하는 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SHA256: 3a6eb0790f39ac87c94f3856b2dd2c5d...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사용자는 다운로드한 파일의 해시값을 계산하여 제공된 값과 비교할 수 있다.&lt;br /&gt;
&lt;br /&gt;
Linux에서는 다음과 같은 명령어를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sha256sum file.iso&lt;br /&gt;
md5sum file.iso&lt;br /&gt;
cksum file.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux cksum 명령어 ==&lt;br /&gt;
[[cksum]]은 Linux와 Unix 계열 시스템에서 파일의 CRC 체크섬과 바이트 수를 출력하는 명령어이다.&lt;br /&gt;
&lt;br /&gt;
사용 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cksum file.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
출력 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1234567890 2048 file.txt&lt;br /&gt;
&amp;lt;/pre&amp;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;
|-&lt;br /&gt;
| 첫 번째 값&lt;br /&gt;
| CRC 체크섬 값&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;
* RAID 데이터 무결성 확인&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;
* 악의적인 변조를 탐지하기에는 부족하다.&lt;br /&gt;
* 보안 목적에는 암호학적 해시나 MAC이 필요하다.&lt;br /&gt;
&lt;br /&gt;
== 충돌 ==&lt;br /&gt;
충돌(Collision)은 서로 다른 데이터가 같은 체크섬 값을 가지는 경우를 말한다.&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;
* [[HMAC]]&lt;br /&gt;
* [[전자서명]]&lt;br /&gt;
* [[MAC]]&lt;br /&gt;
* [[무결성 검증]]&lt;br /&gt;
&lt;br /&gt;
예를 들어 파일이 우연히 손상되었는지 확인하는 용도에는 체크섬이 유용하지만, 공격자가 파일을 바꿨는지 확인하는 용도에는 SHA-256 해시와 전자서명 검증이 더 적절하다.&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;
! 패리티 비트&lt;br /&gt;
|-&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;
| 제한적&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;
! 오류 정정 코드&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;
| IP 체크섬, cksum&lt;br /&gt;
| 해밍 코드, ECC&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 체크섬과 HMAC ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 체크섬&lt;br /&gt;
! HMAC&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;
* 체크섬은 오류 검출용 값이다.&lt;br /&gt;
* 송신자와 수신자가 같은 방식으로 계산하여 비교한다.&lt;br /&gt;
* 체크섬은 오류를 정정하지 않는다.&lt;br /&gt;
* 단순 체크섬은 보안 기능이 아니다.&lt;br /&gt;
* CRC는 체크섬보다 강한 오류 검출 방식으로 자주 사용된다.&lt;br /&gt;
* TCP, UDP, IPv4에서 체크섬이 사용된다.&lt;br /&gt;
* Ethernet은 FCS를 통해 프레임 오류를 검출한다.&lt;br /&gt;
* 파일 무결성 확인에는 체크섬 또는 해시값이 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 체크섬은 데이터 오류 검출을 위한 검증값이다.&lt;br /&gt;
* 체크섬 값이 다르면 데이터가 손상되었거나 변경되었음을 알 수 있다.&lt;br /&gt;
* 체크섬 값이 같아도 데이터가 반드시 완전히 동일하다고 보장할 수는 없다.&lt;br /&gt;
* 체크섬은 일반적으로 오류 정정 기능을 제공하지 않는다.&lt;br /&gt;
* IP, TCP, UDP 등 네트워크 프로토콜에서 체크섬이 사용된다.&lt;br /&gt;
* IPv4 헤더에는 체크섬 필드가 있지만 IPv6 기본 헤더에는 체크섬 필드가 없다.&lt;br /&gt;
* TCP와 UDP 체크섬은 오류 검출에 사용된다.&lt;br /&gt;
* CRC는 대표적인 오류 검출 기법이다.&lt;br /&gt;
* 체크섬은 보안 목적의 변조 방지 수단으로는 부족하다.&lt;br /&gt;
* 악의적 변조 탐지에는 암호학적 해시, HMAC, 전자서명 등을 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[CRC]]&lt;br /&gt;
* [[해시 함수]]&lt;br /&gt;
* [[암호학적 해시 함수]]&lt;br /&gt;
* [[HMAC]]&lt;br /&gt;
* [[전자서명]]&lt;br /&gt;
* [[오류 검출]]&lt;br /&gt;
* [[오류 정정 코드]]&lt;br /&gt;
* [[패리티 비트]]&lt;br /&gt;
* [[TCP]]&lt;br /&gt;
* [[UDP]]&lt;br /&gt;
* [[IPv4]]&lt;br /&gt;
* [[IPv6]]&lt;br /&gt;
* [[Ethernet]]&lt;br /&gt;
* [[cksum]]&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=Robots.txt&amp;diff=53539</id>
		<title>Robots.txt</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=Robots.txt&amp;diff=53539"/>
		<updated>2026-05-19T06:24:40Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: robots.txt는 웹사이트 운영자가 웹 크롤러에게 특정 경로나 자원에 접근하지 말 것을 요청하기 위해 사용하는 텍스트 파일이다. 로봇 배제 프로토콜을 구현하는 대표적인 파일이며, 일반적으로 웹사이트의 루트 경로에 위치한다.  == 개요 == robots.txt는 웹사이트의 크롤링 정책을 크롤러에게 알려주는 파일이다. 검색엔진 크롤러, AI 학습용 크롤러, 아카이브 봇...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;robots.txt는 웹사이트 운영자가 [[웹 크롤러]]에게 특정 경로나 자원에 접근하지 말 것을 요청하기 위해 사용하는 텍스트 파일이다. [[로봇 배제 프로토콜]]을 구현하는 대표적인 파일이며, 일반적으로 웹사이트의 루트 경로에 위치한다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
robots.txt는 웹사이트의 크롤링 정책을 크롤러에게 알려주는 파일이다. 검색엔진 크롤러, AI 학습용 크롤러, 아카이브 봇 등 자동화된 클라이언트는 사이트에 접근하기 전에 robots.txt 파일을 확인하고, 자신에게 적용되는 규칙에 따라 크롤링 여부를 결정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
robots.txt는 보통 다음 위치에 둔다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://example.com/robots.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
robots.txt는 크롤러에게 &amp;quot;이 경로는 수집하지 말아 달라&amp;quot;고 요청하는 수단이지, 서버가 접근을 강제로 차단하는 보안 기능은 아니다. 악의적인 크롤러나 규칙을 준수하지 않는 봇은 robots.txt를 무시할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 표준 ==&lt;br /&gt;
robots.txt와 관련된 공식 표준은 [[RFC 9309]]이다.&lt;br /&gt;
&lt;br /&gt;
RFC 9309의 공식 제목은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Robots Exclusion Protocol&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
한국어로는 일반적으로 [[로봇 배제 프로토콜]]이라고 부른다.&lt;br /&gt;
&lt;br /&gt;
== 목적 ==&lt;br /&gt;
robots.txt의 주요 목적은 다음과 같다.&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;
robots.txt는 사이트의 루트 경로에 위치해야 한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://example.com/robots.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다음과 같은 위치는 표준적인 robots.txt 위치가 아니다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://example.com/path/robots.txt&lt;br /&gt;
https://example.com/admin/robots.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
크롤러는 일반적으로 호스트 단위로 루트의 robots.txt를 확인한다.&lt;br /&gt;
&lt;br /&gt;
== 기본 구조 ==&lt;br /&gt;
robots.txt는 하나 이상의 규칙 그룹으로 구성된다.&lt;br /&gt;
&lt;br /&gt;
기본 구조는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: 크롤러명&lt;br /&gt;
Disallow: 차단할 경로&lt;br /&gt;
Allow: 허용할 경로&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
Allow: /admin/help/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예시는 모든 크롤러에게 `/admin/` 경로는 크롤링하지 말라고 요청하되, `/admin/help/` 경로는 허용하는 설정이다.&lt;br /&gt;
&lt;br /&gt;
== 주요 지시어 ==&lt;br /&gt;
&lt;br /&gt;
=== User-agent ===&lt;br /&gt;
User-agent는 규칙을 적용할 크롤러를 지정한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: Googlebot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
모든 크롤러에 적용하려면 별표를 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Disallow ===&lt;br /&gt;
Disallow는 크롤러가 접근하지 말아야 할 경로를 지정한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Disallow: /private/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 규칙은 `/private/`로 시작하는 경로를 크롤링하지 말라는 의미이다.&lt;br /&gt;
&lt;br /&gt;
=== Allow ===&lt;br /&gt;
Allow는 특정 경로의 크롤링을 허용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /images/&lt;br /&gt;
Allow: /images/public/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 설정은 `/images/` 하위 경로를 기본적으로 차단하되, `/images/public/` 경로는 허용한다.&lt;br /&gt;
&lt;br /&gt;
== 확장 지시어 ==&lt;br /&gt;
&lt;br /&gt;
=== Sitemap ===&lt;br /&gt;
Sitemap 지시어는 [[사이트맵]] 파일의 위치를 알려준다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sitemap: https://example.com/sitemap.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사이트맵은 검색엔진이 사이트의 URL 구조를 파악하는 데 도움을 준다.&lt;br /&gt;
&lt;br /&gt;
=== Crawl-delay ===&lt;br /&gt;
Crawl-delay는 일부 크롤러에서 요청 간 지연 시간을 지정하기 위해 사용하는 지시어이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Crawl-delay: 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 모든 크롤러가 Crawl-delay를 지원하는 것은 아니다. 주요 검색엔진이나 크롤러별 지원 여부를 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 설정 예시 ==&lt;br /&gt;
&lt;br /&gt;
=== 전체 허용 ===&lt;br /&gt;
모든 크롤러에게 전체 경로를 허용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 전체 차단 ===&lt;br /&gt;
모든 크롤러에게 전체 사이트를 크롤링하지 말라고 요청한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 특정 경로 차단 ===&lt;br /&gt;
관리자 페이지와 임시 파일 경로를 차단한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
Disallow: /tmp/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 특정 크롤러 차단 ===&lt;br /&gt;
특정 크롤러만 차단한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: BadBot&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 검색엔진별 규칙 분리 ===&lt;br /&gt;
Googlebot과 일반 크롤러에 서로 다른 규칙을 적용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: Googlebot&lt;br /&gt;
Disallow: /test/&lt;br /&gt;
&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 경로 매칭 ==&lt;br /&gt;
robots.txt의 Disallow와 Allow는 URL 전체가 아니라 일반적으로 경로 부분에 적용된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /board/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
차단 대상 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/board/&lt;br /&gt;
/board/list&lt;br /&gt;
/board/view?id=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
차단 대상이 아닌 예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/notice/board/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 와일드카드 ==&lt;br /&gt;
실무에서는 와일드카드와 URL 끝 표시를 사용하기도 한다.&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;
| URL 끝&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /*?sort=&lt;br /&gt;
Disallow: /*.pdf$&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 크롤러마다 지원 방식이 조금씩 다를 수 있으므로 중요한 정책은 주요 검색엔진 문서를 함께 확인하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
== robots.txt와 noindex ==&lt;br /&gt;
robots.txt는 크롤링 제어 수단이고, noindex는 색인 제어 수단이다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! robots.txt&lt;br /&gt;
! noindex&lt;br /&gt;
|-&lt;br /&gt;
| 목적&lt;br /&gt;
| 크롤러 접근 제어 요청&lt;br /&gt;
| 검색 색인 제외 요청&lt;br /&gt;
|-&lt;br /&gt;
| 적용 위치&lt;br /&gt;
| 사이트 루트의 robots.txt 파일&lt;br /&gt;
| HTML 메타 태그 또는 HTTP 헤더&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;
중요한 점은 robots.txt로 차단된 페이지에 noindex 태그가 있어도, 크롤러가 해당 페이지를 읽지 못하면 noindex를 확인할 수 없다는 것이다.&lt;br /&gt;
&lt;br /&gt;
== robots.txt와 접근제어 ==&lt;br /&gt;
robots.txt는 접근제어가 아니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! robots.txt&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;
| User-agent, Disallow, Allow&lt;br /&gt;
| 로그인, 권한검사, 방화벽, ACL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
민감한 데이터나 관리자 페이지를 보호하려면 robots.txt가 아니라 인증, 권한검사, 방화벽, IP 제한 등을 적용해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 보안상 한계 ==&lt;br /&gt;
robots.txt는 누구나 열람할 수 있는 공개 파일이다. 따라서 차단 경로를 적으면 오히려 민감한 경로의 존재를 외부에 알려줄 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /secret-admin/&lt;br /&gt;
Disallow: /backup/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이런 설정은 선의의 크롤러에게는 안내가 되지만, 악의적인 사용자는 해당 경로를 공격 대상으로 삼을 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 robots.txt에는 다음 원칙을 적용하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
* 민감 정보 보호를 robots.txt에 의존하지 않는다.&lt;br /&gt;
* 관리자 페이지는 인증과 접근제어로 보호한다.&lt;br /&gt;
* 백업 파일이나 개인정보 파일은 웹 루트에 두지 않는다.&lt;br /&gt;
* 차단 경로명이 민감한 정보를 드러내지 않도록 주의한다.&lt;br /&gt;
* 악성 봇 차단은 방화벽, WAF, rate limiting 등을 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 검색엔진 색인과의 관계 ==&lt;br /&gt;
robots.txt로 크롤링을 차단해도 URL 자체가 검색 결과에 나타날 수 있다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 외부 사이트에서 해당 URL을 링크하면 검색엔진은 페이지 내용을 크롤링하지 못하더라도 URL을 알 수 있다. 이 경우 검색 결과에 제목이나 내용 없이 URL만 표시될 수 있다.&lt;br /&gt;
&lt;br /&gt;
검색 결과에서 특정 페이지를 제외하려면 상황에 따라 다음 방법을 사용한다.&lt;br /&gt;
&lt;br /&gt;
* noindex 메타 태그&lt;br /&gt;
* X-Robots-Tag HTTP 헤더&lt;br /&gt;
* 검색엔진 콘솔의 URL 제거 도구&lt;br /&gt;
* 인증 기반 접근제어&lt;br /&gt;
* 404 또는 410 응답&lt;br /&gt;
* canonical 태그&lt;br /&gt;
&lt;br /&gt;
== 상태 코드와 처리 ==&lt;br /&gt;
robots.txt 요청에 대한 서버 응답은 크롤러의 처리 방식에 영향을 줄 수 있다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 상황&lt;br /&gt;
! 일반적 의미&lt;br /&gt;
|-&lt;br /&gt;
| 200 OK&lt;br /&gt;
| robots.txt 규칙을 읽고 적용&lt;br /&gt;
|-&lt;br /&gt;
| 404 Not Found&lt;br /&gt;
| 차단 규칙이 없는 것으로 간주 가능&lt;br /&gt;
|-&lt;br /&gt;
| 401 또는 403&lt;br /&gt;
| 크롤러가 접근 제한으로 해석할 수 있음&lt;br /&gt;
|-&lt;br /&gt;
| 5xx 서버 오류&lt;br /&gt;
| 일시적으로 크롤링을 보류하거나 제한할 수 있음&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
운영자는 robots.txt가 의도한 상태 코드로 정상 제공되는지 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 캐싱 ==&lt;br /&gt;
크롤러는 robots.txt를 매 요청마다 다시 가져오지 않고 일정 시간 캐시할 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 robots.txt를 수정해도 모든 크롤러에 즉시 반영되지 않을 수 있다.&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;
== SEO 관점 ==&lt;br /&gt;
SEO에서 robots.txt는 검색엔진의 크롤링 범위를 조정하는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
주요 활용은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 관리자 페이지 크롤링 제한&lt;br /&gt;
* 장바구니나 로그인 페이지 수집 제한&lt;br /&gt;
* 내부 검색 결과 페이지 제한&lt;br /&gt;
* 필터·정렬 URL 등 중복 URL 크롤링 감소&lt;br /&gt;
* 사이트맵 위치 제공&lt;br /&gt;
* 크롤링 예산 관리&lt;br /&gt;
&lt;br /&gt;
하지만 robots.txt를 잘못 설정하면 중요한 페이지가 검색엔진에 수집되지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
== AI 크롤러와 robots.txt ==&lt;br /&gt;
최근에는 검색엔진뿐 아니라 AI 학습용 크롤러도 robots.txt를 참고하는 경우가 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: ExampleAIBot&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 모든 AI 크롤러가 robots.txt를 준수하는 것은 아니므로, 공개하면 안 되는 데이터는 반드시 별도의 접근제어로 보호해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 점검 항목 ==&lt;br /&gt;
robots.txt를 점검할 때는 다음 항목을 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 루트 경로에 robots.txt가 존재하는가&lt;br /&gt;
* HTTP 상태 코드가 정상인가&lt;br /&gt;
* User-agent 그룹이 의도대로 작성되었는가&lt;br /&gt;
* 중요한 페이지가 실수로 차단되지 않았는가&lt;br /&gt;
* 민감한 경로명이 노출되지 않았는가&lt;br /&gt;
* Sitemap 위치가 정확한가&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 민감 경로 노출 ===&lt;br /&gt;
민감 경로를 robots.txt에 직접 적으면 해당 경로의 존재가 외부에 공개된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /customer-data-backup/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== noindex 대체로 사용 ===&lt;br /&gt;
robots.txt는 색인 제외를 보장하는 도구가 아니다. 색인 제외가 목적이라면 noindex나 X-Robots-Tag를 검토해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 관련 개념 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== robots.txt와 사이트맵 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! robots.txt&lt;br /&gt;
! 사이트맵&lt;br /&gt;
|-&lt;br /&gt;
| 목적&lt;br /&gt;
| 크롤링 허용·차단 정책 전달&lt;br /&gt;
| 수집할 URL 목록 안내&lt;br /&gt;
|-&lt;br /&gt;
| 대표 파일&lt;br /&gt;
| robots.txt&lt;br /&gt;
| sitemap.xml&lt;br /&gt;
|-&lt;br /&gt;
| 성격&lt;br /&gt;
| 크롤러 제어 규칙&lt;br /&gt;
| URL 안내 문서&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Disallow와 Allow ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| Disallow&lt;br /&gt;
| 특정 경로를 크롤링하지 말라고 요청&lt;br /&gt;
|-&lt;br /&gt;
| Allow&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;
|-&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;
일반적인 웹사이트의 robots.txt 예시는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
Disallow: /login/&lt;br /&gt;
Disallow: /cart/&lt;br /&gt;
Disallow: /search&lt;br /&gt;
&lt;br /&gt;
Sitemap: https://example.com/sitemap.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예시는 관리자 페이지, 로그인 페이지, 장바구니, 내부 검색 페이지의 크롤링을 제한하고, 사이트맵 위치를 알려준다.&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* robots.txt는 로봇 배제 프로토콜을 구현하는 대표적인 파일이다.&lt;br /&gt;
* robots.txt는 일반적으로 웹사이트 루트 경로에 위치한다.&lt;br /&gt;
* User-agent는 규칙을 적용할 크롤러를 지정한다.&lt;br /&gt;
* Disallow는 크롤러가 접근하지 말아야 할 경로를 지정한다.&lt;br /&gt;
* Allow는 특정 경로 접근 허용을 지정한다.&lt;br /&gt;
* Sitemap 지시어로 사이트맵 위치를 알려줄 수 있다.&lt;br /&gt;
* robots.txt는 보안용 접근제어 수단이 아니다.&lt;br /&gt;
* robots.txt는 크롤링 제어 수단이고, noindex는 색인 제어 수단이다.&lt;br /&gt;
* robots.txt에 민감한 경로를 적으면 오히려 경로가 노출될 수 있다.&lt;br /&gt;
* 모든 크롤러가 robots.txt를 준수하는 것은 아니다.&lt;br /&gt;
* RFC 9309는 Robots Exclusion Protocol을 표준화한 문서이다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[로봇 배제 프로토콜]]&lt;br /&gt;
* [[RFC 9309]]&lt;br /&gt;
* [[웹 크롤러]]&lt;br /&gt;
* [[검색엔진]]&lt;br /&gt;
* [[사이트맵]]&lt;br /&gt;
* [[SEO]]&lt;br /&gt;
* [[noindex]]&lt;br /&gt;
* [[X-Robots-Tag]]&lt;br /&gt;
* [[HTTP]]&lt;br /&gt;
* [[웹 보안]]&lt;br /&gt;
* [[접근제어]]&lt;br /&gt;
* [[봇 차단]]&lt;br /&gt;
&lt;br /&gt;
== 참고 문헌 ==&lt;br /&gt;
* RFC 9309, Robots Exclusion Protocol.&lt;br /&gt;
* Google Search Central, robots.txt 관련 문서.&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=%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4_%EC%84%A4%EC%A0%95&amp;diff=53538</id>
		<title>네트워크 인터페이스 설정</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4_%EC%84%A4%EC%A0%95&amp;diff=53538"/>
		<updated>2026-05-19T06:06:26Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 네트워크 인터페이스 설정은 컴퓨터나 네트워크 장비가 네트워크에 접속하기 위해 네트워크 인터페이스에 IP 주소, 서브넷 마스크, 게이트웨이, DNS 서버 등의 통신 정보를 지정하는 작업이다. 네트워크 관리사 시험에서는 IP 주소 설정, DHCP 설정, 기본 게이트웨이, DNS 설정, 인터페이스 확인 명령어 등을 중심으로 학습한다.  == 개요 == 네트워크 인터페이스...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;네트워크 인터페이스 설정은 컴퓨터나 네트워크 장비가 [[네트워크]]에 접속하기 위해 [[네트워크 인터페이스]]에 IP 주소, 서브넷 마스크, 게이트웨이, DNS 서버 등의 통신 정보를 지정하는 작업이다. [[네트워크 관리사]] 시험에서는 IP 주소 설정, DHCP 설정, 기본 게이트웨이, DNS 설정, 인터페이스 확인 명령어 등을 중심으로 학습한다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
네트워크 인터페이스는 시스템이 네트워크와 통신하기 위한 연결 지점이다. 유선 랜카드, 무선 랜카드, 가상 네트워크 어댑터, 루프백 인터페이스 등이 이에 해당한다.&lt;br /&gt;
&lt;br /&gt;
네트워크 인터페이스 설정은 해당 장치가 네트워크에서 올바르게 통신할 수 있도록 주소 정보를 부여하고 통신 경로를 지정하는 과정이다. 설정이 잘못되면 같은 네트워크의 장비와 통신하지 못하거나, 인터넷 접속이 되지 않거나, DNS 이름 해석이 실패할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 주요 설정 항목 ==&lt;br /&gt;
네트워크 인터페이스 설정에서 주로 다루는 항목은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[IP 주소]]&lt;br /&gt;
* [[서브넷 마스크]]&lt;br /&gt;
* [[기본 게이트웨이]]&lt;br /&gt;
* [[DNS 서버]]&lt;br /&gt;
* [[MAC 주소]]&lt;br /&gt;
* [[DHCP]]&lt;br /&gt;
* [[정적 IP 주소]]&lt;br /&gt;
* [[라우팅]]&lt;br /&gt;
* [[네트워크 인터페이스 카드]]&lt;br /&gt;
&lt;br /&gt;
== IP 주소 ==&lt;br /&gt;
[[IP 주소]]는 네트워크에서 장치를 식별하기 위한 주소이다.&lt;br /&gt;
&lt;br /&gt;
IPv4 환경에서는 일반적으로 다음과 같은 형식으로 표현한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IP 주소는 네트워크부와 호스트부로 구성되며, 서브넷 마스크와 함께 해석된다.&lt;br /&gt;
&lt;br /&gt;
== 서브넷 마스크 ==&lt;br /&gt;
[[서브넷 마스크]]는 IP 주소에서 네트워크부와 호스트부를 구분하기 위한 값이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
IP 주소:        192.168.0.10&lt;br /&gt;
서브넷 마스크: 255.255.255.0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 설정에서는 `192.168.0.0/24` 네트워크에 속한다고 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 기본 게이트웨이 ==&lt;br /&gt;
[[기본 게이트웨이]]는 다른 네트워크로 패킷을 보낼 때 사용하는 출구 역할을 하는 장비이다. 일반적으로 가정이나 사무실에서는 공유기 또는 라우터의 IP 주소가 기본 게이트웨이가 된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
기본 게이트웨이: 192.168.0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
같은 네트워크 내부 통신은 기본 게이트웨이 없이도 가능하지만, 외부 네트워크나 인터넷으로 통신하려면 기본 게이트웨이 설정이 필요하다.&lt;br /&gt;
&lt;br /&gt;
== DNS 서버 ==&lt;br /&gt;
[[DNS 서버]]는 도메인 이름을 IP 주소로 변환하는 역할을 한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 사용자가 웹 브라우저에 다음 주소를 입력하면,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
www.example.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DNS 서버는 해당 도메인 이름에 대응하는 IP 주소를 찾아준다.&lt;br /&gt;
&lt;br /&gt;
DNS 설정이 잘못되면 IP 주소로는 통신이 가능하지만 도메인 이름으로 접속이 되지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
== MAC 주소 ==&lt;br /&gt;
[[MAC 주소]]는 네트워크 인터페이스 카드에 부여된 하드웨어 주소이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
00:1A:2B:3C:4D:5E&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MAC 주소는 주로 같은 LAN 내부에서 프레임 전달에 사용된다. IP 주소가 논리 주소라면, MAC 주소는 데이터 링크 계층에서 사용하는 물리 주소에 가깝다.&lt;br /&gt;
&lt;br /&gt;
== DHCP 설정 ==&lt;br /&gt;
[[DHCP]]는 네트워크 장치에 IP 주소, 서브넷 마스크, 기본 게이트웨이, DNS 서버 등의 정보를 자동으로 할당하는 프로토콜이다.&lt;br /&gt;
&lt;br /&gt;
DHCP를 사용하면 사용자가 직접 IP 정보를 입력하지 않아도 네트워크에 접속할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== DHCP의 장점 ===&lt;br /&gt;
* IP 주소 자동 할당&lt;br /&gt;
* 설정 오류 감소&lt;br /&gt;
* 중앙 집중 관리 가능&lt;br /&gt;
* 이동 단말 관리에 유리&lt;br /&gt;
* IP 주소 충돌 가능성 감소&lt;br /&gt;
&lt;br /&gt;
=== DHCP로 할당되는 주요 정보 ===&lt;br /&gt;
* IP 주소&lt;br /&gt;
* 서브넷 마스크&lt;br /&gt;
* 기본 게이트웨이&lt;br /&gt;
* DNS 서버&lt;br /&gt;
* 임대 시간&lt;br /&gt;
* 도메인 정보&lt;br /&gt;
&lt;br /&gt;
== 정적 IP 설정 ==&lt;br /&gt;
[[정적 IP 주소]]는 사용자가 직접 IP 주소와 관련 정보를 설정하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
정적 IP 설정은 다음과 같은 경우에 사용된다.&lt;br /&gt;
&lt;br /&gt;
* 서버&lt;br /&gt;
* 네트워크 프린터&lt;br /&gt;
* 라우터&lt;br /&gt;
* 방화벽&lt;br /&gt;
* NAS&lt;br /&gt;
* 고정 주소가 필요한 장비&lt;br /&gt;
&lt;br /&gt;
정적 IP 설정 시에는 IP 주소 충돌이 발생하지 않도록 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 동적 IP와 정적 IP 비교 ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 동적 IP&lt;br /&gt;
! 정적 IP&lt;br /&gt;
|-&lt;br /&gt;
| 설정 방식&lt;br /&gt;
| DHCP 서버가 자동 할당&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;
| 일반 PC, 모바일 기기&lt;br /&gt;
| 서버, 프린터, 네트워크 장비&lt;br /&gt;
|-&lt;br /&gt;
| 주의점&lt;br /&gt;
| DHCP 서버 필요&lt;br /&gt;
| IP 충돌 방지 필요&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;
* IP 주소 할당 여부&lt;br /&gt;
* 서브넷 마스크 확인&lt;br /&gt;
* 기본 게이트웨이 확인&lt;br /&gt;
* DNS 서버 확인&lt;br /&gt;
* MAC 주소 확인&lt;br /&gt;
* 링크 연결 상태&lt;br /&gt;
* 송수신 패킷 수&lt;br /&gt;
* 오류 패킷 여부&lt;br /&gt;
&lt;br /&gt;
== Windows 명령어 ==&lt;br /&gt;
Windows에서는 다음 명령어를 사용하여 네트워크 인터페이스 정보를 확인하거나 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== ipconfig ===&lt;br /&gt;
현재 IP 설정 정보를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
ipconfig&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
상세 정보를 확인하려면 다음 명령어를 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
ipconfig /all&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DHCP 갱신 ===&lt;br /&gt;
IP 주소를 반납하고 다시 할당받을 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
ipconfig /release&lt;br /&gt;
ipconfig /renew&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS 캐시 확인 및 삭제 ===&lt;br /&gt;
DNS 캐시를 삭제한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
ipconfig /flushdns&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ping ===&lt;br /&gt;
대상과의 통신 가능 여부를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
ping 8.8.8.8&lt;br /&gt;
ping www.example.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== tracert ===&lt;br /&gt;
목적지까지의 경로를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
tracert www.example.com&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== route print ===&lt;br /&gt;
라우팅 테이블을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
route print&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== netsh ===&lt;br /&gt;
네트워크 설정을 명령줄에서 관리할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cmd&amp;quot;&amp;gt;&lt;br /&gt;
netsh interface ip show config&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux 명령어 ==&lt;br /&gt;
Linux에서는 배포판과 네트워크 관리 방식에 따라 명령어와 설정 파일이 다를 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== ip addr ===&lt;br /&gt;
인터페이스의 IP 주소 정보를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip addr&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
또는 축약형으로 다음과 같이 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip a&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== ip link ===&lt;br /&gt;
네트워크 인터페이스의 링크 상태를 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip link&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 인터페이스 활성화 ===&lt;br /&gt;
특정 인터페이스를 활성화한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set eth0 up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 인터페이스 비활성화 ===&lt;br /&gt;
특정 인터페이스를 비활성화한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip link set eth0 down&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 임시 IP 주소 설정 ===&lt;br /&gt;
다음 명령어로 임시 IP 주소를 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip addr add 192.168.0.10/24 dev eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 설정은 시스템 재부팅 후 사라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 기본 게이트웨이 설정 ===&lt;br /&gt;
기본 경로를 추가한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo ip route add default via 192.168.0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 라우팅 테이블 확인 ===&lt;br /&gt;
라우팅 테이블을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ip route&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS 설정 확인 ===&lt;br /&gt;
DNS 설정은 환경에 따라 다음 파일이나 명령으로 확인할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat /etc/resolv.conf&lt;br /&gt;
resolvectl status&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ifconfig ==&lt;br /&gt;
[[ifconfig]]는 과거 Unix/Linux 환경에서 네트워크 인터페이스 설정과 확인에 많이 사용된 명령어이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ifconfig&lt;br /&gt;
ifconfig eth0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
현재 많은 Linux 배포판에서는 `ip` 명령어 사용이 권장되지만, 시험이나 구형 시스템 설명에서는 ifconfig도 자주 등장한다.&lt;br /&gt;
&lt;br /&gt;
== NetworkManager ==&lt;br /&gt;
NetworkManager는 Linux에서 네트워크 연결을 관리하는 서비스이다.&lt;br /&gt;
&lt;br /&gt;
대표 명령어는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
nmcli device status&lt;br /&gt;
nmcli connection show&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NetworkManager를 사용하는 환경에서는 직접 설정 파일을 수정하기보다 `nmcli` 또는 그래픽 네트워크 설정 도구를 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 설정 파일 ==&lt;br /&gt;
Linux의 네트워크 설정 파일은 배포판과 버전에 따라 다르다.&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;
| Debian/Ubuntu&lt;br /&gt;
| /etc/netplan/*.yaml, /etc/network/interfaces&lt;br /&gt;
|-&lt;br /&gt;
| Red Hat/CentOS 계열&lt;br /&gt;
| /etc/sysconfig/network-scripts/ifcfg-*&lt;br /&gt;
|-&lt;br /&gt;
| systemd-networkd&lt;br /&gt;
| /etc/systemd/network/*.network&lt;br /&gt;
|-&lt;br /&gt;
| NetworkManager&lt;br /&gt;
| nmcli, nmtui, 연결 프로파일&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
최근 배포판에서는 Netplan, NetworkManager, systemd-networkd 등 다양한 방식이 사용된다.&lt;br /&gt;
&lt;br /&gt;
== IPv4 설정 예 ==&lt;br /&gt;
정적 IPv4 설정에 필요한 기본 항목은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
IP 주소: 192.168.0.10&lt;br /&gt;
서브넷 마스크: 255.255.255.0&lt;br /&gt;
기본 게이트웨이: 192.168.0.1&lt;br /&gt;
DNS 서버: 8.8.8.8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
CIDR 표기법으로는 다음과 같이 표현할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
192.168.0.10/24&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== IPv6 설정 ==&lt;br /&gt;
[[IPv6]] 환경에서는 IPv4와 다른 주소 체계를 사용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
2001:db8::10/64&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IPv6에서는 주소 자동 설정, 링크 로컬 주소, 라우터 광고 등이 중요하다.&lt;br /&gt;
&lt;br /&gt;
주요 개념은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[IPv6 주소]]&lt;br /&gt;
* [[링크 로컬 주소]]&lt;br /&gt;
* [[SLAAC]]&lt;br /&gt;
* [[DHCPv6]]&lt;br /&gt;
* [[라우터 광고]]&lt;br /&gt;
&lt;br /&gt;
== 루프백 인터페이스 ==&lt;br /&gt;
[[루프백 인터페이스]]는 자기 자신과 통신하기 위한 가상 인터페이스이다.&lt;br /&gt;
&lt;br /&gt;
대표 주소는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
127.0.0.1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Linux에서는 일반적으로 `lo`라는 이름으로 표시된다.&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;
# IP 주소 할당 여부 확인&lt;br /&gt;
# 서브넷 마스크 확인&lt;br /&gt;
# 기본 게이트웨이 확인&lt;br /&gt;
# DNS 서버 확인&lt;br /&gt;
# 같은 네트워크 내 장비와 ping 테스트&lt;br /&gt;
# 기본 게이트웨이로 ping 테스트&lt;br /&gt;
# 외부 IP로 ping 테스트&lt;br /&gt;
# 도메인 이름으로 ping 테스트&lt;br /&gt;
# 라우팅 테이블 확인&lt;br /&gt;
# 방화벽 설정 확인&lt;br /&gt;
&lt;br /&gt;
== 장애 사례 ==&lt;br /&gt;
=== IP 주소 미할당 ===&lt;br /&gt;
인터페이스가 활성화되어 있어도 IP 주소가 할당되지 않으면 정상 통신이 어렵다.&lt;br /&gt;
&lt;br /&gt;
원인:&lt;br /&gt;
* DHCP 서버 장애&lt;br /&gt;
* 케이블 연결 문제&lt;br /&gt;
* 무선랜 인증 실패&lt;br /&gt;
* 인터페이스 비활성화&lt;br /&gt;
* 드라이버 문제&lt;br /&gt;
&lt;br /&gt;
=== IP 주소 충돌 ===&lt;br /&gt;
같은 네트워크에서 두 장치가 같은 IP 주소를 사용하면 통신 장애가 발생할 수 있다.&lt;br /&gt;
&lt;br /&gt;
정적 IP 설정 시 특히 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
=== 기본 게이트웨이 오류 ===&lt;br /&gt;
기본 게이트웨이가 잘못 설정되면 같은 네트워크 내부 통신은 가능하지만 외부 네트워크로 나갈 수 없다.&lt;br /&gt;
&lt;br /&gt;
=== DNS 오류 ===&lt;br /&gt;
DNS 서버 설정이 잘못되면 IP 주소로는 접속이 되지만 도메인 이름으로는 접속할 수 없다.&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;
! Windows&lt;br /&gt;
! Linux&lt;br /&gt;
|-&lt;br /&gt;
| IP 설정 확인&lt;br /&gt;
| ipconfig /all&lt;br /&gt;
| ip addr&lt;br /&gt;
|-&lt;br /&gt;
| 연결 확인&lt;br /&gt;
| ping&lt;br /&gt;
| ping&lt;br /&gt;
|-&lt;br /&gt;
| 경로 확인&lt;br /&gt;
| tracert&lt;br /&gt;
| traceroute 또는 tracepath&lt;br /&gt;
|-&lt;br /&gt;
| 라우팅 테이블 확인&lt;br /&gt;
| route print&lt;br /&gt;
| ip route&lt;br /&gt;
|-&lt;br /&gt;
| DNS 확인&lt;br /&gt;
| nslookup&lt;br /&gt;
| nslookup, dig&lt;br /&gt;
|-&lt;br /&gt;
| 인터페이스 상태 확인&lt;br /&gt;
| ipconfig, netsh&lt;br /&gt;
| ip link, nmcli&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;
* 공인 IP 노출 여부 확인&lt;br /&gt;
* 관리용 인터페이스 접근 제한&lt;br /&gt;
* 무선 인터페이스 보안 설정&lt;br /&gt;
* MAC 주소 기반 접근제어의 한계 이해&lt;br /&gt;
* 방화벽 정책 확인&lt;br /&gt;
* IP 충돌 및 ARP 스푸핑 가능성 점검&lt;br /&gt;
* 네트워크 분리 적용&lt;br /&gt;
&lt;br /&gt;
== 자격시험 학습 관점 ==&lt;br /&gt;
네트워크 관리사 시험에서는 네트워크 인터페이스 설정을 실무 명령어와 기본 네트워크 개념을 연결하여 학습하는 것이 중요하다.&lt;br /&gt;
&lt;br /&gt;
특히 다음 항목을 정리해야 한다.&lt;br /&gt;
&lt;br /&gt;
* IP 주소, 서브넷 마스크, 기본 게이트웨이의 역할&lt;br /&gt;
* DHCP와 정적 IP의 차이&lt;br /&gt;
* DNS 서버 설정의 의미&lt;br /&gt;
* Windows의 ipconfig 명령어&lt;br /&gt;
* Linux의 ifconfig, ip, route 계열 명령어&lt;br /&gt;
* ping, tracert, traceroute를 이용한 장애 점검&lt;br /&gt;
* 루프백 주소의 의미&lt;br /&gt;
* 기본 게이트웨이 오류와 DNS 오류의 증상 차이&lt;br /&gt;
* 라우팅 테이블 확인 방법&lt;br /&gt;
* 인터페이스 활성화와 비활성화&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 네트워크 인터페이스 설정은 장치가 네트워크에 접속하기 위해 IP 주소, 서브넷 마스크, 게이트웨이, DNS 등을 지정하는 작업이다.&lt;br /&gt;
* IP 주소는 네트워크에서 장치를 식별하는 논리 주소이다.&lt;br /&gt;
* 서브넷 마스크는 IP 주소의 네트워크부와 호스트부를 구분한다.&lt;br /&gt;
* 기본 게이트웨이는 다른 네트워크로 나가기 위한 출구 역할을 한다.&lt;br /&gt;
* DNS 서버는 도메인 이름을 IP 주소로 변환한다.&lt;br /&gt;
* DHCP는 IP 주소와 네트워크 설정 정보를 자동으로 할당한다.&lt;br /&gt;
* 정적 IP는 사용자가 직접 설정하는 IP 주소이다.&lt;br /&gt;
* Windows에서는 `ipconfig /all`로 상세 네트워크 설정을 확인할 수 있다.&lt;br /&gt;
* Linux에서는 `ip addr`, `ip link`, `ip route` 등으로 인터페이스와 라우팅 정보를 확인할 수 있다.&lt;br /&gt;
* `127.0.0.1`은 루프백 주소이다.&lt;br /&gt;
* IP로는 접속되지만 도메인으로 접속되지 않으면 DNS 문제를 의심할 수 있다.&lt;br /&gt;
* 같은 네트워크는 통신되지만 외부 네트워크가 안 되면 기본 게이트웨이 문제를 의심할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[네트워크]]&lt;br /&gt;
* [[네트워크 관리]]&lt;br /&gt;
* [[네트워크 인터페이스]]&lt;br /&gt;
* [[네트워크 인터페이스 카드]]&lt;br /&gt;
* [[IP 주소]]&lt;br /&gt;
* [[IPv4]]&lt;br /&gt;
* [[IPv6]]&lt;br /&gt;
* [[서브넷 마스크]]&lt;br /&gt;
* [[기본 게이트웨이]]&lt;br /&gt;
* [[DNS]]&lt;br /&gt;
* [[DHCP]]&lt;br /&gt;
* [[라우팅]]&lt;br /&gt;
* [[루프백 주소]]&lt;br /&gt;
* [[ping]]&lt;br /&gt;
* [[traceroute]]&lt;br /&gt;
* [[ifconfig]]&lt;br /&gt;
* [[ip 명령어]]&lt;br /&gt;
* [[NetworkManager]]&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=%EB%A1%9C%EB%B4%87_%EB%B0%B0%EC%A0%9C_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C&amp;diff=53537</id>
		<title>로봇 배제 프로토콜</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%A1%9C%EB%B4%87_%EB%B0%B0%EC%A0%9C_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C&amp;diff=53537"/>
		<updated>2026-05-19T06:04:30Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 로봇 배제 프로토콜(Robots Exclusion Protocol, REP)은 웹사이트 운영자가 자동화된 크롤러에게 특정 경로나 자원에 접근하지 말 것을 요청하기 위한 규칙이다. 일반적으로 웹사이트 루트 경로에 위치한 robots.txt 파일을 통해 적용된다.  == 개요 == 로봇 배제 프로토콜은 웹 크롤러가 웹사이트를 방문할 때 어떤 경로를 수집해도 되는지, 어떤 경로를 수집하지 말아야 하...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;로봇 배제 프로토콜(Robots Exclusion Protocol, REP)은 웹사이트 운영자가 자동화된 크롤러에게 특정 경로나 자원에 접근하지 말 것을 요청하기 위한 규칙이다. 일반적으로 웹사이트 루트 경로에 위치한 [[robots.txt]] 파일을 통해 적용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
로봇 배제 프로토콜은 [[웹 크롤러]]가 웹사이트를 방문할 때 어떤 경로를 수집해도 되는지, 어떤 경로를 수집하지 말아야 하는지를 안내하는 프로토콜이다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 사이트 운영자는 다음과 같은 robots.txt 파일을 통해 모든 크롤러가 특정 관리자 경로를 크롤링하지 않도록 요청할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
로봇 배제 프로토콜은 검색엔진, 아카이브, AI 학습용 크롤러, 가격 수집 봇 등 자동화된 클라이언트가 웹사이트를 무분별하게 수집하는 것을 완화하기 위해 사용된다.&lt;br /&gt;
&lt;br /&gt;
다만 이 프로토콜은 강제적 접근제어 수단이 아니라, 크롤러가 자발적으로 준수해야 하는 규칙이다. 악의적인 크롤러나 규칙을 무시하는 봇은 robots.txt를 따르지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 표준 ==&lt;br /&gt;
로봇 배제 프로토콜의 공식 표준 문서는 [[RFC 9309]]이다.&lt;br /&gt;
&lt;br /&gt;
RFC 9309의 제목은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Robots Exclusion Protocol&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
즉, robots.txt와 관련된 표준명은 &amp;quot;Robots Exclusion Protocol&amp;quot;이다. 한국어로는 일반적으로 &amp;quot;로봇 배제 프로토콜&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;
== robots.txt ==&lt;br /&gt;
[[robots.txt]]는 로봇 배제 프로토콜을 구현하기 위해 사용하는 텍스트 파일이다.&lt;br /&gt;
&lt;br /&gt;
일반적으로 다음 위치에 둔다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
https://example.com/robots.txt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
크롤러는 웹사이트를 크롤링하기 전에 robots.txt 파일을 확인하고, 자신에게 적용되는 규칙을 해석한 뒤 크롤링 여부를 결정한다.&lt;br /&gt;
&lt;br /&gt;
== 기본 구조 ==&lt;br /&gt;
robots.txt 파일은 하나 이상의 그룹으로 구성된다.&lt;br /&gt;
&lt;br /&gt;
각 그룹은 보통 다음과 같은 구조를 가진다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: 크롤러명&lt;br /&gt;
Disallow: 차단할 경로&lt;br /&gt;
Allow: 허용할 경로&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /private/&lt;br /&gt;
Allow: /private/public.html&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 주요 지시어 ==&lt;br /&gt;
&lt;br /&gt;
=== User-agent ===&lt;br /&gt;
User-agent는 규칙을 적용할 크롤러를 지정한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: Googlebot&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
모든 크롤러에 적용하려면 별표를 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Disallow ===&lt;br /&gt;
Disallow는 크롤러가 접근하지 말아야 할 경로를 지정한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 규칙은 `/admin/`으로 시작하는 경로를 크롤링하지 말라는 의미이다.&lt;br /&gt;
&lt;br /&gt;
=== Allow ===&lt;br /&gt;
Allow는 특정 경로에 대한 접근을 허용한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /images/&lt;br /&gt;
Allow: /images/public/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
위 예시는 `/images/` 전체는 차단하되, `/images/public/` 경로는 허용하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
== 확장 지시어 ==&lt;br /&gt;
일부 지시어는 RFC 9309의 핵심 규칙은 아니지만, 검색엔진이나 크롤러 실무에서 널리 사용된다.&lt;br /&gt;
&lt;br /&gt;
=== Sitemap ===&lt;br /&gt;
Sitemap 지시어는 [[사이트맵]] 파일의 위치를 알려준다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Sitemap: https://example.com/sitemap.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사이트맵은 검색엔진이 사이트의 URL 구조를 파악하는 데 도움을 준다.&lt;br /&gt;
&lt;br /&gt;
=== Crawl-delay ===&lt;br /&gt;
Crawl-delay는 크롤러 요청 간 지연 시간을 지정하기 위해 일부 크롤러에서 사용하는 지시어이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Crawl-delay: 10&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 모든 검색엔진이 Crawl-delay를 지원하는 것은 아니므로, 서버 부하 제어는 웹 서버 설정, 방화벽, rate limiting, 검색엔진별 크롤링 설정 등을 함께 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 예시 ==&lt;br /&gt;
&lt;br /&gt;
=== 전체 허용 ===&lt;br /&gt;
모든 크롤러의 모든 경로 접근을 허용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 전체 차단 ===&lt;br /&gt;
모든 크롤러의 모든 경로 접근을 차단 요청한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 특정 경로 차단 ===&lt;br /&gt;
모든 크롤러에게 `/admin/`과 `/tmp/` 경로를 크롤링하지 말라고 요청한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
Disallow: /tmp/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 특정 크롤러 차단 ===&lt;br /&gt;
특정 크롤러만 차단한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: BadBot&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 특정 크롤러와 일반 크롤러 구분 ===&lt;br /&gt;
특정 크롤러에는 별도 규칙을 적용하고, 나머지 크롤러에는 일반 규칙을 적용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: Googlebot&lt;br /&gt;
Disallow: /test/&lt;br /&gt;
&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 동작 방식 ==&lt;br /&gt;
크롤러는 일반적으로 다음 순서로 동작한다.&lt;br /&gt;
&lt;br /&gt;
# 대상 사이트의 robots.txt 파일을 요청한다.&lt;br /&gt;
# robots.txt 파일의 내용을 해석한다.&lt;br /&gt;
# 자신의 User-agent에 해당하는 규칙을 찾는다.&lt;br /&gt;
# 요청하려는 URL 경로가 Allow 또는 Disallow 규칙에 해당하는지 확인한다.&lt;br /&gt;
# 허용된 경로만 크롤링한다.&lt;br /&gt;
&lt;br /&gt;
== 경로 매칭 ==&lt;br /&gt;
robots.txt의 Allow와 Disallow는 URL 전체가 아니라 보통 경로 부분에 적용된다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 다음 규칙이 있다고 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /board/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 경우 다음 경로는 차단 대상이 된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/board/&lt;br /&gt;
/board/list&lt;br /&gt;
/board/view?id=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
그러나 다음 경로는 일반적으로 다른 경로로 취급된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
/notice/board/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 와일드카드 ==&lt;br /&gt;
실무에서는 별표와 달러 기호를 이용한 패턴 매칭이 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /*?sort=&lt;br /&gt;
Disallow: /*.pdf$&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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;
|-&lt;br /&gt;
| *&lt;br /&gt;
| 임의의 문자열&lt;br /&gt;
|-&lt;br /&gt;
| $&lt;br /&gt;
| URL 끝&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
다만 크롤러별로 세부 지원 범위가 다를 수 있으므로, 중요한 크롤링 정책은 검색엔진별 문서를 함께 확인하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
== 상태 코드 처리 ==&lt;br /&gt;
robots.txt 파일 요청에 대한 서버 응답에 따라 크롤러의 해석이 달라질 수 있다.&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;
| robots.txt가 정상적으로 제공됨&lt;br /&gt;
| 파일의 규칙을 해석하여 적용&lt;br /&gt;
|-&lt;br /&gt;
| robots.txt가 없음&lt;br /&gt;
| 차단 규칙이 없는 것으로 보고 크롤링 가능&lt;br /&gt;
|-&lt;br /&gt;
| 서버 오류로 robots.txt에 접근할 수 없음&lt;br /&gt;
| 일시적으로 크롤링을 보류하거나 제한적으로 해석 가능&lt;br /&gt;
|-&lt;br /&gt;
| robots.txt 파일 파싱 오류&lt;br /&gt;
| 해석 가능한 규칙만 적용 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
운영자는 robots.txt가 의도한 상태 코드로 정상 제공되는지 확인해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 캐싱 ==&lt;br /&gt;
크롤러는 robots.txt 파일을 매 요청마다 다시 가져오지 않고 일정 시간 캐시할 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 robots.txt를 수정해도 모든 크롤러에 즉시 반영되지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
운영 관점에서는 다음을 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
* robots.txt 변경 후 반영 지연 가능성&lt;br /&gt;
* 검색엔진별 캐시 정책 차이&lt;br /&gt;
* 테스트 도구를 통한 적용 여부 확인&lt;br /&gt;
* 검색엔진 콘솔에서 robots.txt 상태 확인&lt;br /&gt;
&lt;br /&gt;
== 보안상 한계 ==&lt;br /&gt;
로봇 배제 프로토콜은 보안 기능이 아니다.&lt;br /&gt;
&lt;br /&gt;
robots.txt는 누구나 볼 수 있는 공개 파일이며, 차단 경로를 명시하면 오히려 민감한 경로의 존재를 알려줄 수 있다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 다음과 같은 규칙은 `/secret-admin/`이라는 경로의 존재를 외부에 노출한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /secret-admin/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
민감한 정보나 관리자 페이지를 보호하려면 robots.txt가 아니라 다음과 같은 보안 조치를 적용해야 한다.&lt;br /&gt;
&lt;br /&gt;
* 인증&lt;br /&gt;
* 접근제어&lt;br /&gt;
* 방화벽&lt;br /&gt;
* IP 제한&lt;br /&gt;
* 세션 관리&lt;br /&gt;
* 권한 검증&lt;br /&gt;
* 서버 설정&lt;br /&gt;
* 비공개 네트워크 분리&lt;br /&gt;
&lt;br /&gt;
== 검색엔진 색인과의 관계 ==&lt;br /&gt;
robots.txt는 크롤링을 제어하는 수단이지, 검색 결과 노출을 완전히 통제하는 수단은 아니다.&lt;br /&gt;
&lt;br /&gt;
어떤 URL이 robots.txt로 크롤링 차단되어 있더라도, 외부 링크 등을 통해 URL 자체가 검색엔진에 알려지면 검색 결과에 URL만 노출될 수 있다.&lt;br /&gt;
&lt;br /&gt;
검색 결과에서 페이지 내용을 제거하거나 색인을 막고 싶다면 다음 방법을 상황에 맞게 사용해야 한다.&lt;br /&gt;
&lt;br /&gt;
* noindex 메타 태그&lt;br /&gt;
* X-Robots-Tag HTTP 헤더&lt;br /&gt;
* 검색엔진 콘솔의 URL 제거 도구&lt;br /&gt;
* 인증 기반 접근제어&lt;br /&gt;
* 404 또는 410 응답&lt;br /&gt;
* canonical 태그&lt;br /&gt;
&lt;br /&gt;
== robots.txt와 noindex의 차이 ==&lt;br /&gt;
robots.txt와 noindex는 혼동하기 쉽지만 목적이 다르다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! robots.txt&lt;br /&gt;
! noindex&lt;br /&gt;
|-&lt;br /&gt;
| 목적&lt;br /&gt;
| 크롤링 제어&lt;br /&gt;
| 색인 제어&lt;br /&gt;
|-&lt;br /&gt;
| 적용 위치&lt;br /&gt;
| 사이트 루트의 robots.txt 파일&lt;br /&gt;
| HTML 메타 태그 또는 HTTP 헤더&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;
주의할 점은 robots.txt로 차단된 페이지에 noindex 태그가 있어도, 크롤러가 해당 페이지를 읽지 못하면 noindex를 확인할 수 없다는 점이다.&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;
! 접근제어&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;
| robots.txt&lt;br /&gt;
| 로그인, 권한검사, 방화벽, ACL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SEO 관점 ==&lt;br /&gt;
SEO에서 robots.txt는 검색엔진 크롤링 자원을 관리하는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
대표적인 활용은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 관리자 페이지 크롤링 방지&lt;br /&gt;
* 검색 결과에 필요 없는 필터 페이지 제한&lt;br /&gt;
* 중복 URL 크롤링 감소&lt;br /&gt;
* 내부 검색 결과 페이지 크롤링 제한&lt;br /&gt;
* 사이트맵 위치 제공&lt;br /&gt;
* 크롤링 예산 관리&lt;br /&gt;
&lt;br /&gt;
다만 잘못 설정하면 중요한 페이지가 검색엔진에 수집되지 않을 수 있으므로 주의해야 한다.&lt;br /&gt;
&lt;br /&gt;
== AI 크롤러와의 관계 ==&lt;br /&gt;
최근에는 검색엔진 크롤러뿐 아니라 AI 학습용 크롤러도 robots.txt를 참고하는 경우가 있다.&lt;br /&gt;
&lt;br /&gt;
운영자는 특정 AI 크롤러의 User-agent를 확인하여 허용 또는 차단 규칙을 작성할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: ExampleAIBot&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 모든 AI 크롤러가 robots.txt를 준수하는 것은 아니므로, 중요한 데이터 보호는 별도의 접근제어와 법적·계약적 조치를 함께 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 잘못된 설정 예시 ==&lt;br /&gt;
&lt;br /&gt;
=== 민감 경로 노출 ===&lt;br /&gt;
다음 설정은 민감한 경로 이름을 외부에 노출할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /private-customer-data/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
민감 데이터는 robots.txt가 아니라 인증과 접근제어로 보호해야 한다.&lt;br /&gt;
&lt;br /&gt;
=== 전체 사이트 차단 ===&lt;br /&gt;
다음 설정은 모든 크롤러에게 전체 사이트 크롤링을 차단 요청한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
개발 서버에서 사용하던 설정을 운영 서버에 그대로 배포하면 검색 노출이 급감할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== noindex 대체로 사용 ===&lt;br /&gt;
robots.txt는 색인 제거용 도구가 아니므로, 검색 노출을 막으려면 noindex나 접근제어를 함께 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 점검 방법 ==&lt;br /&gt;
robots.txt를 점검할 때는 다음 항목을 확인한다.&lt;br /&gt;
&lt;br /&gt;
* 루트 경로에 robots.txt가 존재하는가&lt;br /&gt;
* HTTP 상태 코드가 정상인가&lt;br /&gt;
* User-agent 그룹이 의도대로 작성되었는가&lt;br /&gt;
* 중요한 페이지가 실수로 차단되지 않았는가&lt;br /&gt;
* 민감한 경로명이 불필요하게 노출되지 않았는가&lt;br /&gt;
* 사이트맵 경로가 정확한가&lt;br /&gt;
* 검색엔진 콘솔에서 차단 여부가 의도와 일치하는가&lt;br /&gt;
* 개발 환경의 robots.txt가 운영 환경에 잘못 반영되지 않았는가&lt;br /&gt;
* AI 크롤러 차단 정책이 필요한가&lt;br /&gt;
* 서버 로그에서 크롤러가 규칙을 준수하는지 확인했는가&lt;br /&gt;
&lt;br /&gt;
== 예시 구성 ==&lt;br /&gt;
일반적인 웹사이트의 robots.txt 예시는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
User-agent: *&lt;br /&gt;
Disallow: /admin/&lt;br /&gt;
Disallow: /login/&lt;br /&gt;
Disallow: /cart/&lt;br /&gt;
Disallow: /search&lt;br /&gt;
Allow: /&lt;br /&gt;
&lt;br /&gt;
Sitemap: https://example.com/sitemap.xml&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
다만 사이트 구조와 검색 전략에 따라 적절한 설정은 달라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 관련 개념 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== robots.txt와 사이트맵 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! robots.txt&lt;br /&gt;
! 사이트맵&lt;br /&gt;
|-&lt;br /&gt;
| 목적&lt;br /&gt;
| 크롤링 제한 또는 허용 정책 전달&lt;br /&gt;
| 크롤러에게 수집할 URL 목록 제공&lt;br /&gt;
|-&lt;br /&gt;
| 대표 파일&lt;br /&gt;
| robots.txt&lt;br /&gt;
| sitemap.xml&lt;br /&gt;
|-&lt;br /&gt;
| 성격&lt;br /&gt;
| 크롤러 제어 규칙&lt;br /&gt;
| URL 안내 문서&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Disallow와 noindex ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! Disallow&lt;br /&gt;
! noindex&lt;br /&gt;
|-&lt;br /&gt;
| 위치&lt;br /&gt;
| robots.txt&lt;br /&gt;
| HTML 메타 태그 또는 HTTP 헤더&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;
{| 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;
* 민감한 파일은 robots.txt로 숨기지 않는다.&lt;br /&gt;
* 관리자 페이지는 인증과 접근제어로 보호한다.&lt;br /&gt;
* 개인정보 파일이나 백업 파일은 웹 루트에 두지 않는다.&lt;br /&gt;
* robots.txt에 민감한 경로명을 불필요하게 노출하지 않는다.&lt;br /&gt;
* 악성 봇 차단은 방화벽, WAF, rate limiting, 봇 차단 솔루션으로 수행한다.&lt;br /&gt;
* 크롤링 정책과 실제 접근제어 정책을 구분한다.&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 로봇 배제 프로토콜의 공식 영문명은 Robots Exclusion Protocol이다.&lt;br /&gt;
* robots.txt는 로봇 배제 프로토콜을 구현하는 대표 파일이다.&lt;br /&gt;
* robots.txt는 웹사이트 루트 경로에 위치한다.&lt;br /&gt;
* User-agent는 규칙을 적용할 크롤러를 지정한다.&lt;br /&gt;
* Disallow는 크롤러가 접근하지 말아야 할 경로를 지정한다.&lt;br /&gt;
* Allow는 특정 경로의 접근 허용을 지정한다.&lt;br /&gt;
* robots.txt는 보안용 접근제어 수단이 아니다.&lt;br /&gt;
* robots.txt는 크롤링 제어 수단이고, noindex는 색인 제어 수단이다.&lt;br /&gt;
* robots.txt에 민감한 경로를 적으면 오히려 경로가 노출될 수 있다.&lt;br /&gt;
* 모든 크롤러가 robots.txt를 준수하는 것은 아니다.&lt;br /&gt;
* 사이트맵 위치를 robots.txt에 함께 기재할 수 있다.&lt;br /&gt;
* 검색엔진 노출을 막으려면 robots.txt, noindex, 접근제어의 차이를 구분해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[robots.txt]]&lt;br /&gt;
* [[웹 크롤러]]&lt;br /&gt;
* [[검색엔진]]&lt;br /&gt;
* [[사이트맵]]&lt;br /&gt;
* [[SEO]]&lt;br /&gt;
* [[noindex]]&lt;br /&gt;
* [[X-Robots-Tag]]&lt;br /&gt;
* [[HTTP]]&lt;br /&gt;
* [[웹 보안]]&lt;br /&gt;
* [[접근제어]]&lt;br /&gt;
* [[봇 차단]]&lt;br /&gt;
&lt;br /&gt;
== 참고 문헌 ==&lt;br /&gt;
* RFC 9309, Robots Exclusion Protocol.&lt;br /&gt;
* Google Search Central, robots.txt 관련 문서.&lt;br /&gt;
* Bing Webmaster Tools, robots.txt 관련 문서.&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=Teardrop&amp;diff=53091</id>
		<title>Teardrop</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=Teardrop&amp;diff=53091"/>
		<updated>2026-05-17T07:02:20Z</updated>

		<summary type="html">&lt;p&gt;라이언: 티어드롭 공격 문서로 넘겨주기&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#넘겨주기 [[티어드롭 공격]]&lt;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EC%82%AC%EB%B6%84%EC%9C%84%EC%88%98&amp;diff=53090</id>
		<title>사분위수</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%82%AC%EB%B6%84%EC%9C%84%EC%88%98&amp;diff=53090"/>
		<updated>2026-05-17T06:48:24Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 사분위수(Quartile)는 데이터를 크기순으로 정렬했을 때 전체 자료를 네 구간으로 나누는 위치 지표이다. 데이터의 분포, 중앙 위치, 산포, 이상치 여부를 파악할 때 사용되며, 기술통계와 탐색적 데이터 분석에서 자주 활용된다.  == 개요 == 사분위수는 전체 데이터를 4등분하는 기준값이다. 데이터를 오름차순으로 정렬한 뒤, 하위 25%, 50%, 75% 지점에 해당하는 값...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;사분위수(Quartile)는 데이터를 크기순으로 정렬했을 때 전체 자료를 네 구간으로 나누는 위치 지표이다. 데이터의 분포, 중앙 위치, 산포, 이상치 여부를 파악할 때 사용되며, [[기술통계]]와 [[탐색적 데이터 분석]]에서 자주 활용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
사분위수는 전체 데이터를 4등분하는 기준값이다. 데이터를 오름차순으로 정렬한 뒤, 하위 25%, 50%, 75% 지점에 해당하는 값을 구한다.&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;
! 의미&lt;br /&gt;
! 백분위수와의 관계&lt;br /&gt;
|-&lt;br /&gt;
| 제1사분위수&lt;br /&gt;
| Q1&lt;br /&gt;
| 전체 데이터의 하위 25% 지점&lt;br /&gt;
| P25&lt;br /&gt;
|-&lt;br /&gt;
| 제2사분위수&lt;br /&gt;
| Q2&lt;br /&gt;
| 전체 데이터의 하위 50% 지점&lt;br /&gt;
| P50&lt;br /&gt;
|-&lt;br /&gt;
| 제3사분위수&lt;br /&gt;
| Q3&lt;br /&gt;
| 전체 데이터의 하위 75% 지점&lt;br /&gt;
| P75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
제2사분위수는 [[중앙값]]과 같다.&lt;br /&gt;
&lt;br /&gt;
== 의미 ==&lt;br /&gt;
각 사분위수의 의미는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* Q1&lt;br /&gt;
: 데이터의 약 25%가 Q1 이하에 위치한다.&lt;br /&gt;
* Q2&lt;br /&gt;
: 데이터의 약 50%가 Q2 이하에 위치한다.&lt;br /&gt;
* Q3&lt;br /&gt;
: 데이터의 약 75%가 Q3 이하에 위치한다.&lt;br /&gt;
&lt;br /&gt;
따라서 Q1과 Q3 사이에는 데이터의 가운데 50%가 포함된다.&lt;br /&gt;
&lt;br /&gt;
== 계산 절차 ==&lt;br /&gt;
사분위수는 일반적으로 다음 절차로 계산한다.&lt;br /&gt;
&lt;br /&gt;
# 데이터를 오름차순으로 정렬한다.&lt;br /&gt;
# 중앙값을 구한다.&lt;br /&gt;
# 중앙값을 기준으로 하위 절반과 상위 절반을 나눈다.&lt;br /&gt;
# 하위 절반의 중앙값을 Q1로 한다.&lt;br /&gt;
# 전체 데이터의 중앙값을 Q2로 한다.&lt;br /&gt;
# 상위 절반의 중앙값을 Q3로 한다.&lt;br /&gt;
&lt;br /&gt;
단, 데이터 개수가 홀수일 때 중앙값을 하위 절반과 상위 절반에 포함할지 여부는 계산 방식에 따라 달라질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 예시 ==&lt;br /&gt;
다음 데이터가 있다고 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
10, 20, 30, 40, 50, 60, 70, 80, 90&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
데이터 개수는 9개이다.&lt;br /&gt;
&lt;br /&gt;
* Q2는 가운데 값인 50이다.&lt;br /&gt;
* 하위 절반은 10, 20, 30, 40이다.&lt;br /&gt;
* 하위 절반의 중앙값은 25이므로 Q1은 25이다.&lt;br /&gt;
* 상위 절반은 60, 70, 80, 90이다.&lt;br /&gt;
* 상위 절반의 중앙값은 75이므로 Q3은 75이다.&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;
| Q1&lt;br /&gt;
| 25&lt;br /&gt;
|-&lt;br /&gt;
| Q2&lt;br /&gt;
| 50&lt;br /&gt;
|-&lt;br /&gt;
| Q3&lt;br /&gt;
| 75&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 사분위 범위 ==&lt;br /&gt;
[[사분위 범위]](IQR, Interquartile Range)는 제3사분위수에서 제1사분위수를 뺀 값이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
IQR = Q3 - Q1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
사분위 범위는 데이터의 가운데 50%가 퍼져 있는 정도를 나타낸다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 Q1이 25이고 Q3이 75라면 IQR은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
IQR = 75 - 25 = 50&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IQR이 클수록 데이터의 중간 부분이 넓게 퍼져 있고, 작을수록 중간 부분이 좁게 모여 있다고 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 이상치 탐지 ==&lt;br /&gt;
사분위수는 [[이상치]]를 탐지할 때 자주 사용된다.&lt;br /&gt;
&lt;br /&gt;
일반적으로 다음 기준을 사용한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
하한 = Q1 - 1.5 × IQR&lt;br /&gt;
상한 = Q3 + 1.5 × IQR&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;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;
|-&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;
* 제1사분위수(Q1)&lt;br /&gt;
* 중앙값(Q2)&lt;br /&gt;
* 제3사분위수(Q3)&lt;br /&gt;
* 최댓값&lt;br /&gt;
* 이상치&lt;br /&gt;
&lt;br /&gt;
상자의 아래쪽 경계는 Q1, 가운데 선은 Q2, 위쪽 경계는 Q3을 나타낸다. 상자의 길이는 IQR에 해당한다.&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;
|-&lt;br /&gt;
| Q1&lt;br /&gt;
| 25백분위수&lt;br /&gt;
|-&lt;br /&gt;
| Q2&lt;br /&gt;
| 50백분위수&lt;br /&gt;
|-&lt;br /&gt;
| Q3&lt;br /&gt;
| 75백분위수&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
즉, 사분위수는 데이터를 4등분하고, 백분위수는 데이터를 100등분한다.&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;
! 사분위수&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;
| 상대적으로 작음&lt;br /&gt;
|-&lt;br /&gt;
| 주요 용도&lt;br /&gt;
| 전체적인 평균 수준 파악&lt;br /&gt;
| 분포, 산포, 이상치 파악&lt;br /&gt;
|-&lt;br /&gt;
| 관련 지표&lt;br /&gt;
| 산술평균&lt;br /&gt;
| Q1, Q2, Q3, IQR&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;
IQR을 이용해 정상 범위를 벗어난 값을 찾을 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 집단 비교 ===&lt;br /&gt;
두 집단의 중앙값, IQR, 상자 그림을 비교하여 분포 차이를 확인할 수 있다.&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;
=== 사분위수와 분위수 ===&lt;br /&gt;
[[분위수]]는 데이터를 일정한 비율로 나누는 값 전체를 의미한다. 사분위수는 분위수 중 데이터를 4등분하는 경우이다.&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;
| 데이터를 4등분하는 분위수&lt;br /&gt;
|-&lt;br /&gt;
| 백분위수&lt;br /&gt;
| 데이터를 100등분하는 분위수&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== 사분위수와 중앙값 ===&lt;br /&gt;
중앙값은 제2사분위수와 같다.&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;
| 제2사분위수&lt;br /&gt;
| 데이터의 50%가 그 값 이하에 위치하는 값&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;
|-&lt;br /&gt;
| 사분위수&lt;br /&gt;
| Q1, Q2, Q3으로 표현되는 위치 지표&lt;br /&gt;
|-&lt;br /&gt;
| 사분위 범위&lt;br /&gt;
| Q3 - Q1로 계산되는 산포 지표&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;
* IQR 기준 이상치는 통계적 이상치 후보일 뿐, 반드시 오류 데이터라는 뜻은 아니다.&lt;br /&gt;
* 평균, 표준편차, 히스토그램 등 다른 지표와 함께 해석하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
== 자격시험 학습 관점 ==&lt;br /&gt;
사분위수는 통계와 데이터 분석의 기본 위치 지표로, 기술통계량과 탐색적 데이터 분석에서 자주 다루어진다.&lt;br /&gt;
&lt;br /&gt;
학습할 때는 다음 내용을 중심으로 정리하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
* Q1, Q2, Q3의 의미&lt;br /&gt;
* Q2와 중앙값의 관계&lt;br /&gt;
* Q1과 Q3의 백분위수 관계&lt;br /&gt;
* IQR 계산&lt;br /&gt;
* IQR을 이용한 이상치 탐지 기준&lt;br /&gt;
* 상자 그림의 구성 요소&lt;br /&gt;
* 평균과 사분위수의 차이&lt;br /&gt;
* 백분위수와 사분위수의 관계&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 사분위수는 데이터를 4등분하는 위치 지표이다.&lt;br /&gt;
* Q1은 제1사분위수로 하위 25% 지점이다.&lt;br /&gt;
* Q2는 제2사분위수로 중앙값과 같다.&lt;br /&gt;
* Q3은 제3사분위수로 하위 75% 지점이다.&lt;br /&gt;
* IQR은 Q3 - Q1로 계산한다.&lt;br /&gt;
* IQR은 데이터의 가운데 50%가 퍼져 있는 정도를 나타낸다.&lt;br /&gt;
* 이상치 탐지에는 Q1 - 1.5 × IQR, Q3 + 1.5 × IQR 기준이 자주 사용된다.&lt;br /&gt;
* 상자 그림은 사분위수를 이용해 데이터 분포를 시각화한다.&lt;br /&gt;
* 사분위수는 평균보다 극단값의 영향을 덜 받는다.&lt;br /&gt;
* 사분위수는 백분위수 중 P25, P50, P75와 대응된다.&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;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%B0%B1%EB%B6%84%EC%9C%84%EC%88%98&amp;diff=53089</id>
		<title>백분위수</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%B0%B1%EB%B6%84%EC%9C%84%EC%88%98&amp;diff=53089"/>
		<updated>2026-05-17T06:47:57Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 백분위수(Percentile)는 데이터를 크기순으로 정렬했을 때, 특정 값 이하에 전체 관측값의 몇 퍼센트가 위치하는지를 나타내는 통계적 위치 지표이다. 데이터의 상대적 위치를 파악하거나 분포를 요약할 때 사용된다.  == 개요 == 백분위수는 전체 데이터를 100등분하여 특정 관측값이 어느 위치에 있는지를 나타내는 값이다. 예를 들어 어떤 점수가 90백분위수에 해당한...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;백분위수(Percentile)는 데이터를 크기순으로 정렬했을 때, 특정 값 이하에 전체 관측값의 몇 퍼센트가 위치하는지를 나타내는 통계적 위치 지표이다. 데이터의 상대적 위치를 파악하거나 분포를 요약할 때 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
백분위수는 전체 데이터를 100등분하여 특정 관측값이 어느 위치에 있는지를 나타내는 값이다. 예를 들어 어떤 점수가 90백분위수에 해당한다면, 그 점수 이하에 전체 데이터의 약 90%가 위치한다는 의미이다.&lt;br /&gt;
&lt;br /&gt;
백분위수는 평균처럼 중심만 보여주는 지표와 달리, 데이터가 분포상 어디에 위치하는지를 설명한다. 따라서 성적, 소득, 응답시간, 서버 부하, 이상치 탐지, 성능 측정 등 다양한 분야에서 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 의미 ==&lt;br /&gt;
p백분위수는 전체 데이터 중 p%가 그 값 이하에 위치하도록 하는 값을 의미한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* 25백분위수: 전체 데이터의 25%가 이 값 이하에 위치&lt;br /&gt;
* 50백분위수: 전체 데이터의 50%가 이 값 이하에 위치&lt;br /&gt;
* 75백분위수: 전체 데이터의 75%가 이 값 이하에 위치&lt;br /&gt;
* 90백분위수: 전체 데이터의 90%가 이 값 이하에 위치&lt;br /&gt;
&lt;br /&gt;
50백분위수는 [[중앙값]]과 같다.&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;
|-&lt;br /&gt;
| P25&lt;br /&gt;
| 25백분위수&lt;br /&gt;
|-&lt;br /&gt;
| P50&lt;br /&gt;
| 50백분위수, 중앙값&lt;br /&gt;
|-&lt;br /&gt;
| P75&lt;br /&gt;
| 75백분위수&lt;br /&gt;
|-&lt;br /&gt;
| P90&lt;br /&gt;
| 90백분위수&lt;br /&gt;
|-&lt;br /&gt;
| P95&lt;br /&gt;
| 95백분위수&lt;br /&gt;
|-&lt;br /&gt;
| P99&lt;br /&gt;
| 99백분위수&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
성능 분석에서는 P95, P99 같은 상위 백분위수가 자주 사용된다. 예를 들어 API 응답시간의 P95가 800ms라면, 전체 요청의 약 95%는 800ms 이하로 처리되었다는 뜻이다.&lt;br /&gt;
&lt;br /&gt;
== 계산 절차 ==&lt;br /&gt;
백분위수는 일반적으로 다음 절차로 계산한다.&lt;br /&gt;
&lt;br /&gt;
# 데이터를 오름차순으로 정렬한다.&lt;br /&gt;
# 구하려는 백분위 p를 정한다.&lt;br /&gt;
# 위치 또는 순위를 계산한다.&lt;br /&gt;
# 해당 위치의 값을 찾는다.&lt;br /&gt;
# 위치가 정수가 아니면 보간법을 적용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 다음 데이터가 있다고 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
10, 20, 30, 40, 50, 60, 70, 80, 90, 100&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
이 데이터에서 50백분위수는 중앙값에 해당하므로 55가 된다. 데이터 개수가 짝수이므로 가운데 두 값 50과 60의 평균을 사용한다.&lt;br /&gt;
&lt;br /&gt;
== 계산 방식의 차이 ==&lt;br /&gt;
백분위수 계산 방식은 통계 소프트웨어나 교재에 따라 조금씩 다를 수 있다.&lt;br /&gt;
&lt;br /&gt;
대표적인 방식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
위치 = (p / 100) × (n + 1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
또는 다음 방식도 사용된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
위치 = 1 + (n - 1) × (p / 100)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 n은 데이터 개수, p는 구하려는 백분위이다.&lt;br /&gt;
&lt;br /&gt;
계산식에 따라 보간 위치가 달라질 수 있으므로, 실무에서는 사용한 도구나 기준을 함께 명시하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
== 예시 ==&lt;br /&gt;
다음 데이터에서 75백분위수를 구한다고 하자.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
10, 20, 30, 40, 50, 60, 70, 80, 90&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
데이터 개수는 9개이다.&lt;br /&gt;
&lt;br /&gt;
방식에 따라 위치를 다음과 같이 계산할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
위치 = (75 / 100) × (9 + 1)&lt;br /&gt;
위치 = 7.5&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7번째 값은 70이고, 8번째 값은 80이다. 위치가 7.5이므로 두 값의 중간인 75를 75백분위수로 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 사분위수와의 관계 ==&lt;br /&gt;
[[사분위수]]는 데이터를 4등분한 위치 지표이다. 사분위수는 백분위수의 특수한 경우로 볼 수 있다.&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;
| 제1사분위수&lt;br /&gt;
| P25&lt;br /&gt;
| 하위 25% 지점&lt;br /&gt;
|-&lt;br /&gt;
| 제2사분위수&lt;br /&gt;
| P50&lt;br /&gt;
| 중앙값&lt;br /&gt;
|-&lt;br /&gt;
| 제3사분위수&lt;br /&gt;
| P75&lt;br /&gt;
| 하위 75% 지점&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;
|-&lt;br /&gt;
| 사분위수&lt;br /&gt;
| 데이터를 4등분&lt;br /&gt;
|-&lt;br /&gt;
| 십분위수&lt;br /&gt;
| 데이터를 10등분&lt;br /&gt;
|-&lt;br /&gt;
| 백분위수&lt;br /&gt;
| 데이터를 100등분&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;
! 예&lt;br /&gt;
|-&lt;br /&gt;
| 백분율&lt;br /&gt;
| 전체 중 어떤 비율을 100분율로 나타낸 값&lt;br /&gt;
| 정답률 80%&lt;br /&gt;
|-&lt;br /&gt;
| 백분위수&lt;br /&gt;
| 데이터 분포에서 상대적 위치를 나타내는 값&lt;br /&gt;
| P80 점수 72점&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예를 들어 시험에서 80점을 받았다는 것은 점수 자체가 80점이라는 뜻이다. 반면 80백분위수라는 것은 해당 점수 이하에 전체 응시자의 약 80%가 있다는 뜻이다.&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;
! 백분위수&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;
* P90: 상위권 위치&lt;br /&gt;
* P50: 중간 수준&lt;br /&gt;
* P25: 하위권 위치&lt;br /&gt;
&lt;br /&gt;
=== 성능 분석 ===&lt;br /&gt;
시스템 성능 측정에서 평균 응답시간만 보면 일부 느린 요청의 영향을 제대로 파악하기 어렵다.&lt;br /&gt;
&lt;br /&gt;
따라서 P95, P99 같은 백분위수를 사용하여 대부분의 사용자가 경험하는 지연 시간을 분석한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* 평균 응답시간: 200ms&lt;br /&gt;
* P95 응답시간: 800ms&lt;br /&gt;
* P99 응답시간: 2초&lt;br /&gt;
&lt;br /&gt;
이 경우 대부분의 요청은 빠르지만 일부 요청은 매우 느리다는 것을 알 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 이상치 탐지 ===&lt;br /&gt;
상위 1% 또는 하위 1%에 해당하는 값을 이상치 후보로 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* P1보다 작은 값&lt;br /&gt;
* P99보다 큰 값&lt;br /&gt;
&lt;br /&gt;
=== 데이터 분포 요약 ===&lt;br /&gt;
최솟값, 제1사분위수, 중앙값, 제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;
* 제1사분위수&lt;br /&gt;
* 중앙값&lt;br /&gt;
* 제3사분위수&lt;br /&gt;
* 최댓값&lt;br /&gt;
&lt;br /&gt;
또한 사분위 범위는 다음과 같이 계산한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
IQR = Q3 - Q1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
여기서 Q1은 P25, Q3은 P75이다.&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;
{| 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;
| 50백분위수&lt;br /&gt;
| 데이터의 50%가 그 값 이하에 위치하는 값&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
중앙값은 50백분위수와 같은 개념이다.&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;
| 데이터를 4등분하는 위치 값&lt;br /&gt;
|-&lt;br /&gt;
| 백분위수&lt;br /&gt;
| 데이터를 100등분하는 위치 값&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
사분위수는 백분위수 중 P25, P50, P75와 연결된다.&lt;br /&gt;
&lt;br /&gt;
=== 백분위수와 순위 ===&lt;br /&gt;
순위는 개별 관측값의 등수를 나타내고, 백분위수는 분포에서의 상대적 위치를 백분율 형태로 나타낸다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 100명 중 10등인 학생은 상위 10%에 해당하지만, 백분위수 표현에서는 대략 90백분위수 부근으로 설명할 수 있다.&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;
* 중앙값과 50백분위수의 관계&lt;br /&gt;
* 사분위수와 백분위수의 관계&lt;br /&gt;
* P25, P50, P75의 의미&lt;br /&gt;
* IQR과 이상치 탐지&lt;br /&gt;
* 평균과 중앙값, 백분위수의 차이&lt;br /&gt;
* 데이터 정렬 후 위치를 구하는 절차&lt;br /&gt;
* 소프트웨어별 계산 방식 차이&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 백분위수는 데이터를 100등분했을 때의 위치 지표이다.&lt;br /&gt;
* p백분위수는 전체 데이터의 p%가 그 값 이하에 위치하는 값이다.&lt;br /&gt;
* 50백분위수는 중앙값이다.&lt;br /&gt;
* 제1사분위수는 25백분위수, 제3사분위수는 75백분위수이다.&lt;br /&gt;
* 백분위수는 평균보다 극단값의 영향을 덜 받는다.&lt;br /&gt;
* 백분위수는 데이터의 상대적 위치와 분포 해석에 사용된다.&lt;br /&gt;
* P95, P99는 성능 분석에서 꼬리 지연 시간을 설명할 때 자주 사용된다.&lt;br /&gt;
* 백분위수 계산 방식은 도구나 정의에 따라 조금 달라질 수 있다.&lt;br /&gt;
* IQR은 Q3 - Q1이며, Q1은 P25, Q3은 P75이다.&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;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EA%B5%AD%EB%82%B4%EB%8C%80%EB%A6%AC%EC%9D%B8_%EC%A7%80%EC%A0%95_%EC%A0%9C%EB%8F%84&amp;diff=53041</id>
		<title>국내대리인 지정 제도</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EA%B5%AD%EB%82%B4%EB%8C%80%EB%A6%AC%EC%9D%B8_%EC%A7%80%EC%A0%95_%EC%A0%9C%EB%8F%84&amp;diff=53041"/>
		<updated>2026-05-17T04:42: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;
* [[개인정보 보호법]] 제31조의2(국내대리인의 지정)&lt;br /&gt;
* [[개인정보 보호법 시행령]] 제32조의3(국내대리인 지정 대상자의 범위 등)&lt;br /&gt;
* [[개인정보 보호법]] 제30조(개인정보 처리방침의 수립 및 공개)&lt;br /&gt;
* [[개인정보 보호법]] 제31조(개인정보 보호책임자의 지정)&lt;br /&gt;
* [[개인정보 보호법]] 제63조(자료제출 요구 및 검사)&lt;br /&gt;
* [[개인정보 보호법]] 제75조(과태료)&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;
|-&lt;br /&gt;
| 매출액 기준&lt;br /&gt;
| 전년도 전체 매출액이 1조원 이상인 자&lt;br /&gt;
|-&lt;br /&gt;
| 정보주체 수 기준&lt;br /&gt;
| 전년도 말 기준 직전 3개월 간 개인정보가 저장·관리되고 있는 국내 정보주체 수가 일일평균 100만명 이상인 자&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;
* 해당 개인정보처리자가 대표이사를 임면하거나 임원의 50% 이상을 선임하거나 선임할 수 있는 법인&lt;br /&gt;
* 해당 개인정보처리자가 발행주식총수 또는 출자총액의 30% 이상을 출자한 법인&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;
* 국내대리인의 성명&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;
== 지정 절차 ==&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;
{| 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;
== 제도의 의의 ==&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;
[[개인정보 보호법]]상 국내대리인은 해외 개인정보처리자의 개인정보 보호 책임과 정보주체 권리 보호를 위해 지정된다.&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;
=== 국내대리인과 개인정보 보호책임자 ===&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;
| 적용 맥락&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;
! 현지 법인&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;
{| 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;
&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;
* [[개인정보 처리방침]]&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;
* 국내대리인의 대리 업무&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;
* [[개인정보 처리방침]]&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;
* 「개인정보 보호법」 제31조의2(국내대리인의 지정)&lt;br /&gt;
* 「개인정보 보호법 시행령」 제32조의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;/div&gt;</summary>
		<author><name>라이언</name></author>
	</entry>
	<entry>
		<id>https://devhrxoobm.itwiki.kr/index.php?title=%EB%AC%B4%EC%84%A0%EB%9E%9C_%EB%B3%B4%EC%95%88&amp;diff=53039</id>
		<title>무선랜 보안</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%AC%B4%EC%84%A0%EB%9E%9C_%EB%B3%B4%EC%95%88&amp;diff=53039"/>
		<updated>2026-05-17T04:39:23Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 무선랜 보안(Wireless LAN Security)은 무선랜 환경에서 통신 데이터, 접속 장치, 인증 정보, 네트워크 자원을 보호하기 위한 보안 기술과 관리 활동이다. 무선랜은 전파를 이용하기 때문에 유선망보다 도청, 위장 접속, 비인가 접근, 중간자 공격 등에 노출되기 쉽다.  == 개요 == 무선랜은 케이블 대신 전파를 이용하여 단말과 액세스 포인트가 통신하는 네트워크이다....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;무선랜 보안(Wireless LAN Security)은 [[무선랜]] 환경에서 통신 데이터, 접속 장치, 인증 정보, 네트워크 자원을 보호하기 위한 보안 기술과 관리 활동이다. 무선랜은 전파를 이용하기 때문에 유선망보다 도청, 위장 접속, 비인가 접근, 중간자 공격 등에 노출되기 쉽다.&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;
* 위장 AP와 중간자 공격 방지&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;
* AP를 위장한 공격이 가능하다.&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;
무선 구간에서 오가는 데이터를 제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;
무선랜 보안 방식은 WEP에서 WPA, WPA2, WPA3로 발전하였다.&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;
| [[WEP]]&lt;br /&gt;
| 초기 무선랜 암호화 방식. 취약점이 많아 사용 권장되지 않음&lt;br /&gt;
| 매우 낮음&lt;br /&gt;
|-&lt;br /&gt;
| [[WPA]]&lt;br /&gt;
| WEP의 취약점을 보완하기 위해 도입. TKIP 사용&lt;br /&gt;
| 낮음&lt;br /&gt;
|-&lt;br /&gt;
| [[WPA2]]&lt;br /&gt;
| AES-CCMP 기반 보안 방식. 오랫동안 표준적으로 사용&lt;br /&gt;
| 높음&lt;br /&gt;
|-&lt;br /&gt;
| [[WPA3]]&lt;br /&gt;
| SAE, PMF 강화, 향상된 인증 및 암호화 제공&lt;br /&gt;
| 매우 높음&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== WEP ==&lt;br /&gt;
WEP(Wired Equivalent Privacy)는 초기 무선랜 보안 방식이다.&lt;br /&gt;
&lt;br /&gt;
WEP는 유선 네트워크와 비슷한 수준의 보안을 제공하는 것을 목표로 하였으나, 암호화 방식과 키 관리 방식에 심각한 취약점이 발견되어 현재는 안전하지 않은 방식으로 간주된다.&lt;br /&gt;
&lt;br /&gt;
=== WEP의 문제점 ===&lt;br /&gt;
* 짧은 초기화 벡터 사용&lt;br /&gt;
* 키 재사용 문제&lt;br /&gt;
* 암호 분석 공격에 취약&lt;br /&gt;
* 키 관리 기능 부족&lt;br /&gt;
* 무결성 보호 취약&lt;br /&gt;
&lt;br /&gt;
WEP는 보안상 사용하지 않는 것이 원칙이다.&lt;br /&gt;
&lt;br /&gt;
== WPA ==&lt;br /&gt;
WPA(Wi-Fi Protected Access)는 WEP의 취약점을 보완하기 위해 등장한 무선랜 보안 방식이다.&lt;br /&gt;
&lt;br /&gt;
WPA는 TKIP(Temporal Key Integrity Protocol)를 사용하여 WEP보다 강화된 키 관리와 무결성 보호를 제공하였다. 그러나 TKIP 자체도 이후 한계가 드러났고, 현재는 WPA2 이상을 사용하는 것이 일반적이다.&lt;br /&gt;
&lt;br /&gt;
== WPA2 ==&lt;br /&gt;
WPA2는 오랫동안 가장 널리 사용된 무선랜 보안 방식이다. AES 기반의 CCMP를 사용하여 WEP와 WPA보다 강한 보안을 제공한다.&lt;br /&gt;
&lt;br /&gt;
WPA2는 개인용 환경과 기업용 환경에서 각각 다른 방식으로 사용된다.&lt;br /&gt;
&lt;br /&gt;
=== WPA2-Personal ===&lt;br /&gt;
WPA2-Personal은 사전 공유키(PSK, Pre-Shared Key)를 사용하는 방식이다.&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;
=== WPA2-Enterprise ===&lt;br /&gt;
WPA2-Enterprise는 [[IEEE 802.1X]]와 인증 서버를 사용하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
기업, 학교, 공공기관 등 다수 사용자가 있는 환경에서 사용된다.&lt;br /&gt;
&lt;br /&gt;
특징은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 사용자별 인증 가능&lt;br /&gt;
* [[RADIUS]] 서버 사용 가능&lt;br /&gt;
* 사용자 계정 기반 접근제어 가능&lt;br /&gt;
* 인증서 기반 인증 적용 가능&lt;br /&gt;
* 운영과 설정이 상대적으로 복잡함&lt;br /&gt;
&lt;br /&gt;
== WPA3 ==&lt;br /&gt;
WPA3는 WPA2 이후의 무선랜 보안 방식이다. WPA2의 한계를 보완하고, 비밀번호 기반 인증과 공개 무선랜 보안을 강화하기 위해 도입되었다.&lt;br /&gt;
&lt;br /&gt;
주요 특징은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* WPA3-Personal에서 SAE 사용&lt;br /&gt;
* 사전 공격 방어 강화&lt;br /&gt;
* 관리 프레임 보호 강화&lt;br /&gt;
* WPA3-Enterprise에서 더 강한 보안 모드 제공&lt;br /&gt;
* 공개 무선랜 보호를 위한 Enhanced Open과 함께 사용 가능&lt;br /&gt;
&lt;br /&gt;
=== WPA3-Personal ===&lt;br /&gt;
WPA3-Personal은 기존 WPA2-Personal의 PSK 방식 대신 SAE(Simultaneous Authentication of Equals)를 사용한다.&lt;br /&gt;
&lt;br /&gt;
SAE는 비밀번호 기반 인증 방식이지만, 오프라인 사전 공격을 어렵게 하도록 설계되었다.&lt;br /&gt;
&lt;br /&gt;
=== WPA3-Enterprise ===&lt;br /&gt;
WPA3-Enterprise는 기업 환경에서 강한 인증과 암호화를 제공하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
중요도가 높은 환경에서는 더 강한 암호화 모드와 인증서 검증을 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== Wi-Fi Enhanced Open ==&lt;br /&gt;
Wi-Fi Enhanced Open은 비밀번호가 없는 공개 무선랜에서 무선 구간 암호화를 제공하기 위한 방식이다.&lt;br /&gt;
&lt;br /&gt;
기존의 공개 Wi-Fi는 암호화가 적용되지 않는 경우가 많아 같은 네트워크 주변의 공격자가 통신 내용을 쉽게 수집할 수 있었다. Enhanced Open은 OWE(Opportunistic Wireless Encryption)를 이용하여 사용자와 AP 사이의 무선 구간을 암호화한다.&lt;br /&gt;
&lt;br /&gt;
다만 Enhanced Open은 암호화를 제공하지만, 사용자가 접속한 AP가 실제 정당한 AP인지 인증하는 기능은 제공하지 않는다. 따라서 위장 AP 문제를 완전히 해결하는 것은 아니다.&lt;br /&gt;
&lt;br /&gt;
== 관리 프레임 보호 ==&lt;br /&gt;
관리 프레임 보호(PMF, Protected Management Frames)는 무선랜 관리 프레임을 보호하는 기술이다.&lt;br /&gt;
&lt;br /&gt;
무선랜에서는 인증, 연결, 연결 해제 등 관리 목적의 프레임이 사용된다. 공격자가 관리 프레임을 위조하면 단말을 강제로 끊거나 재접속을 유도할 수 있다.&lt;br /&gt;
&lt;br /&gt;
PMF는 이러한 관리 프레임 위조 공격을 줄이기 위해 사용된다.&lt;br /&gt;
&lt;br /&gt;
=== 관련 공격 ===&lt;br /&gt;
* Deauthentication 공격&lt;br /&gt;
* Disassociation 공격&lt;br /&gt;
* Evil Twin 공격과 결합된 재접속 유도&lt;br /&gt;
* 중간자 공격 준비 단계&lt;br /&gt;
&lt;br /&gt;
== 인증 방식 ==&lt;br /&gt;
무선랜 인증 방식은 개인용과 기업용으로 나누어 이해할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 사전 공유키 방식 ===&lt;br /&gt;
사전 공유키 방식은 AP와 사용자가 같은 비밀번호를 공유하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
대표 예:&lt;br /&gt;
* WPA2-Personal&lt;br /&gt;
* WPA3-Personal&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;
=== 802.1X 인증 ===&lt;br /&gt;
[[IEEE 802.1X]]는 네트워크 접근제어를 위한 인증 구조이다.&lt;br /&gt;
&lt;br /&gt;
무선랜에서는 주로 기업용 WPA2-Enterprise, WPA3-Enterprise에서 사용된다.&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;
| Supplicant&lt;br /&gt;
| 접속을 시도하는 사용자 단말&lt;br /&gt;
|-&lt;br /&gt;
| Authenticator&lt;br /&gt;
| 인증을 중계하는 AP 또는 스위치&lt;br /&gt;
|-&lt;br /&gt;
| Authentication Server&lt;br /&gt;
| 인증을 수행하는 서버. 일반적으로 RADIUS 서버 사용&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== EAP ===&lt;br /&gt;
EAP(Extensible Authentication Protocol)는 다양한 인증 방식을 지원하기 위한 인증 프레임워크이다.&lt;br /&gt;
&lt;br /&gt;
대표적인 EAP 방식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* EAP-TLS&lt;br /&gt;
* PEAP&lt;br /&gt;
* EAP-TTLS&lt;br /&gt;
* EAP-FAST&lt;br /&gt;
&lt;br /&gt;
=== RADIUS ===&lt;br /&gt;
[[RADIUS]]는 원격 인증, 권한 부여, 계정 관리를 제공하는 프로토콜이다.&lt;br /&gt;
&lt;br /&gt;
기업용 무선랜에서는 AP가 RADIUS 서버와 연동하여 사용자 인증을 수행한다.&lt;br /&gt;
&lt;br /&gt;
== 암호화 방식 ==&lt;br /&gt;
무선랜 보안에서는 무선 구간의 데이터를 암호화하여 도청을 방지한다.&lt;br /&gt;
&lt;br /&gt;
=== TKIP ===&lt;br /&gt;
TKIP(Temporal Key Integrity Protocol)는 WPA에서 사용된 암호화 보완 방식이다.&lt;br /&gt;
&lt;br /&gt;
WEP보다 개선되었지만 현재는 안전하지 않은 방식으로 간주되며, 가능한 사용하지 않는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
=== CCMP ===&lt;br /&gt;
CCMP(Counter Mode with CBC-MAC Protocol)는 WPA2에서 사용되는 AES 기반 암호화 방식이다.&lt;br /&gt;
&lt;br /&gt;
WPA2 보안의 핵심 구성요소이다.&lt;br /&gt;
&lt;br /&gt;
=== GCMP ===&lt;br /&gt;
GCMP(Galois/Counter Mode Protocol)는 일부 최신 무선랜 보안 방식에서 사용되는 암호화·무결성 보호 방식이다.&lt;br /&gt;
&lt;br /&gt;
== 주요 공격 유형 ==&lt;br /&gt;
&lt;br /&gt;
=== 도청 ===&lt;br /&gt;
공격자가 무선 신호를 수집하여 통신 내용을 분석하는 공격이다.&lt;br /&gt;
&lt;br /&gt;
암호화가 적용되지 않은 공개 Wi-Fi에서는 도청 위험이 크다.&lt;br /&gt;
&lt;br /&gt;
=== 사전 공격 ===&lt;br /&gt;
사전 공격(Dictionary Attack)은 약한 비밀번호를 대상으로 가능한 단어와 조합을 대입하여 비밀번호를 추측하는 공격이다.&lt;br /&gt;
&lt;br /&gt;
WPA2-Personal에서 비밀번호가 약하면 공격자가 핸드셰이크 정보를 수집한 뒤 오프라인 사전 공격을 시도할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== Evil Twin 공격 ===&lt;br /&gt;
Evil Twin 공격은 공격자가 정상 AP와 비슷한 이름의 위장 AP를 만들어 사용자가 접속하도록 유도하는 공격이다.&lt;br /&gt;
&lt;br /&gt;
공격자는 사용자의 트래픽을 중간에서 가로채거나 피싱 페이지로 유도할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== Rogue AP ===&lt;br /&gt;
Rogue AP는 조직의 승인 없이 설치된 무선 AP이다.&lt;br /&gt;
&lt;br /&gt;
내부 사용자가 임의로 설치한 AP나 공격자가 설치한 AP가 내부망 보안 우회 경로가 될 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== Deauthentication 공격 ===&lt;br /&gt;
Deauthentication 공격은 공격자가 연결 해제 프레임을 위조하여 단말을 AP에서 강제로 끊는 공격이다.&lt;br /&gt;
&lt;br /&gt;
이 공격은 사용자를 위장 AP로 유도하거나 무선랜 가용성을 방해하는 데 사용될 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== KRACK 공격 ===&lt;br /&gt;
KRACK(Key Reinstallation Attack)은 WPA2의 4-way handshake 구현 취약점을 악용한 공격이다.&lt;br /&gt;
&lt;br /&gt;
공격자는 키 재설치 과정을 악용하여 일부 환경에서 통신 내용을 복호화하거나 변조할 수 있다. 패치 적용과 최신 보안 방식 사용이 중요하다.&lt;br /&gt;
&lt;br /&gt;
=== WPS 공격 ===&lt;br /&gt;
WPS(Wi-Fi Protected Setup)는 무선랜 설정을 쉽게 하기 위한 기능이다.&lt;br /&gt;
&lt;br /&gt;
특히 PIN 방식 WPS는 무차별 대입 공격에 취약할 수 있어, 보안이 중요한 환경에서는 비활성화하는 것이 권장된다.&lt;br /&gt;
&lt;br /&gt;
=== MAC 주소 위조 ===&lt;br /&gt;
MAC 주소 필터링만으로 접속을 제한하는 경우, 공격자는 허용된 단말의 MAC 주소를 위조하여 접속을 시도할 수 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 MAC 필터링은 보조 수단일 뿐 강한 인증 수단으로 보기 어렵다.&lt;br /&gt;
&lt;br /&gt;
== 무선랜 보안 대책 ==&lt;br /&gt;
&lt;br /&gt;
=== WPA2 이상 사용 ===&lt;br /&gt;
WEP와 WPA-TKIP는 사용하지 않는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
가능하면 WPA3를 사용하고, 호환성 때문에 어려운 경우 WPA2-AES를 사용한다.&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;
=== WPA3 사용 ===&lt;br /&gt;
지원 장치가 충분하다면 WPA3-Personal 또는 WPA3-Enterprise를 사용하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
WPA3는 비밀번호 기반 공격과 관리 프레임 공격에 대한 방어를 강화한다.&lt;br /&gt;
&lt;br /&gt;
=== 기업 환경에서는 802.1X 사용 ===&lt;br /&gt;
기업, 학교, 공공기관 등 다수 사용자가 있는 환경에서는 WPA2/WPA3-Enterprise와 802.1X 인증을 사용하는 것이 바람직하다.&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;
=== WPS 비활성화 ===&lt;br /&gt;
WPS는 편의성을 높이지만 공격 표면이 될 수 있다.&lt;br /&gt;
&lt;br /&gt;
특히 PIN 방식 WPS는 비활성화하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
=== SSID 관리 ===&lt;br /&gt;
SSID(Service Set Identifier)는 무선 네트워크 이름이다.&lt;br /&gt;
&lt;br /&gt;
SSID 숨김은 보안을 크게 높이는 방법은 아니지만, 불필요하게 조직명, 위치, 장비 정보 등을 노출하지 않는 것이 좋다.&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;
* 별도 VLAN 사용&lt;br /&gt;
* 접속 시간 제한&lt;br /&gt;
* 접속자 로그 관리&lt;br /&gt;
&lt;br /&gt;
=== 네트워크 분리 ===&lt;br /&gt;
업무망, 게스트망, IoT망, 관리망을 분리하면 침해 확산을 줄일 수 있다.&lt;br /&gt;
&lt;br /&gt;
대표적인 분리 방식은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* VLAN 분리&lt;br /&gt;
* 방화벽 정책 적용&lt;br /&gt;
* SSID별 네트워크 분리&lt;br /&gt;
* NAC 연동&lt;br /&gt;
* 접근 권한 기반 분리&lt;br /&gt;
&lt;br /&gt;
=== AP 관리 강화 ===&lt;br /&gt;
무선 AP 자체도 보안 관리 대상이다.&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;
* 비인가 AP 탐지&lt;br /&gt;
* 비정상 접속 시도&lt;br /&gt;
* 다수 인증 실패&lt;br /&gt;
* 동일 계정의 다중 접속&lt;br /&gt;
* 의심스러운 MAC 주소&lt;br /&gt;
* 비정상 트래픽&lt;br /&gt;
* AP 설정 변경 이력&lt;br /&gt;
&lt;br /&gt;
== 개인용 무선랜 보안 설정 ==&lt;br /&gt;
가정이나 소규모 환경에서는 다음 설정이 권장된다.&lt;br /&gt;
&lt;br /&gt;
* WPA3-Personal 사용&lt;br /&gt;
* WPA3 미지원 시 WPA2-AES 사용&lt;br /&gt;
* WEP, WPA, TKIP 사용 금지&lt;br /&gt;
* 강한 Wi-Fi 비밀번호 사용&lt;br /&gt;
* 공유기 관리자 비밀번호 변경&lt;br /&gt;
* WPS 비활성화&lt;br /&gt;
* 공유기 펌웨어 업데이트&lt;br /&gt;
* 게스트 네트워크 분리&lt;br /&gt;
* 불필요한 원격 관리 비활성화&lt;br /&gt;
&lt;br /&gt;
== 기업용 무선랜 보안 설정 ==&lt;br /&gt;
기업 환경에서는 다음 사항을 고려해야 한다.&lt;br /&gt;
&lt;br /&gt;
* WPA2-Enterprise 또는 WPA3-Enterprise 사용&lt;br /&gt;
* 802.1X 인증 적용&lt;br /&gt;
* RADIUS 서버 연동&lt;br /&gt;
* 사용자별 계정 관리&lt;br /&gt;
* 인증서 기반 인증 검토&lt;br /&gt;
* 게스트망과 업무망 분리&lt;br /&gt;
* NAC 연동&lt;br /&gt;
* 무선 침입 탐지 및 차단&lt;br /&gt;
* 비인가 AP 탐지&lt;br /&gt;
* 접속 로그 보관&lt;br /&gt;
* AP 펌웨어와 설정 관리&lt;br /&gt;
* 보안 정책 정기 점검&lt;br /&gt;
&lt;br /&gt;
== 무선랜 보안 장비와 기술 ==&lt;br /&gt;
&lt;br /&gt;
=== 무선 침입 탐지 시스템 ===&lt;br /&gt;
무선 침입 탐지 시스템(WIDS, Wireless Intrusion Detection System)은 무선 환경의 이상 행위를 탐지하는 시스템이다.&lt;br /&gt;
&lt;br /&gt;
탐지 대상은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* Rogue AP&lt;br /&gt;
* Evil Twin AP&lt;br /&gt;
* 비정상 인증 시도&lt;br /&gt;
* Deauthentication 공격&lt;br /&gt;
* 비인가 단말 접속&lt;br /&gt;
* 의심스러운 무선 프레임&lt;br /&gt;
&lt;br /&gt;
=== 무선 침입 방지 시스템 ===&lt;br /&gt;
무선 침입 방지 시스템(WIPS, Wireless Intrusion Prevention System)은 무선 공격을 탐지하고 차단하는 시스템이다.&lt;br /&gt;
&lt;br /&gt;
WIDS가 탐지 중심이라면 WIPS는 차단 기능까지 포함한다.&lt;br /&gt;
&lt;br /&gt;
=== NAC ===&lt;br /&gt;
[[NAC]](Network Access Control)는 네트워크에 접속하는 단말의 보안 상태와 권한을 확인하여 접근을 통제하는 기술이다.&lt;br /&gt;
&lt;br /&gt;
무선랜에서는 사용자 인증, 단말 보안 상태 확인, VLAN 할당 등에 활용될 수 있다.&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;
| Open&lt;br /&gt;
| 없음&lt;br /&gt;
| 없음&lt;br /&gt;
| 누구나 접속 가능. 도청 위험 큼&lt;br /&gt;
|-&lt;br /&gt;
| Enhanced Open&lt;br /&gt;
| 없음&lt;br /&gt;
| OWE 기반 암호화&lt;br /&gt;
| 공개망에서 무선 구간 암호화 제공. AP 인증은 제공하지 않음&lt;br /&gt;
|-&lt;br /&gt;
| WEP&lt;br /&gt;
| 공유키&lt;br /&gt;
| RC4 기반&lt;br /&gt;
| 취약하여 사용 금지&lt;br /&gt;
|-&lt;br /&gt;
| WPA-Personal&lt;br /&gt;
| PSK&lt;br /&gt;
| TKIP&lt;br /&gt;
| WEP보다 개선되었으나 현재는 권장되지 않음&lt;br /&gt;
|-&lt;br /&gt;
| WPA2-Personal&lt;br /&gt;
| PSK&lt;br /&gt;
| AES-CCMP&lt;br /&gt;
| 가정용·소규모 환경에서 널리 사용&lt;br /&gt;
|-&lt;br /&gt;
| WPA2-Enterprise&lt;br /&gt;
| 802.1X/EAP&lt;br /&gt;
| AES-CCMP&lt;br /&gt;
| 기업 환경에 적합&lt;br /&gt;
|-&lt;br /&gt;
| WPA3-Personal&lt;br /&gt;
| SAE&lt;br /&gt;
| 강화된 암호화&lt;br /&gt;
| 사전 공격 방어 강화&lt;br /&gt;
|-&lt;br /&gt;
| WPA3-Enterprise&lt;br /&gt;
| 802.1X/EAP&lt;br /&gt;
| 강화된 암호화&lt;br /&gt;
| 기업·공공 환경에 적합&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 무선랜 보안 점검 항목 ==&lt;br /&gt;
무선랜 보안 점검 시 확인할 항목은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* WEP 또는 WPA-TKIP 사용 여부&lt;br /&gt;
* WPA2-AES 또는 WPA3 사용 여부&lt;br /&gt;
* 무선랜 비밀번호 강도&lt;br /&gt;
* WPS 활성화 여부&lt;br /&gt;
* 공유기 관리자 비밀번호 변경 여부&lt;br /&gt;
* AP 펌웨어 최신화 여부&lt;br /&gt;
* 게스트망 분리 여부&lt;br /&gt;
* 업무망과 무선망 분리 여부&lt;br /&gt;
* Rogue AP 탐지 여부&lt;br /&gt;
* 접속 로그 관리 여부&lt;br /&gt;
* 802.1X 인증 적용 여부&lt;br /&gt;
* RADIUS 서버 운영 여부&lt;br /&gt;
* 인증서 검증 설정 여부&lt;br /&gt;
* PMF 적용 여부&lt;br /&gt;
* 무선 장비 관리자 접근 통제 여부&lt;br /&gt;
&lt;br /&gt;
== 침해사고 대응 관점 ==&lt;br /&gt;
무선랜 침해가 의심되는 경우 다음 사항을 확인한다.&lt;br /&gt;
&lt;br /&gt;
* AP 접속 로그&lt;br /&gt;
* 인증 실패 로그&lt;br /&gt;
* RADIUS 인증 기록&lt;br /&gt;
* 신규 접속 단말 목록&lt;br /&gt;
* 의심 MAC 주소&lt;br /&gt;
* 비인가 AP 존재 여부&lt;br /&gt;
* 동일 SSID의 위장 AP 존재 여부&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;
=== WPA2-Personal과 WPA2-Enterprise ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! WPA2-Personal&lt;br /&gt;
! WPA2-Enterprise&lt;br /&gt;
|-&lt;br /&gt;
| 인증 방식&lt;br /&gt;
| 사전 공유키&lt;br /&gt;
| 802.1X/EAP&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;
| RADIUS 서버 필요&lt;br /&gt;
|-&lt;br /&gt;
| 관리 편의성&lt;br /&gt;
| 단순함&lt;br /&gt;
| 체계적 관리 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SSID 숨김과 암호화 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| SSID 숨김&lt;br /&gt;
| 네트워크 이름을 자동 표시하지 않는 설정. 보안 효과는 제한적이다.&lt;br /&gt;
|-&lt;br /&gt;
| 암호화&lt;br /&gt;
| 무선 구간 데이터를 보호하는 핵심 보안 기능이다.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
SSID 숨김은 공격자가 무선랜을 발견하는 것을 완전히 막지 못하므로, WPA2/WPA3 기반 암호화와 강한 인증이 더 중요하다.&lt;br /&gt;
&lt;br /&gt;
=== MAC 필터링과 인증 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 설명&lt;br /&gt;
|-&lt;br /&gt;
| MAC 필터링&lt;br /&gt;
| 특정 MAC 주소만 접속하도록 제한하는 보조 수단&lt;br /&gt;
|-&lt;br /&gt;
| 인증&lt;br /&gt;
| 사용자 또는 단말의 정당성을 검증하는 핵심 보안 절차&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
MAC 주소는 위조가 가능하므로 MAC 필터링만으로는 충분한 보안 대책이 되지 않는다.&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 무선랜 보안은 전파 기반 통신의 도청, 위장 접속, 비인가 접근을 방지하기 위한 보안 영역이다.&lt;br /&gt;
* WEP는 취약하므로 사용하지 않아야 한다.&lt;br /&gt;
* WPA는 WEP를 보완하기 위해 등장했으나 현재는 WPA2 이상이 권장된다.&lt;br /&gt;
* WPA2는 AES-CCMP 기반 보안을 제공한다.&lt;br /&gt;
* WPA3-Personal은 SAE를 사용하여 사전 공격 방어를 강화한다.&lt;br /&gt;
* WPA2/WPA3-Enterprise는 802.1X와 RADIUS 서버를 사용하여 사용자별 인증을 수행할 수 있다.&lt;br /&gt;
* Enhanced Open은 공개 무선랜에서 OWE 기반 암호화를 제공하지만 AP 인증은 제공하지 않는다.&lt;br /&gt;
* PMF는 관리 프레임 위조 공격을 줄이기 위한 보호 기능이다.&lt;br /&gt;
* WPS PIN 방식은 공격에 취약할 수 있으므로 비활성화하는 것이 좋다.&lt;br /&gt;
* Rogue AP와 Evil Twin AP는 무선랜 환경의 대표적인 위협이다.&lt;br /&gt;
* SSID 숨김과 MAC 필터링은 보조적 수단일 뿐 강한 보안 대책으로 보기 어렵다.&lt;br /&gt;
* 기업 환경에서는 게스트망과 업무망을 분리하고, 802.1X 기반 인증을 적용하는 것이 바람직하다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[무선랜]]&lt;br /&gt;
* [[네트워크 보안]]&lt;br /&gt;
* [[WEP]]&lt;br /&gt;
* [[WPA]]&lt;br /&gt;
* [[WPA2]]&lt;br /&gt;
* [[WPA3]]&lt;br /&gt;
* [[IEEE 802.1X]]&lt;br /&gt;
* [[RADIUS]]&lt;br /&gt;
* [[EAP]]&lt;br /&gt;
* [[액세스 포인트]]&lt;br /&gt;
* [[SSID]]&lt;br /&gt;
* [[NAC]]&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%9E%A5%EC%B9%98_%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84&amp;diff=53037</id>
		<title>장치 드라이버</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%9E%A5%EC%B9%98_%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84&amp;diff=53037"/>
		<updated>2026-05-17T04:36:33Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 장치 드라이버(Device Driver)는 운영체제가 하드웨어 장치를 제어하고 사용할 수 있도록 중간에서 제어 기능을 제공하는 시스템 소프트웨어이다. 응용 프로그램은 하드웨어를 직접 제어하지 않고, 운영체제와 장치 드라이버를 통해 장치에 접근한다.  == 개요 == 장치 드라이버는 운영체제와 하드웨어 장치 사이의 인터페이스 역할을 한다. 컴퓨터에는 키보드, 마우...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치 드라이버(Device Driver)는 [[운영체제]]가 하드웨어 장치를 제어하고 사용할 수 있도록 중간에서 제어 기능을 제공하는 시스템 소프트웨어이다. 응용 프로그램은 하드웨어를 직접 제어하지 않고, 운영체제와 장치 드라이버를 통해 장치에 접근한다.&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;
== 필요성 ==&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;
장치 드라이버는 보통 운영체제의 커널과 밀접하게 동작한다. 특히 디스크, 네트워크, 그래픽, USB 같은 핵심 장치의 드라이버는 시스템 안정성에 큰 영향을 미친다.&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;
* 파일 시스템 드라이버&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;
* 일부 USB 장치 드라이버&lt;br /&gt;
* 사용자 공간 파일 시스템 드라이버&lt;br /&gt;
&lt;br /&gt;
== 장치 드라이버의 종류 ==&lt;br /&gt;
&lt;br /&gt;
=== 문자 장치 드라이버 ===&lt;br /&gt;
문자 장치 드라이버(Character Device Driver)는 데이터를 문자 또는 바이트 스트림 단위로 처리하는 장치를 제어한다.&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;
블록 장치 드라이버(Block Device Driver)는 데이터를 일정한 블록 단위로 읽고 쓰는 장치를 제어한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* 하드 디스크 드라이브&lt;br /&gt;
* SSD&lt;br /&gt;
* USB 저장장치&lt;br /&gt;
* 광디스크&lt;br /&gt;
&lt;br /&gt;
블록 장치는 파일 시스템과 밀접하게 연결된다.&lt;br /&gt;
&lt;br /&gt;
=== 네트워크 장치 드라이버 ===&lt;br /&gt;
네트워크 장치 드라이버(Network Device Driver)는 네트워크 인터페이스 카드를 제어하여 데이터 송수신을 처리한다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* 이더넷 카드 드라이버&lt;br /&gt;
* 무선 랜카드 드라이버&lt;br /&gt;
* 가상 네트워크 어댑터 드라이버&lt;br /&gt;
&lt;br /&gt;
=== 그래픽 장치 드라이버 ===&lt;br /&gt;
그래픽 장치 드라이버(Graphics Device Driver)는 그래픽 카드와 디스플레이 장치를 제어한다.&lt;br /&gt;
&lt;br /&gt;
그래픽 드라이버는 화면 출력, 해상도 설정, 2D/3D 가속, GPU 연산 등에 영향을 준다.&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;
예:&lt;br /&gt;
* 디스크 읽기&lt;br /&gt;
* 디스크 쓰기&lt;br /&gt;
* 네트워크 패킷 송신&lt;br /&gt;
* 프린터 출력&lt;br /&gt;
* 화면 출력&lt;br /&gt;
&lt;br /&gt;
=== 인터럽트 처리 ===&lt;br /&gt;
[[인터럽트]]는 장치가 CPU에 특정 이벤트 발생을 알리는 신호이다.&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;
입출력 장치와 CPU, 메모리는 동작 속도가 다르기 때문에 버퍼가 필요하다.&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;
플러그 앤 플레이(Plug and Play)는 사용자가 장치를 연결하면 운영체제가 자동으로 장치를 인식하고 필요한 드라이버를 설정하는 기능이다.&lt;br /&gt;
&lt;br /&gt;
이 기능이 없던 과거에는 사용자가 직접 IRQ, I/O 주소, 드라이버 파일 등을 설정해야 하는 경우가 많았다.&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;
{| 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;
| 예&lt;br /&gt;
| 그래픽 카드 드라이버, 프린터 드라이버&lt;br /&gt;
| SSD 펌웨어, BIOS/UEFI, 라우터 펌웨어&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 장치 드라이버와 API ==&lt;br /&gt;
응용 프로그램은 일반적으로 장치 드라이버를 직접 호출하지 않고 운영체제가 제공하는 [[API]]나 시스템 호출을 사용한다.&lt;br /&gt;
&lt;br /&gt;
예를 들어 파일을 읽는 프로그램은 디스크 드라이버를 직접 제어하지 않고, 운영체제의 파일 입출력 API를 호출한다. 운영체제는 내부적으로 파일 시스템과 디스크 드라이버를 이용해 실제 장치를 제어한다.&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;
드라이버 서명(Driver Signing)은 장치 드라이버가 신뢰할 수 있는 개발자에 의해 작성되었고 변경되지 않았음을 확인하기 위한 전자서명 방식이다.&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;
특히 커널 모드 드라이버 오류는 운영체제 전체 장애로 이어질 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 가상 장치 드라이버 ==&lt;br /&gt;
가상 장치 드라이버(Virtual Device Driver)는 실제 물리 장치가 아니라 가상화된 장치나 소프트웨어 장치를 제어하는 드라이버이다.&lt;br /&gt;
&lt;br /&gt;
예:&lt;br /&gt;
* 가상 네트워크 어댑터&lt;br /&gt;
* 가상 디스크 드라이버&lt;br /&gt;
* VPN 어댑터&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;
같은 하드웨어라도 Windows, Linux, macOS에서 각각 다른 드라이버가 필요할 수 있다. 이는 운영체제마다 커널 구조, 드라이버 모델, 시스템 호출 방식, 보안 정책이 다르기 때문이다.&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;
&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;
! 장치 드라이버&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;
| Windows, Linux, macOS&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;
! 장치 드라이버&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;
{| 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;
&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;
| 네트워크 패킷 송수신 처리&lt;br /&gt;
|-&lt;br /&gt;
| 프린터&lt;br /&gt;
| 출력 데이터를 프린터 명령으로 변환&lt;br /&gt;
|-&lt;br /&gt;
| USB 장치&lt;br /&gt;
| 연결된 USB 장치의 인식과 제어&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 장치 드라이버는 운영체제와 하드웨어 사이의 인터페이스 역할을 한다.&lt;br /&gt;
* 응용 프로그램은 일반적으로 장치 드라이버를 직접 제어하지 않고 운영체제 API를 이용한다.&lt;br /&gt;
* 장치 드라이버는 입출력 요청을 장치가 이해할 수 있는 명령으로 변환한다.&lt;br /&gt;
* 커널 모드 드라이버는 성능과 하드웨어 접근성이 높지만 오류 시 시스템 전체에 영향을 줄 수 있다.&lt;br /&gt;
* 사용자 모드 드라이버는 안정성 측면에서 유리하다.&lt;br /&gt;
* 블록 장치 드라이버는 디스크나 SSD처럼 블록 단위 입출력을 처리한다.&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;
* [[DMA]]&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=%EB%B9%84%ED%9C%98%EB%B0%9C%EC%84%B1_%EB%A9%94%EB%AA%A8%EB%A6%AC&amp;diff=53033</id>
		<title>비휘발성 메모리</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EB%B9%84%ED%9C%98%EB%B0%9C%EC%84%B1_%EB%A9%94%EB%AA%A8%EB%A6%AC&amp;diff=53033"/>
		<updated>2026-05-17T04:34:03Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 비휘발성 메모리(Non-Volatile Memory, NVM)는 전원이 차단되어도 저장된 데이터를 유지하는 메모리이다. 전원이 꺼지면 내용이 사라지는 휘발성 메모리와 달리, 전원 공급이 중단된 후에도 데이터가 보존되므로 저장장치, 펌웨어, 임베디드 시스템, 모바일 기기, 서버 스토리지 등에 널리 사용된다.  == 개요 == 비휘발성 메모리는 전원이 없는 상태에서도 데이터를 유지...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;비휘발성 메모리(Non-Volatile Memory, NVM)는 전원이 차단되어도 저장된 데이터를 유지하는 메모리이다. 전원이 꺼지면 내용이 사라지는 [[휘발성 메모리]]와 달리, 전원 공급이 중단된 후에도 데이터가 보존되므로 저장장치, 펌웨어, 임베디드 시스템, 모바일 기기, 서버 스토리지 등에 널리 사용된다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
비휘발성 메모리는 전원이 없는 상태에서도 데이터를 유지할 수 있는 기억장치이다. 컴퓨터 시스템에서 프로그램, 운영체제, 설정값, 펌웨어, 사용자 데이터 등을 장기간 보관하는 데 사용된다.&lt;br /&gt;
&lt;br /&gt;
대표적인 비휘발성 메모리에는 [[ROM]], [[플래시 메모리]], [[EEPROM]], [[SSD]], [[NAND 플래시]], [[NOR 플래시]] 등이 있다. 넓은 의미에서는 [[하드 디스크 드라이브]]나 광디스크 같은 보조기억장치도 비휘발성 저장매체에 포함될 수 있지만, 일반적으로 메모리 기술을 설명할 때는 반도체 기반 저장매체를 중심으로 다룬다.&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;
! 휘발성 메모리&lt;br /&gt;
|-&lt;br /&gt;
| 전원 차단 시 데이터&lt;br /&gt;
| 유지됨&lt;br /&gt;
| 사라짐&lt;br /&gt;
|-&lt;br /&gt;
| 대표 예&lt;br /&gt;
| ROM, 플래시 메모리, SSD&lt;br /&gt;
| RAM, DRAM, SRAM&lt;br /&gt;
|-&lt;br /&gt;
| 주요 용도&lt;br /&gt;
| 장기 저장, 펌웨어 저장, 보조기억장치&lt;br /&gt;
| 실행 중인 프로그램과 데이터 임시 저장&lt;br /&gt;
|-&lt;br /&gt;
| 속도&lt;br /&gt;
| 일반적으로 RAM보다 느림&lt;br /&gt;
| 일반적으로 빠름&lt;br /&gt;
|-&lt;br /&gt;
| 비용&lt;br /&gt;
| 종류에 따라 다름&lt;br /&gt;
| 고속 메모리는 상대적으로 비쌈&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예를 들어 컴퓨터의 [[RAM]]은 전원을 끄면 내용이 사라지지만, [[SSD]]나 플래시 메모리에 저장된 파일은 전원이 꺼져도 유지된다.&lt;br /&gt;
&lt;br /&gt;
== 주요 종류 ==&lt;br /&gt;
&lt;br /&gt;
=== ROM ===&lt;br /&gt;
[[ROM]](Read Only Memory)은 읽기 전용 메모리라는 의미를 가진 비휘발성 메모리이다. 초기에는 제조 단계에서 내용이 고정되는 방식이었으며, 시스템의 기본 동작에 필요한 프로그램을 저장하는 데 사용되었다.&lt;br /&gt;
&lt;br /&gt;
대표적인 용도는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 부팅 펌웨어 저장&lt;br /&gt;
* 임베디드 시스템 프로그램 저장&lt;br /&gt;
* 장치 제어 코드 저장&lt;br /&gt;
&lt;br /&gt;
=== PROM ===&lt;br /&gt;
PROM(Programmable ROM)은 사용자가 한 번만 기록할 수 있는 ROM이다. 한 번 기록하면 일반적으로 내용을 다시 변경할 수 없다.&lt;br /&gt;
&lt;br /&gt;
=== EPROM ===&lt;br /&gt;
EPROM(Erasable Programmable ROM)은 자외선을 이용해 내용을 지운 뒤 다시 기록할 수 있는 ROM이다. 과거 펌웨어 개발과 실험용 장치에서 사용되었다.&lt;br /&gt;
&lt;br /&gt;
=== EEPROM ===&lt;br /&gt;
[[EEPROM]](Electrically Erasable Programmable ROM)은 전기적으로 데이터를 지우고 다시 기록할 수 있는 비휘발성 메모리이다.&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;
[[플래시 메모리]]는 EEPROM의 한 종류로, 블록 단위로 데이터를 지우고 다시 기록할 수 있는 비휘발성 메모리이다. 현재 가장 널리 사용되는 비휘발성 반도체 메모리이다.&lt;br /&gt;
&lt;br /&gt;
대표적인 활용 예는 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* [[SSD]]&lt;br /&gt;
* USB 메모리&lt;br /&gt;
* 메모리 카드&lt;br /&gt;
* 스마트폰 저장장치&lt;br /&gt;
* 디지털카메라 저장장치&lt;br /&gt;
* 임베디드 장치 저장장치&lt;br /&gt;
&lt;br /&gt;
=== NAND 플래시 ===&lt;br /&gt;
[[NAND 플래시]]는 대용량 저장에 적합한 플래시 메모리 구조이다.&lt;br /&gt;
&lt;br /&gt;
특징은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 높은 집적도&lt;br /&gt;
* 대용량 저장에 유리&lt;br /&gt;
* 블록 단위 삭제&lt;br /&gt;
* SSD와 USB 메모리에 널리 사용&lt;br /&gt;
* 순차 읽기·쓰기와 대용량 저장에 적합&lt;br /&gt;
&lt;br /&gt;
=== NOR 플래시 ===&lt;br /&gt;
[[NOR 플래시]]는 임의 접근과 코드 실행에 유리한 플래시 메모리 구조이다.&lt;br /&gt;
&lt;br /&gt;
특징은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 빠른 임의 읽기&lt;br /&gt;
* 코드 직접 실행에 적합&lt;br /&gt;
* NAND 플래시보다 용량 대비 비용이 높음&lt;br /&gt;
* 펌웨어 저장에 사용&lt;br /&gt;
&lt;br /&gt;
=== NVRAM ===&lt;br /&gt;
[[NVRAM]](Non-Volatile RAM)은 전원이 꺼져도 데이터를 유지하는 RAM 계열 메모리를 의미한다.&lt;br /&gt;
&lt;br /&gt;
전통적으로는 배터리 백업 SRAM 등을 가리키기도 했고, 최근에는 MRAM, FRAM, PCM 같은 차세대 비휘발성 메모리까지 포함하여 사용되기도 한다.&lt;br /&gt;
&lt;br /&gt;
=== MRAM ===&lt;br /&gt;
[[MRAM]](Magnetoresistive RAM)은 자기 저항 특성을 이용하는 비휘발성 메모리이다.&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;
=== FRAM ===&lt;br /&gt;
[[FRAM]](Ferroelectric RAM)은 강유전체 특성을 이용하는 비휘발성 메모리이다.&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;
=== PCM ===&lt;br /&gt;
[[상변화 메모리]](PCM, Phase Change Memory)는 물질의 상변화 특성을 이용하여 데이터를 저장하는 비휘발성 메모리이다.&lt;br /&gt;
&lt;br /&gt;
상태 변화에 따라 전기적 저항이 달라지는 특성을 이용한다.&lt;br /&gt;
&lt;br /&gt;
=== 3D XPoint ===&lt;br /&gt;
[[3D XPoint]]는 인텔과 마이크론이 개발한 비휘발성 메모리 기술이다. [[옵테인 메모리]]와 [[Optane SSD]] 제품군의 기반 기술로 사용되었다.&lt;br /&gt;
&lt;br /&gt;
DRAM과 NAND 플래시 사이의 성능·용량 계층을 목표로 했으나, Optane 제품군은 이후 단종되었다.&lt;br /&gt;
&lt;br /&gt;
== 플래시 메모리의 구조 ==&lt;br /&gt;
플래시 메모리는 데이터를 셀(Cell)에 저장한다. 하나의 셀이 저장하는 비트 수에 따라 다음과 같이 구분된다.&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;
| SLC&lt;br /&gt;
| 1비트&lt;br /&gt;
| 속도와 내구성이 우수하지만 가격이 높음&lt;br /&gt;
|-&lt;br /&gt;
| MLC&lt;br /&gt;
| 2비트&lt;br /&gt;
| SLC보다 용량 효율이 높지만 내구성은 낮음&lt;br /&gt;
|-&lt;br /&gt;
| TLC&lt;br /&gt;
| 3비트&lt;br /&gt;
| 소비자용 SSD에서 널리 사용&lt;br /&gt;
|-&lt;br /&gt;
| QLC&lt;br /&gt;
| 4비트&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;
&lt;br /&gt;
== 장점 ==&lt;br /&gt;
비휘발성 메모리의 장점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 전원이 꺼져도 데이터 유지&lt;br /&gt;
* 기계적 구동부가 없는 반도체 기반 구현 가능&lt;br /&gt;
* HDD보다 충격에 강한 저장장치 구현 가능&lt;br /&gt;
* 소형화에 유리&lt;br /&gt;
* 모바일 기기와 임베디드 시스템에 적합&lt;br /&gt;
* 빠른 임의 접근 가능&lt;br /&gt;
&lt;br /&gt;
== 단점 ==&lt;br /&gt;
비휘발성 메모리의 단점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* DRAM보다 속도가 느린 경우가 많음&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;
* [[SSD]]&lt;br /&gt;
* USB 메모리&lt;br /&gt;
* 메모리 카드&lt;br /&gt;
* 스마트폰 저장장치&lt;br /&gt;
* 태블릿 저장장치&lt;br /&gt;
* 디지털카메라 저장매체&lt;br /&gt;
* 임베디드 시스템&lt;br /&gt;
* IoT 장치&lt;br /&gt;
* 펌웨어 저장&lt;br /&gt;
* BIOS 또는 UEFI 저장&lt;br /&gt;
* 차량용 전자장치&lt;br /&gt;
* 산업용 제어장치&lt;br /&gt;
&lt;br /&gt;
== SSD와 비휘발성 메모리 ==&lt;br /&gt;
[[SSD]]는 NAND 플래시 메모리를 기반으로 하는 대표적인 비휘발성 저장장치이다.&lt;br /&gt;
&lt;br /&gt;
SSD는 다음과 같은 구성 요소를 포함한다.&lt;br /&gt;
&lt;br /&gt;
* NAND 플래시 메모리&lt;br /&gt;
* 컨트롤러&lt;br /&gt;
* DRAM 캐시 또는 SLC 캐시&lt;br /&gt;
* 펌웨어&lt;br /&gt;
* 오류 정정 코드&lt;br /&gt;
* 웨어 레벨링 기능&lt;br /&gt;
&lt;br /&gt;
SSD는 HDD보다 빠른 임의 접근 성능과 낮은 지연 시간을 제공하지만, 내부적으로는 플래시 메모리의 쓰기·삭제 특성을 관리해야 한다.&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;
! 휘발성 여부&lt;br /&gt;
|-&lt;br /&gt;
| 레지스터&lt;br /&gt;
| CPU 레지스터&lt;br /&gt;
| 휘발성&lt;br /&gt;
|-&lt;br /&gt;
| 캐시 메모리&lt;br /&gt;
| L1, L2, L3 캐시&lt;br /&gt;
| 휘발성&lt;br /&gt;
|-&lt;br /&gt;
| 주기억장치&lt;br /&gt;
| DRAM&lt;br /&gt;
| 휘발성&lt;br /&gt;
|-&lt;br /&gt;
| 고속 비휘발성 메모리&lt;br /&gt;
| Optane, MRAM, PCM 등&lt;br /&gt;
| 비휘발성&lt;br /&gt;
|-&lt;br /&gt;
| 보조기억장치&lt;br /&gt;
| SSD, HDD&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;
예를 들어 운영체제는 SSD에 저장되어 있다가 부팅 시 RAM으로 적재되어 실행된다.&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;
[[오류 정정 코드]](ECC, Error Correction Code)는 메모리에 저장된 데이터의 오류를 검출하고 수정하기 위한 기술이다.&lt;br /&gt;
&lt;br /&gt;
플래시 메모리는 사용 시간이 늘어나면 오류 가능성이 증가하므로 ECC가 중요하다.&lt;br /&gt;
&lt;br /&gt;
=== 트림 ===&lt;br /&gt;
[[TRIM]]은 운영체제가 SSD에 더 이상 사용하지 않는 데이터 블록을 알려주는 명령이다.&lt;br /&gt;
&lt;br /&gt;
SSD는 TRIM 정보를 활용하여 쓰기 성능과 수명 관리를 개선할 수 있다.&lt;br /&gt;
&lt;br /&gt;
=== 가비지 컬렉션 ===&lt;br /&gt;
[[가비지 컬렉션]]은 SSD 내부에서 더 이상 유효하지 않은 데이터를 정리하고, 쓰기 가능한 블록을 확보하는 과정이다.&lt;br /&gt;
&lt;br /&gt;
== 자격시험 학습 관점 ==&lt;br /&gt;
자격시험에서는 비휘발성 메모리를 다음 관점에서 이해하는 것이 좋다.&lt;br /&gt;
&lt;br /&gt;
* 전원 차단 후 데이터 유지 여부&lt;br /&gt;
* 휘발성 메모리와의 차이&lt;br /&gt;
* ROM, EEPROM, 플래시 메모리의 차이&lt;br /&gt;
* NAND 플래시와 NOR 플래시의 차이&lt;br /&gt;
* SSD와 플래시 메모리의 관계&lt;br /&gt;
* 메모리 계층 구조에서의 위치&lt;br /&gt;
* 쓰기 횟수 제한과 웨어 레벨링&lt;br /&gt;
* RAM과 저장장치의 역할 구분&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 비휘발성 메모리는 전원이 꺼져도 데이터를 유지한다.&lt;br /&gt;
* ROM, EEPROM, 플래시 메모리는 대표적인 비휘발성 메모리이다.&lt;br /&gt;
* RAM은 일반적으로 휘발성 메모리이다.&lt;br /&gt;
* 플래시 메모리는 EEPROM의 한 종류로, 블록 단위 삭제가 가능하다.&lt;br /&gt;
* NAND 플래시는 대용량 저장에 적합하고, SSD와 USB 메모리에 널리 사용된다.&lt;br /&gt;
* NOR 플래시는 빠른 임의 읽기와 코드 실행에 유리하다.&lt;br /&gt;
* SSD는 주로 NAND 플래시 기반의 비휘발성 저장장치이다.&lt;br /&gt;
* 플래시 메모리는 쓰기·삭제 횟수에 제한이 있으므로 웨어 레벨링이 중요하다.&lt;br /&gt;
* 비휘발성 메모리는 저장장치와 펌웨어 저장에 널리 사용된다.&lt;br /&gt;
* Optane Memory는 3D XPoint 기반 비휘발성 메모리 기술을 활용한 제품군이다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[휘발성 메모리]]&lt;br /&gt;
* [[메모리]]&lt;br /&gt;
* [[기억장치]]&lt;br /&gt;
* [[ROM]]&lt;br /&gt;
* [[EEPROM]]&lt;br /&gt;
* [[플래시 메모리]]&lt;br /&gt;
* [[NAND 플래시]]&lt;br /&gt;
* [[NOR 플래시]]&lt;br /&gt;
* [[SSD]]&lt;br /&gt;
* [[옵테인 메모리]]&lt;br /&gt;
* [[3D XPoint]]&lt;br /&gt;
* [[메모리 계층 구조]]&lt;br /&gt;
* [[웨어 레벨링]]&lt;br /&gt;
* [[TRIM]]&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%98%B5%ED%85%8C%EC%9D%B8_%EB%A9%94%EB%AA%A8%EB%A6%AC&amp;diff=53031</id>
		<title>옵테인 메모리</title>
		<link rel="alternate" type="text/html" href="https://devhrxoobm.itwiki.kr/index.php?title=%EC%98%B5%ED%85%8C%EC%9D%B8_%EB%A9%94%EB%AA%A8%EB%A6%AC&amp;diff=53031"/>
		<updated>2026-05-17T04:32:40Z</updated>

		<summary type="html">&lt;p&gt;라이언: 새 문서: 옵테인 메모리(Intel Optane Memory)는 인텔이 3D XPoint 기술을 기반으로 출시한 비휘발성 메모리 및 저장장치 가속 기술이다. 일반적인 DRAM을 대체하는 메모리라기보다는, 저장장치와 메모리 사이의 성능 간격을 줄이기 위한 중간 계층 기술로 이해할 수 있다.  == 개요 == 옵테인 메모리는 인텔의 Optane 브랜드로 출시된 메모리 및 저장장치 기술이다. 3D XPoint라는 비휘발성...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;옵테인 메모리(Intel Optane Memory)는 인텔이 3D XPoint 기술을 기반으로 출시한 비휘발성 메모리 및 저장장치 가속 기술이다. 일반적인 DRAM을 대체하는 메모리라기보다는, 저장장치와 메모리 사이의 성능 간격을 줄이기 위한 중간 계층 기술로 이해할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
옵테인 메모리는 인텔의 Optane 브랜드로 출시된 메모리 및 저장장치 기술이다. 3D XPoint라는 비휘발성 메모리 기술을 기반으로 하며, 전원이 꺼져도 데이터가 유지되는 특성을 가진다.&lt;br /&gt;
&lt;br /&gt;
소비자용 PC에서의 Intel Optane Memory는 주로 느린 [[하드 디스크 드라이브]]나 SATA 기반 저장장치를 가속하기 위한 캐시 장치로 사용되었다. 자주 사용하는 데이터와 프로그램을 Optane 모듈에 저장하여 부팅, 프로그램 실행, 파일 접근 속도를 개선하는 방식이다.&lt;br /&gt;
&lt;br /&gt;
다만 Optane이라는 이름은 단일 제품만을 의미하지 않는다. Intel Optane Memory 모듈, Optane SSD, Optane Persistent Memory 등 여러 제품군에 사용되었다.&lt;br /&gt;
&lt;br /&gt;
== 등장 배경 ==&lt;br /&gt;
컴퓨터 시스템에서는 [[DRAM]]과 [[SSD]], [[하드 디스크 드라이브]] 사이에 큰 성능 차이가 존재한다.&lt;br /&gt;
&lt;br /&gt;
* DRAM은 매우 빠르지만 비싸고 전원이 꺼지면 데이터가 사라진다.&lt;br /&gt;
* NAND 플래시 기반 SSD는 비휘발성이지만 DRAM보다 느리다.&lt;br /&gt;
* HDD는 대용량 저장에 유리하지만 접근 속도가 느리다.&lt;br /&gt;
&lt;br /&gt;
옵테인 메모리는 이러한 계층 사이의 간격을 줄이기 위해 등장하였다. 특히 HDD를 사용하는 PC에서 SSD에 가까운 체감 성능을 제공하는 것을 목표로 하였다.&lt;br /&gt;
&lt;br /&gt;
== 기술적 특징 ==&lt;br /&gt;
=== 3D XPoint ===&lt;br /&gt;
3D XPoint는 인텔과 마이크론이 공동으로 개발한 비휘발성 메모리 기술이다.&lt;br /&gt;
&lt;br /&gt;
일반적인 NAND 플래시와 달리 낮은 지연 시간과 높은 내구성을 목표로 설계되었다. Optane 제품군은 이 3D XPoint 기술을 기반으로 한다.&lt;br /&gt;
&lt;br /&gt;
=== 비휘발성 ===&lt;br /&gt;
옵테인 메모리는 비휘발성 메모리이다.&lt;br /&gt;
&lt;br /&gt;
즉, 전원이 꺼져도 저장된 데이터가 유지된다. 이 점에서 전원이 꺼지면 데이터가 사라지는 DRAM과 다르다.&lt;br /&gt;
&lt;br /&gt;
=== 낮은 지연 시간 ===&lt;br /&gt;
옵테인 기술은 NAND 플래시 기반 저장장치보다 낮은 지연 시간을 목표로 한다.&lt;br /&gt;
&lt;br /&gt;
특히 작은 크기의 임의 읽기·쓰기 작업에서 장점이 있었다.&lt;br /&gt;
&lt;br /&gt;
=== 높은 내구성 ===&lt;br /&gt;
옵테인 기반 저장장치는 일반 NAND SSD보다 쓰기 내구성 측면에서 강점이 있는 제품군으로 평가되었다.&lt;br /&gt;
&lt;br /&gt;
다만 실제 내구성과 성능은 제품 종류와 용도에 따라 달라진다.&lt;br /&gt;
&lt;br /&gt;
== 주요 제품군 ==&lt;br /&gt;
Optane이라는 이름은 여러 형태의 제품에 사용되었다.&lt;br /&gt;
&lt;br /&gt;
=== Intel Optane Memory ===&lt;br /&gt;
Intel Optane Memory는 소비자용 PC에서 저장장치 가속용으로 사용된 모듈이다.&lt;br /&gt;
&lt;br /&gt;
주로 M.2 형태로 장착되며, [[Intel RST]]와 함께 동작하여 HDD나 SATA SSD의 캐시 역할을 수행한다.&lt;br /&gt;
&lt;br /&gt;
특징은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 자주 사용하는 데이터 캐싱&lt;br /&gt;
* HDD 기반 시스템의 체감 속도 향상&lt;br /&gt;
* 부팅 시간 단축&lt;br /&gt;
* 자주 사용하는 프로그램 실행 속도 개선&lt;br /&gt;
* 일반 DRAM 대체 불가&lt;br /&gt;
&lt;br /&gt;
=== Intel Optane SSD ===&lt;br /&gt;
Intel Optane SSD는 Optane 기술을 사용한 독립적인 저장장치이다.&lt;br /&gt;
&lt;br /&gt;
일반 Optane Memory 모듈이 저장장치 가속용 캐시에 가까웠다면, Optane SSD는 하나의 NVMe SSD처럼 사용할 수 있는 저장장치이다.&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;
=== Intel Optane Persistent Memory ===&lt;br /&gt;
Intel Optane Persistent Memory는 서버용 메모리 계층 제품이다.&lt;br /&gt;
&lt;br /&gt;
DIMM 슬롯에 장착되어 메모리 채널을 통해 사용되며, DRAM보다 큰 용량과 비휘발성을 제공하는 것을 목표로 하였다.&lt;br /&gt;
&lt;br /&gt;
특징은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 서버용 제품&lt;br /&gt;
* 메모리 채널 사용&lt;br /&gt;
* 전원 차단 후에도 데이터 유지&lt;br /&gt;
* 대용량 메모리 구성이 필요한 환경에 활용&lt;br /&gt;
* 일반 소비자용 Optane Memory와 구분 필요&lt;br /&gt;
&lt;br /&gt;
== 동작 방식 ==&lt;br /&gt;
소비자용 Intel Optane Memory는 일반적으로 저장장치 캐시로 동작한다.&lt;br /&gt;
&lt;br /&gt;
# 사용자는 HDD 또는 SATA SSD를 기본 저장장치로 사용한다.&lt;br /&gt;
# Optane Memory 모듈이 자주 사용되는 데이터와 프로그램을 캐싱한다.&lt;br /&gt;
# 운영체제와 드라이버가 사용 패턴을 분석한다.&lt;br /&gt;
# 자주 접근하는 데이터는 Optane Memory에서 빠르게 읽는다.&lt;br /&gt;
# 사용자는 HDD만 사용할 때보다 빠른 응답성을 체감할 수 있다.&lt;br /&gt;
&lt;br /&gt;
이 구조는 저장장치 자체의 전체 용량을 늘리는 것이 아니라, 자주 사용하는 데이터 접근을 빠르게 만드는 방식이다.&lt;br /&gt;
&lt;br /&gt;
== DRAM과의 차이 ==&lt;br /&gt;
옵테인 메모리는 이름에 &amp;quot;메모리&amp;quot;가 포함되어 있지만 일반적인 [[RAM]]이나 [[DRAM]]을 대체하는 것은 아니다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! DRAM&lt;br /&gt;
! Optane Memory&lt;br /&gt;
|-&lt;br /&gt;
| 휘발성&lt;br /&gt;
| 휘발성&lt;br /&gt;
| 비휘발성&lt;br /&gt;
|-&lt;br /&gt;
| 주된 용도&lt;br /&gt;
| CPU가 직접 사용하는 작업 메모리&lt;br /&gt;
| 저장장치 가속 또는 중간 계층 저장&lt;br /&gt;
|-&lt;br /&gt;
| 속도&lt;br /&gt;
| 매우 빠름&lt;br /&gt;
| DRAM보다 느림&lt;br /&gt;
|-&lt;br /&gt;
| 전원 차단 시 데이터&lt;br /&gt;
| 사라짐&lt;br /&gt;
| 유지됨&lt;br /&gt;
|-&lt;br /&gt;
| 일반 PC에서의 역할&lt;br /&gt;
| 필수 주기억장치&lt;br /&gt;
| 선택적 저장장치 가속 장치&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
예를 들어 어떤 프로그램이 8GB 이상의 RAM을 요구한다면, 4GB RAM에 16GB Optane Memory를 추가한다고 해서 RAM 요구사항을 충족하는 것은 아니다.&lt;br /&gt;
&lt;br /&gt;
== SSD와의 차이 ==&lt;br /&gt;
Optane Memory와 SSD도 구분해야 한다.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! Optane Memory&lt;br /&gt;
! SSD&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;
| HDD 사용 시 효과가 큼&lt;br /&gt;
| 저장장치 자체 성능 향상&lt;br /&gt;
|-&lt;br /&gt;
| 단독 사용&lt;br /&gt;
| 일반적으로 제한적&lt;br /&gt;
| 가능&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
다만 Optane SSD는 독립적인 SSD 제품군이므로, 저장장치 가속용 Optane Memory 모듈과 구분해야 한다.&lt;br /&gt;
&lt;br /&gt;
== 장점 ==&lt;br /&gt;
옵테인 메모리의 장점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* HDD 기반 시스템의 체감 성능 향상&lt;br /&gt;
* 자주 사용하는 프로그램 실행 속도 개선&lt;br /&gt;
* 부팅 속도 개선&lt;br /&gt;
* NAND SSD보다 낮은 지연 시간을 목표로 설계&lt;br /&gt;
* 비휘발성 특성 보유&lt;br /&gt;
* 저장장치 계층 구조의 중간 계층으로 활용 가능&lt;br /&gt;
&lt;br /&gt;
== 단점 ==&lt;br /&gt;
옵테인 메모리의 단점은 다음과 같다.&lt;br /&gt;
&lt;br /&gt;
* 일반 DRAM을 대체할 수 없음&lt;br /&gt;
* SSD 가격 하락으로 소비자용 장점 약화&lt;br /&gt;
* 특정 인텔 플랫폼과 드라이버에 의존&lt;br /&gt;
* 설정과 호환성 조건이 복잡함&lt;br /&gt;
* 단독 저장장치로 쓰기에는 용도 제한&lt;br /&gt;
* 제품군이 단종되어 신규 시스템에서 활용이 어려움&lt;br /&gt;
&lt;br /&gt;
== 단종 ==&lt;br /&gt;
Intel Optane Memory 제품군은 수명 종료 단계에 들어갔다. 특히 소비자용 Optane Memory는 최신 인텔 플랫폼과 드라이버에서 더 이상 지원되지 않는 경우가 있다.&lt;br /&gt;
&lt;br /&gt;
따라서 새 PC를 구성할 때 Optane Memory를 성능 향상 수단으로 고려하는 것은 일반적으로 적절하지 않다. 현대 시스템에서는 NVMe SSD를 사용하는 것이 더 단순하고 성능상 유리한 경우가 많다.&lt;br /&gt;
&lt;br /&gt;
== 활용 사례 ==&lt;br /&gt;
옵테인 메모리는 다음과 같은 환경에서 활용되었다.&lt;br /&gt;
&lt;br /&gt;
* HDD 기반 데스크톱 PC 가속&lt;br /&gt;
* 대용량 HDD와 빠른 캐시의 조합&lt;br /&gt;
* 자주 사용하는 애플리케이션 실행 속도 개선&lt;br /&gt;
* 저지연 저장장치가 필요한 워크스테이션&lt;br /&gt;
* 서버의 저지연 스토리지&lt;br /&gt;
* 서버용 영구 메모리 계층&lt;br /&gt;
&lt;br /&gt;
== 메모리 계층 구조에서의 위치 ==&lt;br /&gt;
옵테인 메모리는 [[메모리 계층 구조]]에서 DRAM과 NAND SSD 사이에 위치하는 기술로 설명할 수 있다.&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;
| CPU 내부의 초고속 저장 공간&lt;br /&gt;
|-&lt;br /&gt;
| [[캐시 메모리]]&lt;br /&gt;
| CPU와 주기억장치 사이의 고속 임시 저장 공간&lt;br /&gt;
|-&lt;br /&gt;
| [[DRAM]]&lt;br /&gt;
| 주기억장치, 빠르지만 휘발성&lt;br /&gt;
|-&lt;br /&gt;
| Optane Memory&lt;br /&gt;
| DRAM과 NAND 사이의 중간 성격, 비휘발성&lt;br /&gt;
|-&lt;br /&gt;
| [[SSD]]&lt;br /&gt;
| NAND 플래시 기반 보조기억장치&lt;br /&gt;
|-&lt;br /&gt;
| [[하드 디스크 드라이브]]&lt;br /&gt;
| 자기 디스크 기반 대용량 보조기억장치&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 자격시험 학습 관점 ==&lt;br /&gt;
자격시험에서는 Optane Memory를 세부 제품명으로 깊게 묻기보다는 저장장치 계층 구조, 캐시, 비휘발성 메모리, SSD와 HDD의 성능 차이를 이해하는 관점에서 볼 수 있다.&lt;br /&gt;
&lt;br /&gt;
특히 다음 내용을 구분해야 한다.&lt;br /&gt;
&lt;br /&gt;
* Optane Memory는 일반 RAM 대체품이 아니다.&lt;br /&gt;
* Optane Memory는 자주 사용하는 데이터를 캐싱하여 저장장치 응답성을 높인다.&lt;br /&gt;
* Optane 기술은 비휘발성 메모리 기술인 3D XPoint를 기반으로 한다.&lt;br /&gt;
* Optane SSD와 Optane Memory 모듈은 용도가 다르다.&lt;br /&gt;
* Optane Persistent Memory는 서버용 영구 메모리 제품군이다.&lt;br /&gt;
* 현재는 제품군이 단종되어 최신 시스템의 일반 선택지는 아니다.&lt;br /&gt;
&lt;br /&gt;
== 관련 개념 비교 ==&lt;br /&gt;
&lt;br /&gt;
=== Optane Memory와 캐시 메모리 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 캐시 메모리&lt;br /&gt;
! Optane Memory&lt;br /&gt;
|-&lt;br /&gt;
| 위치&lt;br /&gt;
| CPU와 주기억장치 사이&lt;br /&gt;
| 저장장치와 시스템 사이&lt;br /&gt;
|-&lt;br /&gt;
| 주요 목적&lt;br /&gt;
| CPU 메모리 접근 속도 개선&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;
=== Optane Memory와 가상 메모리 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! 구분&lt;br /&gt;
! 가상 메모리&lt;br /&gt;
! Optane Memory&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;
| RAM 대체 여부&lt;br /&gt;
| RAM 부족을 보완하지만 성능 저하 가능&lt;br /&gt;
| RAM 자체를 대체하지 않음&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 시험 포인트 ==&lt;br /&gt;
* 옵테인 메모리는 인텔의 3D XPoint 기반 비휘발성 메모리 기술이다.&lt;br /&gt;
* 소비자용 Intel Optane Memory는 주로 HDD나 SATA 저장장치를 가속하는 캐시 역할을 수행하였다.&lt;br /&gt;
* Optane Memory는 DRAM을 대체하지 않는다.&lt;br /&gt;
* Optane SSD는 독립적인 저장장치이고, Optane Memory 모듈은 저장장치 가속용으로 사용되는 경우가 많다.&lt;br /&gt;
* Optane Persistent Memory는 서버용 영구 메모리 제품군이다.&lt;br /&gt;
* Optane은 DRAM과 NAND SSD 사이의 성능·용량 계층을 목표로 한 기술로 볼 수 있다.&lt;br /&gt;
* SSD 가격 하락과 플랫폼 의존성 등으로 인해 소비자용 활용 가치는 감소하였다.&lt;br /&gt;
* Intel Optane Memory 제품군은 수명 종료 단계에 들어갔으며 최신 플랫폼에서는 지원되지 않을 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 같이 보기 ==&lt;br /&gt;
* [[메모리 계층 구조]]&lt;br /&gt;
* [[캐시 메모리]]&lt;br /&gt;
* [[DRAM]]&lt;br /&gt;
* [[비휘발성 메모리]]&lt;br /&gt;
* [[SSD]]&lt;br /&gt;
* [[NVMe]]&lt;br /&gt;
* [[하드 디스크 드라이브]]&lt;br /&gt;
* [[Intel RST]]&lt;br /&gt;
* [[3D XPoint]]&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>
</feed>