<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>안상아 | 포트폴리오</title><link>https://ansangah.github.io/</link><atom:link href="https://ansangah.github.io/index.xml" rel="self" type="application/rss+xml"/><description>안상아</description><generator>Hugo Blox Builder (https://hugoblox.com)</generator><language>ko</language><lastBuildDate>Sat, 11 Oct 2025 00:00:00 +0000</lastBuildDate><image><url>https://ansangah.github.io/media/sharing.png</url><title>안상아</title><link>https://ansangah.github.io/</link></image><item><title>📁 2장 : 순방향 신경망(FNN) 정리</title><link>https://ansangah.github.io/blog/ai-blog/2fnn/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/ai-blog/2fnn/</guid><description>&lt;h2 id="1-순방향-신경망fnn-개요"&gt;1. 순방향 신경망(FNN) 개요&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FNN&lt;/strong&gt; = Feedforward Neural Network (= Fully Connected Neural Network 라고도 부름)&lt;br&gt;
대부분의 FNN이 완전연결(fully-connected) 구조를 쓰므로 혼용.&lt;/li&gt;
&lt;li&gt;다층 퍼셉트론(MLP)의 다른 이름이며 인공 신경망의 가장 기본 형태.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;범용 근사 정리&lt;/strong&gt;(Universal Approximation Theorem): 은닉 뉴런을 충분히 쓰고 적절한 활성함수를 사용하면, &lt;em&gt;n&lt;/em&gt;차원 연속함수를 임의의 정확도로 &lt;strong&gt;근사&lt;/strong&gt;할 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-fnn의-구조와-설계-항목"&gt;2. FNN의 구조와 설계 항목&lt;/h2&gt;
&lt;p&gt;FNN은 &lt;strong&gt;데이터가 한 방향으로만 흐르는&lt;/strong&gt; 연결을 가짐. 각 뉴런은 &lt;em&gt;가중합 → 활성함수&lt;/em&gt; 순으로 연산한다.&lt;br&gt;
데이터 간 상호의존을 직접 가정하지 않는(독립) 구조라는 점이 핵심.&lt;/p&gt;
&lt;h3 id="21-계층-구조"&gt;2.1 계층 구조&lt;/h3&gt;
&lt;p&gt;
&lt;figure &gt;
&lt;div class="flex justify-center "&gt;
&lt;div class="w-full" &gt;
&lt;img alt="계층 구조"
srcset="https://ansangah.github.io/blog/ai-blog/2fnn/image_hu_d2afa73b8980d80d.webp 320w, https://ansangah.github.io/blog/ai-blog/2fnn/image_hu_92045be633531587.webp 369w"
sizes="(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px"
src="https://ansangah.github.io/blog/ai-blog/2fnn/image_hu_d2afa73b8980d80d.webp"
width="369"
height="248"
loading="lazy" data-zoomable /&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;입력층&lt;/strong&gt;: 외부 데이터 수신&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;은닉층&lt;/strong&gt;: 특징 추출&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;출력층&lt;/strong&gt;: 추론 결과 출력&lt;br&gt;
입력/출력층은 보통 1개씩, &lt;strong&gt;은닉층 수&lt;/strong&gt;는 문제 난이도에 따라 가변.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-완전연결fc-계층"&gt;2.2 완전연결(FC) 계층&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;각 층의 &lt;strong&gt;모든 뉴런이 이전층의 모든 뉴런과 연결&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;동일 입력이라도 뉴런마다 &lt;strong&gt;다른 특징&lt;/strong&gt;을 뽑아냄 → 특징이 많을수록 &lt;strong&gt;뉴런 수가 충분히&lt;/strong&gt; 필요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;가중합&lt;/strong&gt;: 중요한 feature에 큰 가중치를 두어 영향력 조절&lt;br&gt;
$$z = \sum_i w_i x_i + b$$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;활성함수&lt;/strong&gt;: 비선형 변환으로 복잡한 패턴 학습(XOR 등)에 필수.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-relu-rectified-linear-unit"&gt;2.3 ReLU (Rectified Linear Unit)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$$x &amp;gt; 0 \Rightarrow x, \quad x \le 0 \Rightarrow 0$$. 계산이 빠르고 학습을 안정화.&lt;/li&gt;
&lt;li&gt;신경망(벡터함수)은 미분 가능한 함수여야 함(역전파).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-범용-근사-정리와-깊이"&gt;2.4 범용 근사 정리와 깊이&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2층 FNN도 충분한 은닉 뉴런으로 연속함수 근사 가능.&lt;/li&gt;
&lt;li&gt;단, 뉴런을 무작정 늘리면 &lt;strong&gt;과적합&lt;/strong&gt; 위험 → &lt;strong&gt;깊게&lt;/strong&gt; 쌓아 같은 성능을 더 적은 뉴런으로 구현하기도 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="25-설계-체크리스트"&gt;2.5 설계 체크리스트&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;입력 형태&lt;/strong&gt; 2) &lt;strong&gt;출력 형태/활성함수&lt;/strong&gt; 3) &lt;strong&gt;은닉층 활성함수&lt;/strong&gt; 4) &lt;strong&gt;네트워크 크기&lt;/strong&gt;(깊이·너비)&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="3-분류와-회귀"&gt;3. 분류와 회귀&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;분류&lt;/strong&gt;: 범주(클래스) 예측&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;회귀&lt;/strong&gt;: 연속 값 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;분류는 &lt;strong&gt;판별 함수&lt;/strong&gt;(클래스 결정) 또는 &lt;strong&gt;확률 모델&lt;/strong&gt;(클래스별 확률)로 볼 수 있다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="4-이진-분류-모델"&gt;4. 이진 분류 모델&lt;/h2&gt;
&lt;p&gt;이진 분류는 &lt;strong&gt;베르누이 분포&lt;/strong&gt;를 예측하는 모델로 정의할 수 있다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;출력층 활성함수: &lt;strong&gt;시그모이드&lt;/strong&gt; $$\sigma(z) = \frac{1}{1 + e^{-z}}$$&lt;/li&gt;
&lt;li&gt;손실함수: &lt;strong&gt;Binary Cross-Entropy&lt;/strong&gt;와 궁합이 좋음.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-다중-분류-모델"&gt;5. 다중 분류 모델&lt;/h2&gt;
&lt;p&gt;다중 분류는 &lt;strong&gt;카테고리(다항 1회 시행)&lt;/strong&gt; 분포를 예측.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;출력층 활성함수: &lt;strong&gt;소프트맥스&lt;/strong&gt; $\mathrm{softmax}(z)_k=\frac{e^{z_k}}{\sum_j e^{z_j}}$&lt;/li&gt;
&lt;li&gt;손실함수: &lt;strong&gt;Categorical Cross-Entropy&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;이진 분류도 소프트맥스 2차원으로 풀 수 있지만, 보통 시그모이드 1차원으로 간단히 처리.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="6-회귀-모델"&gt;6. 회귀 모델&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;회귀는 관측오차(노이즈)가 &lt;strong&gt;가우시안 분포&lt;/strong&gt;라고 가정하는 경우가 많음.&lt;/li&gt;
&lt;li&gt;모델은 &lt;strong&gt;평균 $$\mu = y(x)$$&lt;/strong&gt; 만 예측(분산은 상수로 둠).&lt;/li&gt;
&lt;li&gt;출력층 활성함수: &lt;strong&gt;항등함수&lt;/strong&gt;(identity).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-입력층"&gt;7. 입력층&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;입력 데이터가 길이 &lt;em&gt;n&lt;/em&gt;인 벡터라면 입력층 뉴런 수 = &lt;em&gt;n&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;예: 28×28 이미지는 &lt;strong&gt;전개(Flatten)&lt;/strong&gt; 해서 784차원 입력.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-활성-함수-정리"&gt;8. 활성 함수 정리&lt;/h2&gt;
&lt;h3 id="81-시그모이드-계열"&gt;8.1 시그모이드 계열&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;장점: 모든 구간 미분 가능, [0,1]로 &lt;strong&gt;스쿼싱&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;단점: 지수연산 비용, &lt;strong&gt;그레이디언트 포화/소실&lt;/strong&gt;, 출력이 양수여서 최적화 경로가 진동 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-하이퍼볼릭-탄젠트tanh"&gt;8.2 하이퍼볼릭 탄젠트(tanh)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;범위 [-1,1]이라 경로 진동 감소&lt;/li&gt;
&lt;li&gt;여전히 지수연산·포화 문제 존재&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="83-relu-계열"&gt;8.3 ReLU 계열&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ReLU&lt;/strong&gt;: 빠르고 포화·소실에 강함&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Leaky ReLU / PReLU&lt;/strong&gt;: 음수구간 기울기 부여(죽은 ReLU 완화)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ELU&lt;/strong&gt;: 음수구간이 지수형 → 큰 음수 입력에도 안정&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Maxout&lt;/strong&gt;: 뉴런별로 여러 선형함수의 최댓값을 사용해 &lt;strong&gt;활성함수 자체를 학습&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Swish(SiLU)&lt;/strong&gt;: $$x \cdot \sigma(x)$$. 최근에 좋은 성능을 보이는 비선형.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-신경망-모델의-크기너비깊이"&gt;9. 신경망 모델의 크기(너비·깊이)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;너비&lt;/strong&gt;: 층별 뉴런 수 / &lt;strong&gt;깊이&lt;/strong&gt;: 층 수&lt;/li&gt;
&lt;li&gt;탐색: &lt;strong&gt;Grid Search&lt;/strong&gt;보다는 &lt;strong&gt;Random Search&lt;/strong&gt;가 대개 효율적.&lt;/li&gt;
&lt;li&gt;최근엔 &lt;strong&gt;NAS&lt;/strong&gt; 등 자동 탐색도 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="91-크기-스케일링"&gt;9.1 크기 스케일링&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;EfficientNet&lt;/strong&gt;이 보인 바처럼 &lt;strong&gt;너비·깊이·입력 해상도&lt;/strong&gt;를 &lt;strong&gt;함께&lt;/strong&gt; 키우는 &lt;strong&gt;Compound Scaling&lt;/strong&gt;이 효율적.&lt;/p&gt;
&lt;hr&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-b8fff8de9736d3d13548a241312882d4"
href="https://ansangah.github.io/uploads/deeplearning/2-%ec%88%9c%eb%b0%a9%ed%96%a5%ec%8b%a0%ea%b2%bd%eb%a7%9d.pdf"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="PDF 다운로드"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;PDF 다운로드&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>📁 3장 : 신경망 학습과 최적화</title><link>https://ansangah.github.io/blog/ai-blog/3networktraining/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/ai-blog/3networktraining/</guid><description>
&lt;details class="print:hidden xl:hidden" open&gt;
&lt;summary&gt;차례&lt;/summary&gt;
&lt;div class="text-sm"&gt;
&lt;nav id="TableOfContents"&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="#1-신경망-학습-개요"&gt;1. 신경망 학습 개요&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#2-모델-파라미터-vs-하이퍼파라미터"&gt;2. 모델 파라미터 vs 하이퍼파라미터&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#3-최적화-문제-세팅"&gt;3. 최적화 문제 세팅&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#4-회귀--분류-손실-정리"&gt;4. 회귀 · 분류 손실 정리&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#5-경사-하강법-핵심"&gt;5. 경사 하강법 핵심&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#6-최적화-알고리즘-계열"&gt;6. 최적화 알고리즘 계열&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#7-경사-하강법-적용-루틴"&gt;7. 경사 하강법 적용 루틴&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#8-한눈-요약"&gt;8. 한눈 요약&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/nav&gt;
&lt;/div&gt;
&lt;/details&gt;
&lt;h2 id="1-신경망-학습-개요"&gt;1. 신경망 학습 개요&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;신경망은 처음엔 입력 들어와도 어떤 출력 내야 할지 모름.&lt;/li&gt;
&lt;li&gt;학습 데이터 반복 주입 → 입력·출력 매핑 규칙 스스로 찾음.&lt;/li&gt;
&lt;li&gt;학습한다 = 규칙 찾는 과정임.&lt;/li&gt;
&lt;li&gt;뉴런은 가중 합산 + 활성함수 조합으로 구성됨.&lt;/li&gt;
&lt;li&gt;층을 쌓아 신경망 구조 만들고, 구조 관련 결정들은 학습 전에 미리 고정함.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-모델-파라미터-vs-하이퍼파라미터"&gt;2. 모델 파라미터 vs 하이퍼파라미터&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;모델 파라미터&lt;/strong&gt;: 가중치, 편향. 데이터에 의존해 학습 중 계속 변함. 학습 끝나면 모델 상태로 저장됨.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;하이퍼파라미터&lt;/strong&gt;: 학습률, 옵티마이저, 배치 크기, 네트워크 깊이, Dropout 확률 등. 사람이 직접 지정, 학습으로 자동 변경 안 됨.&lt;/li&gt;
&lt;li&gt;PReLU처럼 활성함수 안에 학습 가능한 값이 있으면 그 값은 모델 파라미터로 취급함.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;집값 예측을 예시로 보면 &lt;code&gt;방 개수·면적·집 종류·역과의 거리 → 집값&lt;/code&gt; 매핑 규칙이 바로 모델 파라미터에 반영됨. 규칙이 완성되면 추론 능력 생김.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-최적화-문제-세팅"&gt;3. 최적화 문제 세팅&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;목적 함수 최소화 or 최대화 문제로 학습을 재정의함.&lt;/li&gt;
&lt;li&gt;표준 형식:
$$
\begin{aligned}
&amp;amp;\text{minimize} &amp;amp;&amp;amp; f(\mathbf{x}) \
&amp;amp;\text{subject to} &amp;amp;&amp;amp; g_i(\mathbf{x}) \le 0,\quad i=1,\dots,m \
&amp;amp;&amp;amp;&amp;amp; h_j(\mathbf{x}) = 0,\quad j=1,\dots,p
\end{aligned}
$$&lt;/li&gt;
&lt;li&gt;$f(\mathbf{x})$가 손실 함수, $g_i$, $h_j$는 제약 조건 함수임.&lt;/li&gt;
&lt;li&gt;최적해에 가까워지는 상태를 수렴이라 부르고, 충분히 가까워지면 수렴했다고 봄.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-회귀--분류-손실-정리"&gt;4. 회귀 · 분류 손실 정리&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;회귀 문제&lt;/strong&gt;: 타깃 $t$와 예측 $y = f_\theta(x)$ 차이를 줄이는 $\theta$ 찾음.&lt;br&gt;
대표 손실 = 평균제곱오차(MSE).&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
&amp;amp;\underset{\theta}{\text{minimize}} &amp;amp;&amp;amp; \frac{1}{N} \sum_{i=1}^{N} (f(\mathbf{x}_i; \theta) - t_i)^2 \
&amp;amp;\text{subject to} \
&amp;amp;&amp;amp;&amp;amp; \text{No constraints}
\end{aligned}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;분류 문제&lt;/strong&gt;: 관측 확률분포 $t$와 예측 확률분포 $y$ 차이를 줄이는 $\theta$ 찾음.&lt;br&gt;
대표 손실 = 크로스 엔트로피(CE).&lt;/p&gt;
&lt;p&gt;$$
\begin{aligned}
&amp;amp;\underset{\theta}{\text{minimize}} &amp;amp;&amp;amp; - \frac{1}{N} \sum_{i=1}^{N} \sum_{k=1}^{K} t_{ik} \log \hat{y}_{ik} \
&amp;amp;\text{subject to} \
&amp;amp;&amp;amp;&amp;amp; \text{No constraints}
\end{aligned}
$$&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;손실 정의 끝나면, 해당 손실을 최소화하는 방향으로 파라미터 갱신 루프 돌림.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="5-경사-하강법-핵심"&gt;5. 경사 하강법 핵심&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;전역 최소가 이상적이지만, 실제 손실 곡면은 복잡함 → 현실적으로 좋은 지역 최소 찾는 전략 사용함.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;손실 함수 $L(\theta)$의 기울기 사용.&lt;/p&gt;
&lt;p&gt;$$
\theta^{(t+1)} = \theta^{(t)} - \alpha \nabla_\theta L(\theta^{(t)})
$$&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$\alpha$: 학습률. 스텝 크기 조절.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;$-\nabla_\theta L$: 가장 가파른 내리막 방향.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;신경망은 합성 함수이므로 연쇄 법칙(=역전파)으로 각 파라미터의 기울기 계산함.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-최적화-알고리즘-계열"&gt;6. 최적화 알고리즘 계열&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1차 미분 기반&lt;/strong&gt;: 경사 하강법, SGD, Momentum, AdaGrad, RMSProp, Adam 등. 곡면이 볼록하지 않아도 동작 안정적임.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;1.5차 미분 기반&lt;/strong&gt;: 준-뉴턴, 켤레 경사, 레벤버그-마쿼트 등. 2차 정보를 근사해 빠르지만 메모리 비용 큼.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2차 미분 기반&lt;/strong&gt;: 뉴턴 방법, 내부점법 등. 곡률 직접 사용해 빠르지만, 손실이 볼록해야 하고 계산량 큼 → 대형 신경망에는 부담.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-경사-하강법-적용-루틴"&gt;7. 경사 하강법 적용 루틴&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;순전파로 예측값 계산함.&lt;/li&gt;
&lt;li&gt;손실 함수 평가함.&lt;/li&gt;
&lt;li&gt;손실을 각 파라미터에 대해 편미분(역전파)함.&lt;/li&gt;
&lt;li&gt;업데이트 식으로 가중치·편향 갱신함.&lt;/li&gt;
&lt;li&gt;손실 변화가 임계치 이하되면 학습 종료함(수렴 판단).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;결과적으로 파라미터가 고정되면 입력 들어올 때마다 어떤 출력을 낼지 규칙이 함수 형태로 확보됨.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="8-한눈-요약"&gt;8. 한눈 요약&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;신경망 학습 = 데이터로 규칙 익히는 과정임.&lt;/li&gt;
&lt;li&gt;회귀는 MSE, 분류는 CE로 손실 정의하는 경우가 일반적임.&lt;/li&gt;
&lt;li&gt;최적화 = 손실 최소화 문제로 재정의하고 알고리즘으로 해 근사함.&lt;/li&gt;
&lt;li&gt;경사 하강법은 가장 기본이지만 여전히 강력한 1차 최적화 방법임.&lt;/li&gt;
&lt;li&gt;역전파는 경사 하강법을 신경망에 적용하기 위한 필수 계산 절차임.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-796ae02c7e5f487593cdbbe4c189dc87"
href="https://ansangah.github.io/uploads/deeplearning/3-%ec%8b%a0%ea%b2%bd%eb%a7%9d%ed%95%99%ec%8a%b5.pdf"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="PDF 다운로드"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;PDF 다운로드&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>GAN 논문 정리</title><link>https://ansangah.github.io/blog/ai-blog/gan/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/ai-blog/gan/</guid><description>&lt;h2 id="현재-공부-중"&gt;현재 공부 중..&lt;/h2&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-329096a9980965114e4732268d03a47d"
href="https://ansangah.github.io/uploads/deeplearning/GAN.pdf"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="PDF 다운로드"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;PDF 다운로드&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>정규화 용어 정리</title><link>https://ansangah.github.io/blog/ai-blog/term/</link><pubDate>Wed, 22 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/ai-blog/term/</guid><description>&lt;h2 id="1-normalization-min-max-scaling"&gt;1. Normalization (Min-Max Scaling)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;각 속성의 최소·최댓값을 이용해 데이터를 &lt;strong&gt;0~1 범위&lt;/strong&gt;로 선형 변환.&lt;/li&gt;
&lt;li&gt;특징:
&lt;ul&gt;
&lt;li&gt;분포가 비교적 고르고 극단값(outlier)이 적은 경우 효과적.&lt;/li&gt;
&lt;li&gt;모델에 따라 입력 스케일이 민감한 경우(신경망, 거리 기반 알고리즘 등) 학습 안정성 향상.&lt;/li&gt;
&lt;li&gt;최소·최댓값이 변경되면 다시 스케일링해야 하므로 온디맨드 재계산 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;수식:&lt;br&gt;
$$x&amp;rsquo; = \frac{x - x_{\min}}{x_{\max} - x_{\min}}$$&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-standardization-z-score-scaling"&gt;2. Standardization (Z-score Scaling)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;데이터의 평균을 0, 표준편차를 1로 맞춰 정규화.&lt;/li&gt;
&lt;li&gt;특징:
&lt;ul&gt;
&lt;li&gt;평균과 분산을 기준으로 하므로 &lt;strong&gt;정규분포에 가까운 데이터&lt;/strong&gt;에서 안정적.&lt;/li&gt;
&lt;li&gt;outlier의 영향을 상대적으로 덜 받으며, 학습된 파라미터(평균·표준편차)를 이용해 새로운 데이터 스케일링 가능.&lt;/li&gt;
&lt;li&gt;가장 일반적으로 사용되는 스케일링 기법.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;수식:&lt;br&gt;
$$z = \frac{x - \mu}{\sigma}$$&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;Normalization과 Standardization은 모두 &lt;strong&gt;데이터 전처리(Data Preprocessing)&lt;/strong&gt; 단계에서 수행되어 모델 학습이 더 빨리, 안정적으로 수렴하도록 돕는다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="3-regularization"&gt;3. Regularization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;목적: &lt;strong&gt;Overfitting(과적합) 방지&lt;/strong&gt;.
&lt;ul&gt;
&lt;li&gt;과적합 = 모델이 훈련 데이터에 과도하게 적응하여 새로운 데이터 일반화 실패.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;특징:
&lt;ul&gt;
&lt;li&gt;데이터 전처리가 아니라 &lt;strong&gt;모델 학습(Learning) 단계에서 가중치에 패널티&lt;/strong&gt;를 부여.&lt;/li&gt;
&lt;li&gt;L1, L2, Elastic Net, Dropout 등 다양한 형태가 존재.&lt;/li&gt;
&lt;li&gt;모델의 복잡도를 제어해 &lt;strong&gt;Generalization(일반화) 성능 향상&lt;/strong&gt;을 직접 목표로 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="4-generalization"&gt;4. Generalization&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;정의: 모델이 훈련에 사용되지 않은 &lt;strong&gt;새로운 데이터에서도 높은 예측 정확도&lt;/strong&gt;를 유지하는 능력.&lt;/li&gt;
&lt;li&gt;머신러닝 모델의 최종 목표이며, 검증 데이터/테스트 데이터 성능으로 평가.&lt;/li&gt;
&lt;li&gt;관계 요약:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Regularization&lt;/strong&gt;: 일반화를 달성하기 위한 핵심 전략(모델 측면).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Normalization/Standardization&lt;/strong&gt;: 데이터를 안정적으로 학습시키기 위한 보조 전략(입력 측면)으로 일반화를 간접적으로 지원.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;div class="text-center"&gt;
&lt;a
id="button-86a8d6880451b42d35696a141ce2aa28"
href="https://ansangah.github.io/uploads/deeplearning/%ec%a0%95%ea%b7%9c%ed%99%94%ec%9a%a9%ec%96%b4%ec%a0%95%eb%a6%ac.pdf"
class="inline-flex items-center gap-2 font-medium no-underline transition-all duration-300 ease-out transform-gpu focus:outline-none focus:ring-4 focus:ring-offset-2 focus:ring-offset-white dark:focus:ring-offset-zinc-900 disabled:opacity-50 disabled:cursor-not-allowed disabled:pointer-events-none bg-gradient-to-br from-primary-500 to-primary-600 hover:from-primary-600 hover:to-primary-700 active:from-primary-700 active:to-primary-800 text-white shadow-lg shadow-primary-500/25 hover:shadow-xl hover:shadow-primary-500/30 hover:-translate-y-0.5 hover:scale-[1.02] active:scale-[0.98] focus:ring-primary-500/50 px-6 py-3 text-lg rounded-lg"
role="button"
aria-label="PDF 다운로드"
&gt;
&lt;span class="flex-shrink-0"&gt;
&lt;svg class="w-4 h-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"&gt;&lt;path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m.75 12l3 3m0 0l3-3m-3 3v-6m-1.5-9H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9"/&gt;&lt;/svg&gt;
&lt;/span&gt;
&lt;span&gt;PDF 다운로드&lt;/span&gt;
&lt;/a&gt;
&lt;/div&gt;</description></item><item><title>기계학습</title><link>https://ansangah.github.io/blog/subjects/ml/</link><pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/ml/</guid><description>&lt;h2 id="1-기계학습-개요"&gt;1. 기계학습 개요&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;기계학습(Machine Learning)은 &lt;strong&gt;데이터에서 패턴을 학습해 예측이나 의사결정을 자동화&lt;/strong&gt;하는 기술.&lt;/li&gt;
&lt;li&gt;학습 유형: 지도학습(분류·회귀), 비지도학습(군집·차원축소), 강화학습.&lt;/li&gt;
&lt;li&gt;주요 과제: 일반화(generalization), 데이터 품질, 계산 효율, 설명 가능성.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-귀납적-기계학습의-형식적-정의"&gt;2. 귀납적 기계학습의 형식적 정의&lt;/h2&gt;
&lt;h3 id="21-학습-문제-서술"&gt;2.1 학습 문제 서술&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;입력 공간 $\mathcal{X}$, 출력 공간 $\mathcal{Y}$, 미지의 분포 $\mathcal{D}$가 존재한다고 가정.&lt;/li&gt;
&lt;li&gt;훈련 데이터 $S = {(x_i, y_i)}_{i=1}^{n}$ 는 $\mathcal{D}$로부터 독립 동일 분포(i.i.d.) 샘플링된다.&lt;/li&gt;
&lt;li&gt;학습기의 목표는 가설 공간 $\mathcal{H}$에서 함수를 선택해 &lt;strong&gt;위험(Risk)&lt;/strong&gt; 을 최소화:
$$R(h) = \mathbb{E}_{(x,y)\sim\mathcal{D}}[\ell(h(x), y)]$$
하지만 $\mathcal{D}$를 모르는 탓에 &lt;strong&gt;경험 위험(Empirical Risk)&lt;/strong&gt;
$$\hat{R}&lt;em&gt;S(h) = \frac{1}{n}\sum&lt;/em&gt;{i=1}^{n} \ell(h(x_i), y_i)$$
을 최소화하거나 정규화된 변형(RERM)을 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-귀납적-추론"&gt;2.2 귀납적 추론&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;No Free Lunch 정리&lt;/strong&gt;에 따라 임의의 분포를 가정하면 어떤 학습 알고리즘도 항상 우수할 수 없다.&lt;/li&gt;
&lt;li&gt;따라서 도메인 지식을 반영한 &lt;strong&gt;편향(bias)&lt;/strong&gt; 을 설계하고, 데이터를 통해 &lt;strong&gt;가중치(weight)&lt;/strong&gt; 를 조정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-학습의-한계와-일반화"&gt;3. 학습의 한계와 일반화&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VC 차원&lt;/strong&gt;: 가설 공간의 표현력을 측정하며, 일반화 오차에 상한을 제공.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bias-Variance Trade-off&lt;/strong&gt;: 모델 복잡도가 높을수록 분산이 증가, 간단할수록 편향이 커진다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;과적합(Overfitting)&lt;/strong&gt;: 훈련 오차는 작지만 보지 못한 데이터에서 성능 하락. 해결: 정규화, 조기 종료, 교차 검증.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PAC 학습&lt;/strong&gt;: 일정한 확률(Probably)로 원하는 정확도(Approximately Correct)에 도달하는 학습 가능성 정의.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-기하학적-관점과-최근접-이웃"&gt;4. 기하학적 관점과 최근접 이웃&lt;/h2&gt;
&lt;h3 id="41-거리-기반-학습"&gt;4.1 거리 기반 학습&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터 포인트를 고차원 공간의 벡터로 보고, &lt;strong&gt;거리(metric)&lt;/strong&gt; 로 유사성을 측정.&lt;/li&gt;
&lt;li&gt;$k$-최근접 이웃(k-NN) 분류: 예측 시 가장 가까운 k개의 레이블을 다수결로 결정.&lt;/li&gt;
&lt;li&gt;$k$-NN 회귀: 인접 샘플의 평균 또는 가중 평균으로 예측.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-특성"&gt;4.2 특성&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;훈련 시간이 거의 없고(저장만), 예측 시 계산량이 많다.&lt;/li&gt;
&lt;li&gt;거리 척도 선택이 중요: 유클리드, 맨해튼, 코사인 등.&lt;/li&gt;
&lt;li&gt;차원의 저주: 차원이 커질수록 모든 점 사이 거리가 비슷해져 분류력이 약해진다 → 차원 축소, 가중 거리 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-커널과-매니폴드"&gt;4.3 커널과 매니폴드&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;국소 구조를 반영하기 위해 &lt;strong&gt;커널 함수&lt;/strong&gt;로 비선형 거리를 정의할 수 있다.&lt;/li&gt;
&lt;li&gt;매니폴드 가정: 고차원 데이터가 실제로는 저차원 곡면 위에 놓여 있다고 보고 근접도 계산.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-결정-트리-학습decision-tree"&gt;5. 결정 트리 학습(Decision Tree)&lt;/h2&gt;
&lt;h3 id="51-기본-구조"&gt;5.1 기본 구조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;질문(속성 분할)을 연속적으로 수행해 리프 노드에서 예측.&lt;/li&gt;
&lt;li&gt;분할 기준: 정보 이득(Information Gain), 지니 지수(Gini Index), 카이제곱 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-학습-절차-id3c45cart"&gt;5.2 학습 절차 (ID3/C4.5/CART)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;최적 속성을 선택해 데이터 분할.&lt;/li&gt;
&lt;li&gt;하위 노드에 대해 재귀적으로 반복.&lt;/li&gt;
&lt;li&gt;리프 노드가 순수(Pure)하거나 최소 데이터 수 이하가 되면 중지.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;연속형 속성&lt;/strong&gt;은 임계값을 이용한 이진 분할로 처리.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-가지치기pruning"&gt;5.3 가지치기(Pruning)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;사전 가지치기: 깊이 제한, 최소 샘플 수 제한 등.&lt;/li&gt;
&lt;li&gt;사후 가지치기: 완전 트리 학습 후 검증 오차가 커지는 분기를 제거(예: Reduced Error Pruning).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="54-장점단점"&gt;5.4 장점·단점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;해석 용이, 특성 스케일링 불필요, 비선형 관계에 강함.&lt;/li&gt;
&lt;li&gt;데이터 분할에 민감하고, 과적합 위험 높음 → 앙상블(Random Forest, Gradient Boosting)로 개선.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-퍼셉트론perceptron"&gt;6. 퍼셉트론(Perceptron)&lt;/h2&gt;
&lt;h3 id="61-선형-분리-모델"&gt;6.1 선형 분리 모델&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;입력 $x$에 대해 가중치 $w$와 편향 $b$를 학습하여 $\text{sign}(w^\top x + b)$ 로 이진 분류.&lt;/li&gt;
&lt;li&gt;퍼셉트론 규칙: 오분류된 샘플에 대해 $w \leftarrow w + \eta yx$, $b \leftarrow b + \eta y$.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;퍼셉트론 수렴 정리&lt;/strong&gt;: 데이터가 선형적으로 분리 가능하면 유한 번의 업데이트 후 수렴.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-한계"&gt;6.2 한계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;XOR 같은 비선형 문제를 해결할 수 없음 → 커널 퍼셉트론, 다층 퍼셉트론(신경망)으로 확장.&lt;/li&gt;
&lt;li&gt;학습률 $\eta$ 선택, 데이터 순서에 따른 민감성 존재.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-실무에서-마주치는-이슈"&gt;7. 실무에서 마주치는 이슈&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;데이터 전처리&lt;/strong&gt;: 결측치 처리, 이상치 탐지, 정규화/표준화, 범주형 인코딩.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;평가 전략&lt;/strong&gt;: 훈련/검증/테스트 분할, K-겹 교차 검증, 시간 순서 고려(시계열의 경우).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정규화와 규제&lt;/strong&gt;: L1은 희소성 유도, L2는 가중치 분산 감소. 드롭아웃, 배치 정규화 등 신경망 규제.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;하이퍼파라미터 탐색&lt;/strong&gt;: Grid, Random, Bayesian Optimization.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;모델 해석&lt;/strong&gt;: SHAP, LIME, Feature Importance.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-이진-분류를-넘어"&gt;8. 이진 분류를 넘어&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;다중 분류&lt;/strong&gt;: One-vs-Rest, One-vs-One, 소프트맥스 회귀(다항 로지스틱).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;다중 라벨 분류&lt;/strong&gt;: 한 샘플에 여러 라벨 가능 → 베이즈 체인, 시그모이드 출력.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;회귀 문제&lt;/strong&gt;: 연속값 예측 → 선형 회귀, 회귀 트리, Gaussian Process.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;불균형 데이터&lt;/strong&gt;: 가중치 조정, SMOTE, 이익 기반 손실 함수.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;구조적 출력&lt;/strong&gt;: 순차 라벨링(HMM, CRF), 이미지 분할(U-Net 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-선형-모델linear-models"&gt;9. 선형 모델(Linear Models)&lt;/h2&gt;
&lt;h3 id="91-선형-회귀linear-regression"&gt;9.1 선형 회귀(Linear Regression)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;목적: $y \approx w^\top x + b$. 최소제곱(Ordinary Least Squares)으로 해석 가능.&lt;/li&gt;
&lt;li&gt;정규화: Ridge(L2), Lasso(L1), Elastic Net.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="92-로지스틱-회귀logistic-regression"&gt;9.2 로지스틱 회귀(Logistic Regression)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;이진 분류에서 &lt;strong&gt;시그모이드&lt;/strong&gt;로 확률 추정:
$$P(y=1|x) = \sigma(w^\top x + b) = \frac{1}{1 + e^{-(w^\top x + b)}}$$&lt;/li&gt;
&lt;li&gt;로그 우도 최대화 또는 교차 엔트로피 손실 최소화로 학습.&lt;/li&gt;
&lt;li&gt;결정경계가 선형이라는 한계 → 커널 기법, 다항 특성 확장으로 비선형 모델링.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="93-소프트맥스-회귀다항-로지스틱"&gt;9.3 소프트맥스 회귀(다항 로지스틱)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$K$개 클래스에 대해 $\mathrm{softmax}(z)_k = \frac{e^{z_k}}{\sum_j e^{z_j}}$.&lt;/li&gt;
&lt;li&gt;교차 엔트로피 손실로 학습하며, 확률적 경사 하강법(SGD)과 잘 결합.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="94-선형-모델의-장단점"&gt;9.4 선형 모델의 장단점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;장점: 설명 가능, 학습 속도 빠름, 고차원 희소 데이터에 강함.&lt;/li&gt;
&lt;li&gt;단점: 복잡한 비선형 관계 표현 한계. 커널 방법(Kernel Trick), 다층 신경망으로 확장 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="10-참고-학습-플로우"&gt;10. 참고 학습 플로우&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;문제 정의 및 데이터 이해 (도메인 지식 정리).&lt;/li&gt;
&lt;li&gt;데이터 정제·탐색적 분석 → 특징 공학.&lt;/li&gt;
&lt;li&gt;기본 모델 구축(선형, 결정트리, k-NN 등)으로 벤치마크.&lt;/li&gt;
&lt;li&gt;검증 전략 설정 후 하이퍼파라미터 탐색.&lt;/li&gt;
&lt;li&gt;성능/설명력/운용비용을 평가해 최종 모델 선정.&lt;/li&gt;
&lt;li&gt;배포 후 모니터링, 데이터 드리프트 대응, 주기적 재학습.&lt;/li&gt;
&lt;/ol&gt;</description></item><item><title>소프트웨어공학</title><link>https://ansangah.github.io/blog/subjects/se/</link><pubDate>Fri, 17 Oct 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/se/</guid><description>&lt;h2 id="1-소프트웨어공학-개요"&gt;1. 소프트웨어공학 개요&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;소프트웨어공학(Software Engineering)은 &lt;strong&gt;복잡한 소프트웨어 시스템을 체계적·공학적으로 개발&lt;/strong&gt;하기 위한 학문.&lt;/li&gt;
&lt;li&gt;목표: 예측 가능한 비용과 일정으로 &lt;strong&gt;품질 높은 제품&lt;/strong&gt;을 전달하며, 유지보수와 진화를 고려한 구조를 설계.&lt;/li&gt;
&lt;li&gt;핵심 축: &lt;strong&gt;프로세스(How)&lt;/strong&gt;, &lt;strong&gt;방법론(Method)&lt;/strong&gt;, &lt;strong&gt;도구(Tool)&lt;/strong&gt;, &lt;strong&gt;품질(Quality)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-소프트웨어-개발-생명주기sdlc"&gt;2. 소프트웨어 개발 생명주기(SDLC)&lt;/h2&gt;
&lt;h3 id="21-전통적-폭포수requirements--design--implementation--verification--maintenance"&gt;2.1 전통적 폭포수(Requirements → Design → Implementation → Verification → Maintenance)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;각 단계를 순차적으로 진행. 문서 기반 계약, 변경 비용이 큰 프로젝트에 적합.&lt;/li&gt;
&lt;li&gt;장점: 명확한 문서화, 관리 용이.&lt;/li&gt;
&lt;li&gt;단점: 요구 변경에 취약, 피드백이 느림.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-반복증분-모델"&gt;2.2 반복·증분 모델&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기능을 반복적으로 설계/구현/검증. 위험을 조기에 발견하고 사용자 피드백을 반영.&lt;/li&gt;
&lt;li&gt;대표: Spiral Model (위험 중심), RUP, Incremental Model.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-애자일agile"&gt;2.3 애자일(Agile)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;고객 협업과 빠른 반복을 강조. &lt;strong&gt;스크럼(Scrum)&lt;/strong&gt;, &lt;strong&gt;칸반(Kanban)&lt;/strong&gt; 등이 포함.&lt;/li&gt;
&lt;li&gt;스프린트 기간 동안 기획→개발→리뷰→회고를 반복.&lt;/li&gt;
&lt;li&gt;문서보다 작동하는 소프트웨어를 우선하지만, 최소한의 문서는 유지한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-요구공학requirements-engineering"&gt;3. 요구공학(Requirements Engineering)&lt;/h2&gt;
&lt;h3 id="31-요구-사항-종류"&gt;3.1 요구 사항 종류&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기능 요구(Functional)&lt;/strong&gt;: 시스템이 수행해야 할 기능, 유스케이스.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비기능 요구(Non-functional)&lt;/strong&gt;: 성능, 보안, 가용성, 규제 준수 등 품질 속성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;도메인 요구&lt;/strong&gt;: 특정 산업/업무 규칙.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-요구-수집-기법"&gt;3.2 요구 수집 기법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;인터뷰, 워크숍, 설문, 관찰, 프로토타이핑.&lt;/li&gt;
&lt;li&gt;사용자 스토리(As a … I want … so that …)로 요구를 표현하면 애자일에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-요구-분석-및-명세"&gt;3.3 요구 분석 및 명세&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;요구 상충 해결, 우선순위화(MoSCoW, WSJF).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML Use Case Diagram&lt;/strong&gt;, &lt;strong&gt;문장 템플릿&lt;/strong&gt;, &lt;strong&gt;SRS(Software Requirements Specification)&lt;/strong&gt; 문서화.&lt;/li&gt;
&lt;li&gt;요구 변경 관리: Change Control Board(CCB), 버전 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-시스템소프트웨어-설계"&gt;4. 시스템·소프트웨어 설계&lt;/h2&gt;
&lt;h3 id="41-아키텍처-설계"&gt;4.1 아키텍처 설계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;품질 속성을 달성하기 위한 구조와 구성 요소 정의.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;아키텍처 패턴&lt;/strong&gt;: Layered, Client-Server, Microservices, Event-Driven 등.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;아키텍처 스타일&lt;/strong&gt;: REST, SOA, Pipe-and-Filter.&lt;/li&gt;
&lt;li&gt;대표 산출물: 아키텍처 다이어그램(C4 Model 레벨), ADR(Architecture Decision Record).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-상세-설계"&gt;4.2 상세 설계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;모듈, 클래스, 인터페이스, 데이터 구조 정의.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UML&lt;/strong&gt;: 클래스, 시퀀스, 상태, 활동 다이어그램.&lt;/li&gt;
&lt;li&gt;설계 원칙: SOLID, DI, GoF 디자인 패턴(Strategy, Observer, Factory 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-소프트웨어-재사용"&gt;4.3 소프트웨어 재사용&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;라이브러리, 컴포넌트, 프레임워크 활용. 구성요소 기반 개발(Component-Based Development).&lt;/li&gt;
&lt;li&gt;소프트웨어 제품 라인(SPL) 접근: 공통 자산 기반으로 변형 제품군 생성.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-프로젝트-계획과-관리"&gt;5. 프로젝트 계획과 관리&lt;/h2&gt;
&lt;h3 id="51-일정-및-비용-추정"&gt;5.1 일정 및 비용 추정&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;COCOMO II&lt;/strong&gt;, &lt;strong&gt;Function Point&lt;/strong&gt;, &lt;strong&gt;Story Point&lt;/strong&gt; 기반 추정.&lt;/li&gt;
&lt;li&gt;거버넌스: WBS(Work Breakdown Structure), Gantt Chart, Critical Path Method.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-리스크-관리"&gt;5.2 리스크 관리&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;위험 식별 → 분석(발생 확률, 영향) → 대응 전략(회피, 완화, 전가, 수용).&lt;/li&gt;
&lt;li&gt;특히 인력, 일정, 기술적 불확실성에 집중.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-형상관리configuration-management"&gt;5.3 형상관리(Configuration Management)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;코드·문서·빌드 결과물에 대한 버전/변경 이력 추적.&lt;/li&gt;
&lt;li&gt;도구: Git, SVN. 브랜칭 전략(Git Flow, Trunk-based)과 코드 리뷰 프로세스.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-구현-및-품질-향상-기법"&gt;6. 구현 및 품질 향상 기법&lt;/h2&gt;
&lt;h3 id="61-코딩-표준과-코드-품질"&gt;6.1 코딩 표준과 코드 품질&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;명명 규칙, 코드 스타일 가이드(PEP8, Google Style).&lt;/li&gt;
&lt;li&gt;정적 분석(Static Analysis), 린터, 포매터를 활용해 품질 자동화.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-리팩터링refactoring"&gt;6.2 리팩터링(Refactoring)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기능 변경 없이 구조 개선. Bad Smell 제거: Long Method, Large Class, Feature Envy 등.&lt;/li&gt;
&lt;li&gt;CI 파이프라인에서 테스트 통과를 기준으로 안전성 확보.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-성능-개선"&gt;6.3 성능 개선&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프로파일링으로 병목 확인. 캐싱, 비동기 처리, 데이터 구조 최적화.&lt;/li&gt;
&lt;li&gt;Amdahl’s Law, Little’s Law 등 이론 기반 분석.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-테스트와-품질-보증qa"&gt;7. 테스트와 품질 보증(QA)&lt;/h2&gt;
&lt;h3 id="71-테스트-레벨"&gt;7.1 테스트 레벨&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;단위 테스트(Unit Test)&lt;/strong&gt;: 함수·클래스 단위. TDD(Test-Driven Development) 기반 작성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;통합 테스트(Integration Test)&lt;/strong&gt;: 모듈 간 상호작용 검증.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;시스템 테스트(System Test)&lt;/strong&gt;: 전체 시스템 기능 및 비기능 요건 검증.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인수 테스트(Acceptance Test)&lt;/strong&gt;: 사용자 요구 만족도 확인. UAT(User Acceptance Testing).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="72-테스트-기법"&gt;7.2 테스트 기법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;화이트박스(경로 테스트, 분기 커버리지), 블랙박스(동등 분할, 경계값 분석).&lt;/li&gt;
&lt;li&gt;정적 검토: 코드 리뷰, 워크쓰루, 인스펙션.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="73-자동화와-cicd"&gt;7.3 자동화와 CI/CD&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;테스트 자동화 프레임워크(JUnit, pytest, Cypress).&lt;/li&gt;
&lt;li&gt;CI 도구(GitHub Actions, Jenkins)로 빌드·테스트·배포 자동화.&lt;/li&gt;
&lt;li&gt;테스트 커버리지, 품질 게이트(예: SonarQube) 관리.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-운영과-유지보수"&gt;8. 운영과 유지보수&lt;/h2&gt;
&lt;h3 id="81-유지보수-유형"&gt;8.1 유지보수 유형&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;수정 보수(Corrective)&lt;/strong&gt;: 결함 수정.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;적응 보수(Adaptive)&lt;/strong&gt;: 환경 변화 대응.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;완전 보수(Perfective)&lt;/strong&gt;: 성능 개선, 기능 강화.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;예방 보수(Preventive)&lt;/strong&gt;: 잠재 문제 제거.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-devops"&gt;8.2 DevOps&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;개발·운영 통합 문화. CI/CD + 모니터링 + IaC(Infrastructure as Code).&lt;/li&gt;
&lt;li&gt;도구: Docker, Kubernetes, Terraform, Prometheus, Grafana.&lt;/li&gt;
&lt;li&gt;지속적 피드백 루프: 로그 분석, APM(Application Performance Monitoring), 피처 플래그.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-품질-모델과-표준"&gt;9. 품질 모델과 표준&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ISO/IEC 25010&lt;/strong&gt;: 기능 적합성, 신뢰성, 사용성, 효율성, 유지보수성, 이식성, 보안성, 호환성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CMMI&lt;/strong&gt;: 조직 프로세스 성숙도 모델. 레벨 1~5 단계로 프로세스 개선 로드맵 제공.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ISO/IEC 12207&lt;/strong&gt;: 소프트웨어 생명주기 프로세스.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IEEE 표준&lt;/strong&gt;: SRS(IEEE 830), 테스트 문서(IEEE 829) 등 문서 템플릿 제공.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="10-도구-및-협업-전략"&gt;10. 도구 및 협업 전략&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;요구 추적: Jira, Azure DevOps, Trello.&lt;/li&gt;
&lt;li&gt;문서화: Confluence, Notion, MkDocs. 다이어그램은 PlantUML, Mermaid.&lt;/li&gt;
&lt;li&gt;코드 협업: GitHub, GitLab. Pull Request 리뷰, Pair Programming, Mob Programming.&lt;/li&gt;
&lt;li&gt;품질 측정 지표: 결함 밀도, 평균 고장 간격(MTBF), 결함 발견율, 리드 타임(Lead Time).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="11-윤리와-프로페셔널리즘"&gt;11. 윤리와 프로페셔널리즘&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;소프트웨어 엔지니어는 ACM/IEEE Code of Ethics 등을 준수해야 한다.&lt;/li&gt;
&lt;li&gt;개인정보 보호, 접근성, 알고리즘 편향 최소화, 라이선스 준수.&lt;/li&gt;
&lt;li&gt;프로젝트 실패 원인 분석(Postmortem, RCA)로 조직 학습 강화.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Codymate</title><link>https://ansangah.github.io/projects/codymate/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/projects/codymate/</guid><description>&lt;div data-pagefind-body&gt;
&lt;p&gt;Codymate의 프론트엔드 프로젝트 입니다.&lt;/p&gt;
&lt;p&gt;Codymate는 사용자의 옷장을 디지털화하여 손쉽게 코디를 추천하는 패션 어플리케이션입니다.
옷을 촬영하면 앱 내 옷장에 자동으로 추가되고, &lt;strong&gt;날씨·기분·장소&lt;/strong&gt;에 따라 맞춤형 코디를 제안합니다.
또한, &lt;strong&gt;패션 커뮤니티 기능&lt;/strong&gt;, &lt;strong&gt;AI 기반 추천 시스템&lt;/strong&gt;, &lt;strong&gt;체형 조정 기능&lt;/strong&gt;을 통해
다양한 체형에서의 착용 모습을 시각적으로 확인할 수 있습니다.
사용자의 일상 속 패션 결정을 지능적으로 도와주는 코디메이트입니다.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>데이터베이스</title><link>https://ansangah.github.io/blog/subjects/db/</link><pubDate>Wed, 30 Apr 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/db/</guid><description>&lt;h2 id="1-데이터베이스-정규화"&gt;1. 데이터베이스 정규화&lt;/h2&gt;
&lt;h3 id="11-정규화-개념"&gt;1.1 정규화 개념&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;정규화(Normalization)&lt;/strong&gt;: 릴레이션을 관련 있는 속성들만 포함하도록 분해하여 이상 현상을 제거하는 과정.&lt;/li&gt;
&lt;li&gt;이상 현상(Anomaly) 예방 목적. 데이터 중복을 최소화하고 데이터 무결성을 향상한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-이상-현상anomalies"&gt;1.2 이상 현상(Anomalies)&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;삽입 이상&lt;/strong&gt;: 새 데이터를 추가하기 위해 불필요한 다른 데이터를 함께 삽입해야 하는 문제.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;갱신 이상&lt;/strong&gt;: 중복된 튜플 중 일부만 수정되어 데이터 불일치가 발생.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;삭제 이상&lt;/strong&gt;: 특정 데이터를 삭제하면 같이 저장된 유의미한 정보도 함께 손실.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;정규화는 이러한 이상 현상을 제거하기 위해 &lt;strong&gt;함수 종속성&lt;/strong&gt;을 활용한다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="2-함수-종속"&gt;2. 함수 종속&lt;/h2&gt;
&lt;h3 id="21-정의"&gt;2.1 정의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;릴레이션 R에서 속성 집합 X가 Y를 결정한다면 $X \rightarrow Y$ (Y가 X에 함수 종속).&lt;/li&gt;
&lt;li&gt;모든 튜플에 대해 X의 값이 같다면 Y의 값도 동일하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-판단-기준"&gt;2.2 판단 기준&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;속성의 의미와 비즈니스 규칙을 기반으로 파악해야 하며, 단순히 현재 데이터 값으로 판단하지 않는다.&lt;/li&gt;
&lt;li&gt;기본키/후보키는 일반적으로 다른 모든 속성을 함수적으로 결정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-완전-함수-종속full-functional-dependency"&gt;2.3 완전 함수 종속(Full Functional Dependency)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;$X \rightarrow Y$이지만 X의 부분집합 어느 것도 Y를 결정하지 못할 때.&lt;/li&gt;
&lt;li&gt;기본키 전체에 의존하는 속성. 부분적으로 의존하면 안 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-부분-함수-종속partial-functional-dependency"&gt;2.4 부분 함수 종속(Partial Functional Dependency)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;합성키 X = {A,B} 중 일부(A 또는 B)에만 의존하는 경우.&lt;/li&gt;
&lt;li&gt;부분 함수 종속이 존재하면 제1 정규형을 넘어 제2 정규형으로 분해해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-정규화-단계"&gt;3. 정규화 단계&lt;/h2&gt;
&lt;h3 id="31-제1정규형-1nf"&gt;3.1 제1정규형 (1NF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;모든 속성값이 원자값(더 분해 불가능)이어야 한다.&lt;/li&gt;
&lt;li&gt;반복 그룹 제거, 다중값 속성을 분리.&lt;/li&gt;
&lt;li&gt;기본키에 완전 함수 종속되지 않으면 이상 현상 발생 → 제2정규형으로 분해 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-제2정규형-2nf"&gt;3.2 제2정규형 (2NF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1NF 만족 + 기본키가 아닌 모든 속성이 기본키에 &lt;strong&gt;완전 함수 종속&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;부분 함수 종속 제거. 합성키일 경우 각각의 속성이 부키 전체에 의존하도록 릴레이션 분해.&lt;/li&gt;
&lt;li&gt;여전히 이행적 종속(Transitive Dependency)이 있을 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-제3정규형-3nf"&gt;3.3 제3정규형 (3NF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2NF 만족 + 기본키가 아닌 속성이 기본키에 &lt;strong&gt;이행적으로 종속되지 않음&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;즉, A→B, B→C가 있을 때 A→C 관계를 제거.&lt;/li&gt;
&lt;li&gt;속성 간 종속으로 인한 갱신 이상 해결.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-보이스코드-정규형-bcnf"&gt;3.4 보이스/코드 정규형 (BCNF)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;3NF보다 강한 형태. 모든 함수 종속의 &lt;strong&gt;결정자(Determinant)&lt;/strong&gt; 가 후보키.&lt;/li&gt;
&lt;li&gt;하나의 릴레이션에 여러 후보키가 있을 때 3NF만으로는 이상 현상이 남을 수 있어 BCNF로 정규화.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;정규형을 너무 높이면 조인 비용이 커질 수 있으므로 실무에서는 성능과 무결성 사이에서 균형을 맞춘다. 제5정규형까지 항상 필요하지는 않다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="35-무손실-분해와-종속성-보존"&gt;3.5 무손실 분해와 종속성 보존&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;릴레이션 분해 시 원래 데이터를 잃지 않고(무손실) 주요 함수 종속성을 유지해야 한다.&lt;/li&gt;
&lt;li&gt;분해 후 조인하면 원래 관계를 복원할 수 있어야 함.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-뷰view"&gt;4. 뷰(View)&lt;/h2&gt;
&lt;h3 id="41-정의"&gt;4.1 정의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;하나 이상의 기본 테이블을 기반으로 한 &lt;strong&gt;가상 테이블&lt;/strong&gt;. 데이터는 실제 저장되지 않으며 SELECT 결과를 논리적으로 캡슐화한다.&lt;/li&gt;
&lt;li&gt;보안, 편의성, 추상화 목적으로 사용. 복잡한 SQL을 재사용하거나 민감한 칼럼을 숨길 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-생성-구문"&gt;4.2 생성 구문&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;VIEW&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;뷰명&lt;/span&gt; [(&lt;span style="color:#960050;background-color:#1e0010"&gt;속성리스트&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;AS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[&lt;span style="color:#66d9ef"&gt;WITH&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;CHECK&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;OPTION&lt;/span&gt;];
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;WITH CHECK OPTION&lt;/code&gt;: 뷰를 통해 DML 수행 시 뷰 조건을 항상 만족하도록 강제.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ORDER BY&lt;/code&gt;는 사용할 수 없으며 필요 시 뷰 SELECT에서 정렬.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-dml-제한"&gt;4.3 DML 제한&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;뷰를 통한 삽입/수정/삭제는 기본 테이블에 반영될 수 있으나 제약 존재:
&lt;ol&gt;
&lt;li&gt;기본키 또는 NOT NULL 속성을 포함하지 않으면 변경 불가.&lt;/li&gt;
&lt;li&gt;집계 함수, DISTINCT, GROUP BY, UNION 포함 시 대부분 읽기 전용.&lt;/li&gt;
&lt;li&gt;여러 테이블 조인으로 정의된 뷰는 업데이트가 제한적.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;뷰 삭제는 기본 테이블에 영향을 주지 않지만, 다른 제약조건이 뷰를 참조하면 먼저 제거해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="44-장점"&gt;4.4 장점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;복잡한 질의를 단순화.&lt;/li&gt;
&lt;li&gt;데이터 접근 제어(열 수준 보안).&lt;/li&gt;
&lt;li&gt;논리적 독립성 확보: 기본 테이블 구조가 바뀌어도 뷰를 통해 기존 인터페이스 유지 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-인덱스indexing"&gt;5. 인덱스(Indexing)&lt;/h2&gt;
&lt;h3 id="51-정의와-역할"&gt;5.1 정의와 역할&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;테이블에서 원하는 레코드를 &lt;strong&gt;빠르게 검색&lt;/strong&gt;하기 위한 자료구조.&lt;/li&gt;
&lt;li&gt;B-Tree, B+Tree, 해시 기반 등 다양한 구조 사용. 대부분 RDBMS는 정렬된 B+Tree 이용.&lt;/li&gt;
&lt;li&gt;인덱스는 테이블 데이터의 일부 사본으로, 키-값 쌍(키: 인덱스 컬럼값, 값: 레코드 위치)을 저장한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-동작-방식"&gt;5.2 동작 방식&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;인덱스 구조에서 검색 조건에 맞는 키값 탐색.&lt;/li&gt;
&lt;li&gt;해당 키가 가리키는 레코드 주소를 이용해 테이블에서 데이터 조회.&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;테이블 전체 탐색(Full Scan) 대신 로그 시간(O(log n)) 복잡도로 접근.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-인덱스-설계-시-고려"&gt;5.3 인덱스 설계 시 고려&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;적합한 상황&lt;/strong&gt;: 조건 기반 조회, 정렬/그룹핑, 조인 키, 읽기 작업이 많은 테이블.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주의 사항&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;삽입/수정/삭제 시 인덱스도 갱신되어 추가 비용 발생.&lt;/li&gt;
&lt;li&gt;컬럼에 함수/연산 적용 시 인덱스가 사용되지 않을 수 있다.&lt;/li&gt;
&lt;li&gt;자료형 불일치, OR 조건 다수, 낮은 선택도(중복 값이 많음) 상황은 효과 제한.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="54-클러스터형-vs-비클러스터형"&gt;5.4 클러스터형 vs 비클러스터형&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;클러스터형 인덱스&lt;/strong&gt;: 테이블 자체가 인덱스 순서로 정렬되는 구조(예: InnoDB의 PK).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비클러스터형 인덱스&lt;/strong&gt;: 별도의 인덱스 구조가 데이터 위치를 가리킨다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-트리거trigger"&gt;6. 트리거(Trigger)&lt;/h2&gt;
&lt;h3 id="61-개념"&gt;6.1 개념&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;특정 이벤트(DML: INSERT/UPDATE/DELETE, DDL, 로그온 등)가 발생했을 때 자동으로 실행되는 저장 프로시저.&lt;/li&gt;
&lt;li&gt;데이터 무결성 유지, 감사 로그 기록, 파생 값 유지 등에 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-종류"&gt;6.2 종류&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BEFORE 트리거&lt;/strong&gt;: 이벤트 수행 전에 실행. 입력값 검증, 변경 가능.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AFTER 트리거&lt;/strong&gt;: 이벤트 후 실행. 감사 로그 작성, 후속 처리.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;INSTEAD OF 트리거&lt;/strong&gt;: 뷰에서 DML을 가로채 직접 처리(주로 SQL Server).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-주의-사항"&gt;6.3 주의 사항&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;복잡한 로직이나 다중 트리거로 인해 성능 저하나 순환 호출이 발생할 수 있다.&lt;/li&gt;
&lt;li&gt;트리거 실패 시 전체 트랜잭션이 롤백될 수 있으므로 예외 처리 필수.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-저장-프로시저stored-procedure"&gt;7. 저장 프로시저(Stored Procedure)&lt;/h2&gt;
&lt;h3 id="71-정의"&gt;7.1 정의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터베이스에 저장된 SQL 코드 블록으로, 매개변수를 받아 반복 업무를 자동화.&lt;/li&gt;
&lt;li&gt;서버 측에서 실행 → 네트워크 트래픽 감소, 일관된 로직 유지.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="72-구조-예시"&gt;7.2 구조 예시&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;CREATE&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;PROCEDURE&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;프로시저명&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;IN&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;파라미터&lt;/span&gt; INT, &lt;span style="color:#66d9ef"&gt;OUT&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;결과&lt;/span&gt; VARCHAR(&lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;BEGIN&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;-- SQL 문장들
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;END&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;호출: &lt;code&gt;CALL 프로시저명(값, @out);&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="73-장단점"&gt;7.3 장단점&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;장점: 재사용성, 보안(권한 제어), 성능 최적화.&lt;/li&gt;
&lt;li&gt;단점: 복잡성 증가, 버전 관리/테스트 어려움, DBMS 종속성.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="74-프로시저-vs-함수"&gt;7.4 프로시저 vs 함수&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;함수(Function)는 값을 반환해야 하며 SELECT 내에서 사용 가능.&lt;/li&gt;
&lt;li&gt;프로시저는 반환값이 없거나 OUT 파라미터 사용, 트랜잭션 제어 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-트랜잭션transaction"&gt;8. 트랜잭션(Transaction)&lt;/h2&gt;
&lt;h3 id="81-정의"&gt;8.1 정의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터베이스에서 수행되는 &lt;strong&gt;논리적 작업 단위&lt;/strong&gt;. 여러 SQL 문장을 하나의 묶음으로 처리.&lt;/li&gt;
&lt;li&gt;성공 시 모두 커밋(Commit), 실패 시 모두 롤백(Rollback) → 일관성 유지.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-acid-특성"&gt;8.2 ACID 특성&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Atomicity(원자성)&lt;/strong&gt;: 전부 수행되거나 전혀 수행되지 않아야 한다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Consistency(일관성)&lt;/strong&gt;: 트랜잭션 전/후에 데이터 무결성 제약이 유지.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolation(격리성)&lt;/strong&gt;: 동시에 실행되는 트랜잭션 간 간섭 방지.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Durability(지속성)&lt;/strong&gt;: 커밋된 변경은 시스템 장애 후에도 보존.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="83-격리-수준isolation-level"&gt;8.3 격리 수준(Isolation Level)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Read Uncommitted&lt;/strong&gt;: Dirty Read 허용.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Read Committed&lt;/strong&gt;: 커밋된 데이터만 읽음 (Dirty Read 방지).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repeatable Read&lt;/strong&gt;: 같은 행 재조회 시 항상 동일 결과 (Non-repeatable Read 방지).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Serializable&lt;/strong&gt;: 완전한 직렬 실행과 동일. 가장 안전하지만 성능 저하.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="84-동시성-제어-기법"&gt;8.4 동시성 제어 기법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;잠금(Locking): 공유락/배타락, 2단계 잠금(2PL).&lt;/li&gt;
&lt;li&gt;낙관적 제어(Optimistic Concurrency Control), 타임스탬프 순서, 멀티버전 동시성 제어(MVCC).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="85-트랜잭션-설계-팁"&gt;8.5 트랜잭션 설계 팁&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;트랜잭션은 가능한 짧게 유지. 긴 트랜잭션은 교착상태, 잠금 경합을 유발.&lt;/li&gt;
&lt;li&gt;자주 사용하는 패턴: &lt;code&gt;BEGIN TRAN; ...; COMMIT;&lt;/code&gt; / 예외 발생 시 &lt;code&gt;ROLLBACK;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-실무-설계-체크리스트"&gt;9. 실무 설계 체크리스트&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;정규화와 비정규화 균형: 읽기 성능과 무결성 요구를 고려해 결정.&lt;/li&gt;
&lt;li&gt;핵심 작업에 필요한 인덱스만 유지하고, 주기적으로 사용 통계 분석.&lt;/li&gt;
&lt;li&gt;트리거/프로시저에는 예외 처리와 로깅을 포함해 추적 가능성 확보.&lt;/li&gt;
&lt;li&gt;트랜잭션 격리 수준을 업무 시나리오에 맞춰 선택하고, 교착 상태 모니터링.&lt;/li&gt;
&lt;li&gt;백업·복구 전략, 감사 로그 정책, 권한 관리(최소 권한 원칙)를 문서화한다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>운영체제</title><link>https://ansangah.github.io/blog/subjects/os/</link><pubDate>Wed, 30 Apr 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/os/</guid><description>&lt;h2 id="1-os-역사와-개념"&gt;1. OS 역사와 개념&lt;/h2&gt;
&lt;h3 id="11-batch-배치-처리"&gt;1.1 Batch (배치 처리)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;아주 초기 운영체제 형태. 한번에 하나의 작업(job)만 순차 실행.&lt;/li&gt;
&lt;li&gt;사람이 직접 작업을 순서대로 적재하고, 앞선 작업이 끝나야 다음 작업이 시작된다.&lt;/li&gt;
&lt;li&gt;중간에 사용자 개입이 불가하여 결과를 기다리는 동안 시스템이 비효율적으로 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-batch의-문제점"&gt;1.2 Batch의 문제점&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;CPU 유휴 시간 증가&lt;/strong&gt;: I/O 장치 대비 빠른 CPU가 대기하게 되어 자원이 낭비된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Job Switching 지연&lt;/strong&gt;: 사람이 직접 작업을 교체하므로 전환 시간이 길다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="13-spooling-문제점-1-해결"&gt;1.3 Spooling (문제점 1 해결)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I/O와 계산을 겹쳐 수행하도록 버퍼에 작업을 적재하는 기법.&lt;/li&gt;
&lt;li&gt;예시: 프린터 스풀링
&lt;ol&gt;
&lt;li&gt;인쇄 문서를 디스크/메모리 버퍼에 저장&lt;/li&gt;
&lt;li&gt;프린터는 버퍼에서 데이터를 가져와 자체 속도로 출력&lt;/li&gt;
&lt;li&gt;컴퓨터는 프린터 작업과 무관하게 다른 연산을 이어서 수행&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;장점: CPU가 I/O 완료를 기다리지 않고 다음 계산을 진행.&lt;/li&gt;
&lt;li&gt;단점: CPU 작업이 I/O 결과를 즉시 필요로 할 경우(read 등) 스풀링만으론 문제 해결이 어렵다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="14-automatic-job-sequencing-문제점-2-해결"&gt;1.4 Automatic Job Sequencing (문제점 2 해결)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;사람 개입 없이 운영체제가 작업을 순차적으로 실행하도록 스케줄링 소프트웨어를 도입.&lt;/li&gt;
&lt;li&gt;이전 작업 완료 즉시 다음 작업을 실행하여 배치 처리 대비 성능 향상.&lt;/li&gt;
&lt;li&gt;다수의 프로그램을 메모리에 준비시키기 위해 &lt;strong&gt;Multiprogramming&lt;/strong&gt; 기술이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="15-multiprogramming과-timesharing"&gt;1.5 Multiprogramming과 Timesharing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2개 이상의 작업을 메모리에 올려 두고 CPU를 교대로 배정.&lt;/li&gt;
&lt;li&gt;현재 작업이 I/O에 진입하면 즉시 다른 작업으로 전환하여 CPU 활용률을 높인다.&lt;/li&gt;
&lt;li&gt;기본 스케줄링은 FCFS이나 공정성을 위해 우선순위 기반 스케줄링이 도입된다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timesharing&lt;/strong&gt;: CPU 시간을 일정한 타임 슬라이스로 나눠 모든 프로그램이 조금씩 CPU를 사용.
&lt;ul&gt;
&lt;li&gt;빈번한 컨텍스트 스위칭으로 사용자 체감은 동시 실행에 가깝지만, 스위칭 비용이 성능 저하를 유발할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-os와-컴퓨터-시스템-구조"&gt;2. OS와 컴퓨터 시스템 구조&lt;/h2&gt;
&lt;h3 id="21-네-가지-구성-요소"&gt;2.1 네 가지 구성 요소&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;하드웨어&lt;/strong&gt;: CPU, 메모리, I/O 장치 등 연산 자원 제공.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;운영체제&lt;/strong&gt;: 응용 프로그램과 하드웨어 사이를 중재하며 자원 접근을 통제.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;응용 프로그램&lt;/strong&gt;: 사용자의 요구를 수행하며 어떤 자원을 어떻게 사용할지 결정.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;사용자(User)&lt;/strong&gt;: 시스템과 상호작용하는 주체.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="22-시스템-버스-구조"&gt;2.2 시스템 버스 구조&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;초기 시스템은 단일 버스 구조로 CPU·메모리·I/O가 동일 버스를 공유하여 병목이 발생.&lt;/li&gt;
&lt;li&gt;속도 격차 해결을 위해 &lt;strong&gt;계층적 이중 버스&lt;/strong&gt; 등장:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;System Bus&lt;/strong&gt;: 고속 CPU·메모리 연결.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I/O Bus&lt;/strong&gt;: 상대적으로 느린 장치를 연결해 병목 방지.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Northbridge&lt;/strong&gt;: 고속 장치용 버스 컨트롤러.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Southbridge&lt;/strong&gt;: 저속 장치 및 주변기기 제어.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-실행-모드-user-mode--kernel-mode"&gt;3. 실행 모드: User Mode &amp;amp; Kernel Mode&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CPU는 **시스템 보호(System Protection)**를 위해 최소 두 가지 권한 모드를 가진다.&lt;/li&gt;
&lt;li&gt;모드에 따라 접근 가능한 메모리·명령어가 구분된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="31-kernel-mode"&gt;3.1 Kernel Mode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;운영체제가 실행되는 특권 모드로 모든 명령·레지스터에 접근 가능.&lt;/li&gt;
&lt;li&gt;드라이버, 자원 관리자 등 핵심 기능이 여기서 동작한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-user-mode"&gt;3.2 User Mode&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;일반 응용 프로그램이 실행되는 제한 모드.&lt;/li&gt;
&lt;li&gt;특권 명령어를 실행할 수 없으며, 하드웨어 접근은 OS 서비스를 통해서만 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-모드-전환"&gt;3.3 모드 전환&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;시스템 콜, 인터럽트, 트랩 발생 시 CPU는 모드 비트를 변경해 커널에 진입한다.&lt;/li&gt;
&lt;li&gt;작업 종료 후 복귀 시 다시 User Mode로 전환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-cpu-이벤트-처리-기법"&gt;4. CPU 이벤트 처리 기법&lt;/h2&gt;
&lt;h3 id="41-인터럽트hardware-interrupt"&gt;4.1 인터럽트(Hardware Interrupt)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;비동기 외부 이벤트를 처리하기 위한 메커니즘.&lt;/li&gt;
&lt;li&gt;처리 순서: ① 현재 상태 저장 → ② ISR(Interrupt Service Routine) 진입 → ③ 상태 복원 → ④ 중단 지점 재개.&lt;/li&gt;
&lt;li&gt;장치별 우선순위를 부여해 긴급도를 조절하며, ISR은 짧고 신속하게 작성해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-트랩trap-software-interrupt"&gt;4.2 트랩(Trap, Software Interrupt)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;프로그램 내부의 동기 이벤트(예: 0으로 나누기, 시스템 콜)를 처리.&lt;/li&gt;
&lt;li&gt;트랩 발생 시 커널 모드로 전환되지만, 하드웨어 인터럽트와 달리 별도의 컨텍스트 저장 단계가 생략될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-io-device-구성-요소"&gt;4.3 I/O Device 구성 요소&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bus&lt;/strong&gt;: 데이터(Data), 주소(Address), 제어(Control) 라인으로 구성된 전송 통로.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Device Registers&lt;/strong&gt;: 버스 끝단의 제어/상태/Input/Output 레지스터. 메모리 매핑을 통해 CPU가 접근.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Controller&lt;/strong&gt;: 장치와 직접 상호작용하며 여러 버스 간 충돌을 조정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-device-access-방식"&gt;5. Device Access 방식&lt;/h2&gt;
&lt;h3 id="51-io-instruction"&gt;5.1 I/O Instruction&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CPU 내 고유 I/O 명령어로 장치와 직접 통신하는 원초적 방법.&lt;/li&gt;
&lt;li&gt;시스템마다 명령 집합이 달라 코드 이식성이 낮다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-memory-mapped-io"&gt;5.2 Memory-Mapped I/O&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;장치 레지스터를 시스템 메모리 주소 공간에 매핑.&lt;/li&gt;
&lt;li&gt;일반 메모리 접근 명령으로 I/O를 제어하므로 이식성과 프로그래밍 편의성이 높다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-io-처리-기법"&gt;6. I/O 처리 기법&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;운영체제가 I/O 요청 이후 완료 여부를 확인하는 방법.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="61-polling"&gt;6.1 Polling&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CPU가 루프를 돌며 장치 상태를 주기적으로 확인.&lt;/li&gt;
&lt;li&gt;장점: 장치 응답이 빠르면 즉시 처리 가능.&lt;/li&gt;
&lt;li&gt;단점: 대기 시간이 길면 CPU 시간을 낭비.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-interrupt-driven-io"&gt;6.2 Interrupt-Driven I/O&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CPU가 다른 작업을 수행하다가 장치 인터럽트를 받으면 ISR을 실행.&lt;/li&gt;
&lt;li&gt;장점: 불필요한 대기를 줄여 CPU 활용률 향상.&lt;/li&gt;
&lt;li&gt;단점: 잦은 컨텍스트 스위치로 오버헤드 발생, 이벤트 즉시 확인은 어려울 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote class="border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6"&gt;
&lt;p&gt;&lt;strong&gt;요약&lt;/strong&gt;: 장치가 빠르면 Polling, 느리면 Interrupt 방식이 효율적이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="7-data-transfer-방식"&gt;7. Data Transfer 방식&lt;/h2&gt;
&lt;h3 id="71-programmed-io"&gt;7.1 Programmed I/O&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CPU가 버스 상태 확인과 데이터 전송을 직접 담당.&lt;/li&gt;
&lt;li&gt;데이터가 크면 CPU 리소스가 크게 소모된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="72-dma-direct-memory-access"&gt;7.2 DMA (Direct Memory Access)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;별도의 DMA 컨트롤러가 CPU 대신 데이터 전송을 수행.&lt;/li&gt;
&lt;li&gt;동작: CPU가 DMA에 요청 → DMA가 메모리와 장치 사이 데이터 이동 → 완료 시 인터럽트 발생.&lt;/li&gt;
&lt;li&gt;장점: CPU offloading, 고속 대량 전송에 적합.&lt;/li&gt;
&lt;li&gt;단점: 하드웨어 비용과 설계 복잡도 증가, 버스 경합으로 인한 지연 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-os-설계-고려사항"&gt;8. OS 설계 고려사항&lt;/h2&gt;
&lt;h3 id="81-목적에-따른-분류"&gt;8.1 목적에 따른 분류&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;General Purpose OS&lt;/strong&gt;: 범용 환경을 위한 운영체제.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Special Purpose OS&lt;/strong&gt;: 임베디드, 실시간 등 특정 요구를 충족하기 위한 OS.&lt;/li&gt;
&lt;li&gt;다양한 특성(성능, 공평성, 신뢰성 등) 사이에서 적절한 &lt;strong&gt;Trade-off&lt;/strong&gt;가 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="82-layering-vs-modularity"&gt;8.2 Layering vs Modularity&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;시스템 복잡도를 줄이고 유지보수성을 높이기 위한 설계 원칙.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layering(계층화)&lt;/strong&gt;: 상·하위 계층 간 명확한 인터페이스. 상위는 하위 서비스만 사용하며 다른 계층을 직접 호출하지 않는다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Modularity(모듈화)&lt;/strong&gt;: 기능별 독립 모듈을 정의하고 인터페이스로 상호작용. 계층 제약은 없지만 의존성 관리가 중요.&lt;/li&gt;
&lt;li&gt;현실의 OS는 계층 구조 안에 여러 모듈을 배치해 안정성과 확장성을 확보한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-커널-구조와-시스템-콜"&gt;9. 커널 구조와 시스템 콜&lt;/h2&gt;
&lt;h3 id="91-system-call과-모드-전환"&gt;9.1 System Call과 모드 전환&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;유저 프로그램이 커널 서비스를 사용하기 위한 진입점.&lt;/li&gt;
&lt;li&gt;시스템 콜 API → Trap 발생 → CPU 모드 비트 변경 → 커널의 Trap Handler 실행 → 서비스 수행 후 User Mode로 복귀.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="92-시스템-콜-파라미터-전달"&gt;9.2 시스템 콜 파라미터 전달&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;레지스터&lt;/strong&gt;: 빠르지만 전달 가능한 인자 수가 제한적.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;메모리 블록&lt;/strong&gt;: 인자를 메모리 블록에 저장하고 시작 주소만 레지스터로 전달.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;스택 사용&lt;/strong&gt;: 사용자 프로그램이 스택에 push, 커널이 pop하여 읽는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="93-monolithic-kernel"&gt;9.3 Monolithic Kernel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;모든 커널 서비스가 하나의 주소 공간에서 실행.&lt;/li&gt;
&lt;li&gt;장점: 동일 주소 공간에 위치하므로 시스템 콜/서비스 간 데이터 전달 오버헤드가 작다.&lt;/li&gt;
&lt;li&gt;단점: 구성요소 간 결합도가 높아 유지보수가 어렵고, 한 모듈의 버그가 전체 시스템에 영향을 미칠 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="94-address-space-메모"&gt;9.4 Address Space 메모&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;주소 공간은 접근 가능한 주소 범위를 정의.&lt;br&gt;
같은 주소 공간을 공유해야 직접 참조가 가능하며, 분리된 주소 공간은 보호 기능을 제공한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="95-micro-kernel"&gt;9.5 Micro Kernel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;커널 기능을 서버 단위로 분할해 독립된 프로세스로 실행.&lt;/li&gt;
&lt;li&gt;마이크로 커널 자체는 최소한의 통신/프로세스 관리 기능만 담당.&lt;/li&gt;
&lt;li&gt;장점: 서비스 간 의존성이 낮아 유지보수와 기능 교체가 용이, 필요한 서버만 실행해 자원 절약 가능.&lt;/li&gt;
&lt;li&gt;단점: 서비스 호출마다 주소 공간 전환과 IPC가 발생해 성능이 저하될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="96-hybrid-kernel"&gt;9.6 Hybrid Kernel&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;현대 OS는 주로 Monolithic 기반에 동적 모듈/서비스 분리를 도입한 하이브리드 구조를 사용.&lt;/li&gt;
&lt;li&gt;핵심 기능은 커널 공간에, 확장 기능은 모듈·서버 형태로 제공해 성능과 확장성을 모두 확보한다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>컴퓨터네트워크</title><link>https://ansangah.github.io/blog/subjects/cn/</link><pubDate>Tue, 15 Apr 2025 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/cn/</guid><description>&lt;h2 id="chapter-1-introduction"&gt;Chapter 1. Introduction&lt;/h2&gt;
&lt;h3 id="11-데이터-통신-네트워크의-진화"&gt;1.1 데이터 통신 네트워크의 진화&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;설계 시 고려 요소: &lt;strong&gt;상업성&lt;/strong&gt;, &lt;strong&gt;통신 선로 설치 비용&lt;/strong&gt;(매우 높음), 장비 비용은 상대적으로 저렴.&lt;/li&gt;
&lt;li&gt;새로운 기술 도입 시 기존 인프라 재사용 여부와 투자 가치 평가가 중요.
&lt;ul&gt;
&lt;li&gt;성공 사례: xDSL (전화선 기반 고속 데이터 통신).&lt;/li&gt;
&lt;li&gt;실패 사례: 1970년대 영상통화(인프라 대비 수요 부족).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모뎀(Modem): 디지털 ↔ 아날로그 변환을 담당하여 기존 전화선 사용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="12-네트워크-발전-과정"&gt;1.2 네트워크 발전 과정&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;통신사는 기존 전화망 인프라를 최대한 활용하며 점진적으로 데이터 서비스를 확장.&lt;/li&gt;
&lt;li&gt;전화번호와 IP 주소 매핑: 인터넷 회선을 통해 일반 전화 서비스 제공 가능하지만 음질 저하.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="13-인터넷과-isp"&gt;1.3 인터넷과 ISP&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ISP(Internet Service Provider)&lt;/strong&gt;: KT, SKT 등 접속 서비스를 제공하는 사업자.&lt;/li&gt;
&lt;li&gt;계층적 구조: 지역 ISP → 백본 ISP → 국제 백본. 피어링과 트랜짓으로 상호 연결.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-19-host-to-host-delivery"&gt;Chapter 19. Host-to-Host Delivery&lt;/h2&gt;
&lt;h3 id="21-osi-7계층-요약"&gt;2.1 OSI 7계층 요약&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Physical&lt;/strong&gt;: 신호 전송.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Link&lt;/strong&gt;: MAC 주소, 오류 검출, hop-to-hop 전달.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Network&lt;/strong&gt;: 라우팅, 주소 지정, 멀티캐스트, 주소 해결.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transport&lt;/strong&gt;: TCP/UDP, end-to-end 신뢰성.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Session&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Presentation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Application&lt;/strong&gt;: HTTP, DNS 등. (실습에서는 주로 4~7계층 집중.)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="22-네트워크-계층-역할"&gt;2.2 네트워크 계층 역할&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Internetworking&lt;/strong&gt;: 이종 네트워크를 연결.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Addressing&lt;/strong&gt;: 전 세계적으로 유일한 주소 할당.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Routing&lt;/strong&gt;: 최적 경로 결정.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Packetizing&lt;/strong&gt;: 상위 계층 데이터 패킷화.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fragmenting&lt;/strong&gt;: MTU에 맞춰 분할.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="23-스위칭-방식"&gt;2.3 스위칭 방식&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Circuit Switching&lt;/strong&gt;: 회선 교환. 전화망처럼 연결 후 일정 대역폭 확보.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Packet Switching&lt;/strong&gt;: 패킷 단위 전달. 인터넷이 채택한 방식.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-datagram-접근"&gt;2.4 Datagram 접근&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Connectionless 통신. 각 패킷이 독립적으로 라우팅.&lt;/li&gt;
&lt;li&gt;out-of-order 도착 가능 → Transport 계층(TCP)에서 순서 재조립 및 흐름 제어.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-19-ip-주소와-서브넷"&gt;Chapter 19. IP 주소와 서브넷&lt;/h2&gt;
&lt;h3 id="31-ipv4-주소-체계"&gt;3.1 IPv4 주소 체계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;32-bit 주소, 유일성(Unique)과 보편성(Universal)을 만족해야 한다.&lt;/li&gt;
&lt;li&gt;클래식 주소(Classful Addressing):
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Class A&lt;/strong&gt;: 0xxxxxxx (0–127), NetID 7bit, HostID 24bit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class B&lt;/strong&gt;: 10xxxxxx (128–191), NetID 14bit, HostID 16bit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class C&lt;/strong&gt;: 110xxxxx (192–223), NetID 21bit, HostID 8bit.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class D&lt;/strong&gt;: 1110xxxx (224–239), 멀티캐스트.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Class E&lt;/strong&gt;: 1111xxxx (240–255), 실험용 예약.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;특수 주소:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-.0.0.0&lt;/code&gt;: 네트워크 주소.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-.0.0.1&lt;/code&gt;: 라우터(게이트웨이) 주소로 관습적으로 사용.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-.255.255.255&lt;/code&gt;: 브로드캐스트.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-subnetting"&gt;3.2 Subnetting&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;대규모 네트워크를 여러 서브넷으로 분할하여 관리성과 보안 향상.&lt;/li&gt;
&lt;li&gt;계산: &lt;code&gt;IP 주소 AND Subnet Mask = Subnetwork Address&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;CIDR(Classless Inter-Domain Routing)로 유연한 주소 할당 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-dhcp-dynamic-host-configuration-protocol"&gt;3.3 DHCP (Dynamic Host Configuration Protocol)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;동적으로 IP/네트워크 설정 할당.&lt;/li&gt;
&lt;li&gt;절차: Discover → Offer → Request → ACK.&lt;/li&gt;
&lt;li&gt;IP 고갈 문제 완화, 이동성이 높은 단말에 적합.&lt;/li&gt;
&lt;li&gt;NAT와 결합해 내부망 주소를 외부에 노출하지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-nat-network-address-translation"&gt;3.4 NAT (Network Address Translation)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;사설망 ↔ 공인망 주소 변환.&lt;/li&gt;
&lt;li&gt;하나의 공인 IP로 여러 내부 호스트를 인터넷에 연결.&lt;/li&gt;
&lt;li&gt;포트 주소 변환(PAT)으로 세션 구분.&lt;/li&gt;
&lt;li&gt;외부에서 내부 호스트 접근 시 포트 포워딩 또는 고정 IP 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="35-ip-datagram-format"&gt;3.5 IP Datagram Format&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;TTL(Time to Live): 라우터를 거칠 때마다 감소, 0이 되면 폐기해 루프 방지.&lt;/li&gt;
&lt;li&gt;Fragmentation: 패킷이 MTU보다 크면 분할. 재조립은 목적지에서만 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-20-network-layer-protocols"&gt;Chapter 20. Network Layer Protocols&lt;/h2&gt;
&lt;h3 id="41-arp-address-resolution-protocol"&gt;4.1 ARP (Address Resolution Protocol)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;목적: 동일 네트워크 내에서 IP → MAC 주소 매핑.&lt;/li&gt;
&lt;li&gt;동작: ARP Request는 브로드캐스트, Reply는 유니캐스트로 응답.&lt;/li&gt;
&lt;li&gt;캐시를 유지하여 잦은 질의를 줄임.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-ip-프로토콜"&gt;4.2 IP 프로토콜&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;헤더 최소 20바이트. 버전, 헤더 길이, TTL, 프로토콜, 체크섬 등이 포함.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multiplexing&lt;/strong&gt;: 프로토콜 필드로 상위 프로토콜 식별(TCP=6, UDP=17, OSPF=89 등).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-fragmentation과-mtu"&gt;4.3 Fragmentation과 MTU&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;링크별 MTU가 다를 경우 라우터가 패킷을 분할.&lt;/li&gt;
&lt;li&gt;DF(Don’t Fragment) 플래그가 설정되면 분할 불가 → ICMP 오류 반환.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="44-icmp-internet-control-message-protocol"&gt;4.4 ICMP (Internet Control Message Protocol)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IP 계층의 오류/진단 메시지 전달.&lt;/li&gt;
&lt;li&gt;Error-reporting: Destination Unreachable, Source Quench(Deprecated), Time Exceeded, Parameter Problem, Redirect.&lt;/li&gt;
&lt;li&gt;Query: Echo Request/Reply(ping), Timestamp 등.&lt;/li&gt;
&lt;li&gt;주의: ICMP는 오류만 보고하며 해결은 상위 계층이 담당. 흐름 제어/혼잡 제어 기능은 없음.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="45-ipv6-개요"&gt;4.5 IPv6 개요&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;128-bit 주소 공간, 헤더 간소화, QoS 필드 확장.&lt;/li&gt;
&lt;li&gt;주소 표기: 16진수와 &lt;code&gt;::&lt;/code&gt; 사용으로 0 시퀀스 축약.&lt;/li&gt;
&lt;li&gt;전환 전략:
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Dual Stack&lt;/strong&gt;: 장비가 IPv4/IPv6 동시 지원.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tunneling&lt;/strong&gt;: IPv6 패킷을 IPv4로 캡슐화하여 전송.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Header Translation&lt;/strong&gt;: IPv6 ↔ IPv4 헤더 변환 (정보 손실 가능).&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-21-unicast--multicast-routing"&gt;Chapter 21. Unicast &amp;amp; Multicast Routing&lt;/h2&gt;
&lt;h3 id="51-라우팅-유형"&gt;5.1 라우팅 유형&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unicast&lt;/strong&gt;: 1→1. 대부분의 일반 트래픽.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Multicast&lt;/strong&gt;: 1→N. 그룹 가입 노드에게만 전송.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Broadcast&lt;/strong&gt;: 1→All. IPv4에서 제한적 사용.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anycast&lt;/strong&gt;: 1→가장 가까운 노드. DNS 루트 서버 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-overlay-network"&gt;5.2 Overlay Network&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기존 물리망 위에 논리적 네트워크(컨텐츠 전송망, CDN 등) 구축.&lt;/li&gt;
&lt;li&gt;멀티미디어 스트리밍 시 동일 콘텐츠를 효율적으로 전달.&lt;/li&gt;
&lt;li&gt;신규 서비스 도입 시 전용 오버레이를 설계할지 비용 대비 효과 분석 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-unicast-routing-protocols"&gt;5.3 Unicast Routing Protocols&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RIP&lt;/strong&gt;: 거리 벡터, 홉 수 기반, 소규모 네트워크.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OSPF&lt;/strong&gt;: 링크 상태, 대규모 기업망.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BGP&lt;/strong&gt;: 경로 벡터, 자율 시스템 간 라우팅(인터넷 백본).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="54-multicast-routing"&gt;5.4 Multicast Routing&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IGMP(Internet Group Management Protocol)로 호스트 그룹 가입 관리.&lt;/li&gt;
&lt;li&gt;라우터는 멀티캐스트 트리를 구성하여 필요한 링크로만 패킷 전달.&lt;/li&gt;
&lt;li&gt;PIM(Protocol Independent Multicast) 등 라우팅 프로토콜로 구현.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="chapter-22-네트워크-보안-기초"&gt;Chapter 22. 네트워크 보안 기초&lt;/h2&gt;
&lt;h3 id="61-http-보안"&gt;6.1 HTTP 보안&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;기본 인증(Basic Auth)&lt;/strong&gt;: Base64로 사용자/비밀번호 전달 → 도청에 취약.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;요약 인증(Digest Auth)&lt;/strong&gt;: 해시 사용하지만 MITM 공격, 서버 인증 부재 등 취약점 존재.&lt;/li&gt;
&lt;li&gt;해결책: SSL/TLS 기반 HTTPS로 전송 계층을 암호화.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-전자메일-보안"&gt;6.2 전자메일 보안&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;요구사항: &lt;strong&gt;기밀성&lt;/strong&gt;, &lt;strong&gt;인증&lt;/strong&gt;, &lt;strong&gt;무결성&lt;/strong&gt;, &lt;strong&gt;부인방지&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;암호화 방식:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;대칭키&lt;/strong&gt;: 빠르지만 키 분배 문제.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;공개키/개인키&lt;/strong&gt;: PGP가 대표. 대칭키 + 공개키 혼합으로 효율 확보.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;좋은 패스프레이즈: 길고 추측 어려우며 사용자가 기억 가능해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-공개키-검증"&gt;6.3 공개키 검증&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CA(Certificate Authority)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;공인 기관이 인증서를 발급하여 (공개키, 소유자) 쌍을 보증.&lt;/li&gt;
&lt;li&gt;인증서에는 시리얼 번호, 주체 정보, 발급자, 유효 기간, 디지털 서명 포함.&lt;/li&gt;
&lt;li&gt;웹 브라우저는 루트 CA 목록을 신뢰 기반으로 내장.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PGP Web of Trust&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;사용자 간 상호 신뢰로 키를 검증.&lt;/li&gt;
&lt;li&gt;각 키는 Validity(인증 여부)와 Trust(신뢰도) 속성을 가진다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="64-transport-계층-보안"&gt;6.4 Transport 계층 보안&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SSL/TLS&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;공통 기능: 세션 키 교환, 데이터 암호화, 서버/클라이언트 인증.&lt;/li&gt;
&lt;li&gt;HTTPS = HTTP over TLS.&lt;/li&gt;
&lt;li&gt;단점: 초기 핸드셰이크 시 공용키 연산으로 지연 발생.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="65-ip-계층-보안-ipsec"&gt;6.5 IP 계층 보안 (IPsec)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;기능: 라우터 간 터널링, 암호화, 무결성 검증.&lt;/li&gt;
&lt;li&gt;프로토콜:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ESP (Encapsulating Security Payload)&lt;/strong&gt;: 암호화 + 인증.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AH (Authentication Header)&lt;/strong&gt;: 인증 + 무결성 (암호화 없음).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;모드: 전송 모드(End-to-End), 터널 모드(네트워크 간).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="66-vpn-virtual-private-network"&gt;6.6 VPN (Virtual Private Network)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;인터넷 상에서 사설망과 유사한 보안 환경 제공.&lt;/li&gt;
&lt;li&gt;비교:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Leased Line&lt;/strong&gt;: 전용 회선. 높은 비용, 높은 보안.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;혼합망&lt;/strong&gt;: 일부 전용 + 인터넷.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;VPN&lt;/strong&gt;: IPsec 터널 모드 활용, 비용 효율성과 보안성 절충.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-요약-및-학습-팁"&gt;7. 요약 및 학습 팁&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;네트워크 설계 시 기존 인프라 재사용과 새로운 기술 도입 간 비용/효과를 분석하라.&lt;/li&gt;
&lt;li&gt;IP 주소 설계를 위해 Subnetting과 CIDR 계산에 익숙해질 것.&lt;/li&gt;
&lt;li&gt;라우팅 프로토콜(RIP/OSPF/BGP)의 동작 원리를 비교해 네트워크 규모별 적용 전략을 세워라.&lt;/li&gt;
&lt;li&gt;보안은 계층별로 적용된다: 애플리케이션(HTTPS) → 트랜스포트(TLS) → 네트워크(IPsec).&lt;/li&gt;
&lt;li&gt;패킷 캡처 툴(Wireshark)을 활용해 ARP, ICMP, DHCP, TLS 핸드셰이크 등을 직접 관찰하면 이해도가 향상된다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>알고리즘</title><link>https://ansangah.github.io/blog/subjects/algorithm/</link><pubDate>Thu, 10 Oct 2024 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/algorithm/</guid><description>&lt;h2 id="1-개요"&gt;1. 개요&lt;/h2&gt;
&lt;p&gt;알고리즘 과목은 데이터를 구조화하고 문제를 효율적으로 해결하기 위한 방법론을 학습한다. 아래 정리는 강의에서 다루는 대표 주제를 빠르게 복습하거나, 각 개념의 관계를 한눈에 파악하기 위해 구성되었다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-정렬-알고리즘"&gt;2. 정렬 알고리즘&lt;/h2&gt;
&lt;p&gt;정렬은 대부분의 문제 해결 과정에서 선행되어야 하는 기본 연산이다. 알고리즘 선택 시 입력 크기, 데이터 분포, 메모리 사용량, 안정성(안정 정렬 여부) 등을 고려한다.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;알고리즘&lt;/th&gt;
&lt;th&gt;평균 시간복잡도&lt;/th&gt;
&lt;th&gt;최악 시간복잡도&lt;/th&gt;
&lt;th&gt;추가 공간&lt;/th&gt;
&lt;th&gt;특징&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;병합 정렬 (Merge Sort)&lt;/td&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;안정 정렬, 외부 정렬에 적합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;퀵 정렬 (Quick Sort)&lt;/td&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(log n)&lt;/td&gt;
&lt;td&gt;분할 정복, 피벗 선택이 핵심&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;선택 정렬 (Selection Sort)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;교환 횟수가 적음, 불안정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;버블 정렬 (Bubble Sort)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;구현이 단순, 이미 정렬된 경우 빠름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;삽입 정렬 (Insertion Sort)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(n²)&lt;/td&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;부분적으로 정렬된 데이터에 효율적, 안정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;기수 정렬 (Radix Sort)&lt;/td&gt;
&lt;td&gt;O(d·n)&lt;/td&gt;
&lt;td&gt;O(d·n)&lt;/td&gt;
&lt;td&gt;O(n+k)&lt;/td&gt;
&lt;td&gt;자릿수 기반, 비교 연산 불필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;계수·버킷 정렬 (Counting/Bucket)&lt;/td&gt;
&lt;td&gt;O(n+k)&lt;/td&gt;
&lt;td&gt;O(n+k)&lt;/td&gt;
&lt;td&gt;O(n+k)&lt;/td&gt;
&lt;td&gt;데이터 범위가 작거나 균등 분포일 때 강력&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="21-병합-정렬"&gt;2.1 병합 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;분할 정복 패턴을 통해 배열을 절반씩 나누고, 정렬된 부분 배열을 병합한다.&lt;/li&gt;
&lt;li&gt;안정 정렬이므로 동일 키의 상대적 순서가 유지된다.&lt;/li&gt;
&lt;li&gt;단점: 추가 메모리 요구, 재귀 호출로 인한 오버헤드.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-퀵-정렬"&gt;2.2 퀵 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;피벗을 기준으로 작은 값과 큰 값으로 파티셔닝 후 재귀 정렬.&lt;/li&gt;
&lt;li&gt;평균적으로 가장 빠르지만, 이미 정렬된 데이터에서 최악의 O(n²)가 발생하므로 랜덤 피벗 선택, median-of-three 등의 기법을 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-선택-정렬"&gt;2.3 선택 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;남아 있는 원소 중 최솟값(또는 최댓값)을 찾아 앞으로 보낸다.&lt;/li&gt;
&lt;li&gt;교환 횟수가 O(n)으로 제한되지만 전반적으로 느려 교육용으로 주로 사용된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-버블-정렬"&gt;2.4 버블 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;인접한 두 원소를 비교하여 순서가 틀리면 교환한다.&lt;/li&gt;
&lt;li&gt;패스마다 가장 큰 값이 뒤로 이동한다. 버전마다 조기 종료 플래그를 사용하면 부분 정렬된 데이터를 빠르게 처리 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="25-삽입-정렬"&gt;2.5 삽입 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;현재 원소를 이미 정렬된 구간에 삽입한다.&lt;/li&gt;
&lt;li&gt;리스트 길이가 작거나 사실상 정렬된 상태라면 매우 효율적이며, 각 단계에서 안정성이 유지된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="26-기수-정렬"&gt;2.6 기수 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;정수나 고정 길이 문자열을 자릿수별로 정렬한다. LSD(Least Significant Digit) 방식은 낮은 자릿수부터, MSD(Most Significant Digit)는 높은 자릿수부터 처리한다.&lt;/li&gt;
&lt;li&gt;내부적으로 안정 정렬(예: 계수 정렬)을 사용해야 전체 정렬의 안정성이 유지된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="27-계수-정렬과-버킷-정렬"&gt;2.7 계수 정렬과 버킷 정렬&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;계수 정렬은 값의 범위 k가 작을 때 O(n+k)의 성능을 보장하고, 버킷 정렬은 입력이 균등 분포일 때 평균 O(n) 성능을 기대한다.&lt;/li&gt;
&lt;li&gt;메모리 사용량이 크며, 실제 값의 범위를 사전에 알아야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-트리-레드-블랙-트리"&gt;3. 트리: 레드-블랙 트리&lt;/h2&gt;
&lt;p&gt;Balanced Binary Search Tree의 대표 구현 중 하나로, 삽입·삭제 후에도 높이가 O(log n)으로 유지되도록 색상 규칙을 적용한다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;불변 조건&lt;/strong&gt;: (1) 각 노드는 빨강 또는 검정, (2) 루트·리프(NIL)는 검정, (3) 빨강 노드의 자식은 모두 검정, (4) 어떤 노드에서 리프까지 가는 모든 경로의 검정 노드 수 동일.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;연산&lt;/strong&gt;: 삽입은 이진 탐색 트리에 삽입 후 색 재조정과 회전을 수행한다. 삭제는 대체 노드 선택 후 &lt;code&gt;double black&lt;/code&gt; 문제를 해결하기 위해 추가 회전/재색.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;장점&lt;/strong&gt;: AVL 트리보다 회전 횟수가 적어 삽입/삭제가 빈번한 환경에서 유리.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;응용&lt;/strong&gt;: STL의 &lt;code&gt;std::map&lt;/code&gt;, &lt;code&gt;std::set&lt;/code&gt;, Java의 &lt;code&gt;TreeMap&lt;/code&gt;, Linux Completely Fair Scheduler 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-해시-테이블"&gt;4. 해시 테이블&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;개념&lt;/strong&gt;: 키를 해시 함수로 변환하여 배열 인덱스를 직접 접근함으로써 평균 O(1)의 탐색/삽입/삭제 성능을 목표로 하는 자료구조.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;충돌(Collision)&lt;/strong&gt;: 다른 키가 같은 해시 버킷을 점유하는 현상. 해시 함수 품질과 로드 팩터(load factor = n / m)가 성능을 좌우한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="41-충돌-해결-전략"&gt;4.1 충돌 해결 전략&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;체이닝(Separate Chaining)&lt;/strong&gt;: 같은 버킷에서 연결 리스트/동적 배열을 사용. 구현이 단순하며 확장이 유연하지만 추가 포인터 메모리가 필요.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;개방 주소법(Open Addressing)&lt;/strong&gt;: 빈 버킷을 탐색해 데이터를 저장. 선형 조사(linear probing), 제곱 조사(quadratic probing), 이중 해싱(double hashing) 등이 있다. 캐시 친화적이지만 클러스터링 문제가 발생할 수 있다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;재해싱(Rehashing)&lt;/strong&gt;: 로드 팩터가 임계치를 넘으면 테이블 크기를 확장하고 모든 요소를 다시 해시한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="42-설계-팁"&gt;4.2 설계 팁&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;좋은 해시 함수는 균등 분포, 계산 효율성, 의도적 공격에 대한 저항성을 갖춰야 한다.&lt;/li&gt;
&lt;li&gt;동시성 환경에서는 락프리 해시, 세그먼트 락 등 추가 고려가 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-그래프-알고리즘"&gt;5. 그래프 알고리즘&lt;/h2&gt;
&lt;p&gt;그래프는 정점과 간선으로 구성된 추상화로, 네트워크, 경로 탐색, 위상 관계를 모델링한다. 구현 시 인접 리스트가 공간 효율적이며, 밀집 그래프는 인접 행렬이 연산을 단순화한다.&lt;/p&gt;
&lt;h3 id="51-위상-정렬-topological-sort"&gt;5.1 위상 정렬 (Topological Sort)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;방향 비순환 그래프(DAG)의 선행 관계를 선형 순서로 나열한다.&lt;/li&gt;
&lt;li&gt;Kahn 알고리즘(진입 차수 0 큐)과 DFS 기반 알고리즘이 대표적. 순환이 존재하면 수행이 불가능하므로 검출 역할도 수행한다.&lt;/li&gt;
&lt;li&gt;과목 선후수 관계, 빌드 시스템, 작업 스케줄링에 활용.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-벨만-포드-알고리즘-bellman-ford"&gt;5.2 벨만-포드 알고리즘 (Bellman-Ford)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;음수 가중치가 존재하는 그래프에서 단일 출발점 최단 경로를 구한다.&lt;/li&gt;
&lt;li&gt;총 V-1회 간선 완화(relaxation)를 수행하며, V번째 완화에서 값이 갱신되면 음수 사이클이 존재함을 의미한다.&lt;/li&gt;
&lt;li&gt;Dijkstra가 적용되지 않는 네트워크 라우팅(RIP) 등에 필수.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-페블-게임-pebble-game"&gt;5.3 페블 게임 (Pebble Game)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;DAG상의 노드에 조약돌(pebble)을 배치하면서 계산 순서를 분석하는 모델.&lt;/li&gt;
&lt;li&gt;레지스터 할당, 메모리 최소화 문제, 증명 복잡도 등에서 필요한 자원 수의 하한을 유도할 때 사용한다.&lt;/li&gt;
&lt;li&gt;목표는 목표 노드에 pebble을 올리기 위해 필요한 최소 pebble 수 또는 이동 횟수를 찾는 것. 동적 계획법, 탐욕 전략으로 표현 가능하지만 일반 그래프에서는 난이도가 높다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="54-기타-그래프-알고리즘-개요"&gt;5.4 기타 그래프 알고리즘 개요&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DFS/BFS&lt;/strong&gt;: 탐색 기본기. 경로 유무, 컴포넌트, 위상 정렬의 토대.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Strongly Connected Components (SCC)&lt;/strong&gt;: Kosaraju, Tarjan 알고리즘으로 DAG 축약 그래프 파악.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;최소 신장 트리(MST)&lt;/strong&gt;: Kruskal, Prim 알고리즘. 네트워크 비용 최소화 문제의 기본.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-문자열-매칭-라빈-카프-rabin-karp"&gt;6. 문자열 매칭: 라빈-카프 (Rabin-Karp)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;롤링 해시를 이용해 패턴의 해시값과 텍스트 부분 문자열 해시값을 비교한다.&lt;/li&gt;
&lt;li&gt;O(n+m) 기대시간을 제공하며, 해시 충돌 발생 시 실제 문자열 비교로 검증한다.&lt;/li&gt;
&lt;li&gt;여러 패턴을 동시에 검색할 때 패턴 해시를 미리 계산해두면 효율적이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-학습-팁"&gt;7. 학습 팁&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;구현 연습 시 시간복잡도 분석과 함께 최악·평균 케이스 데이터를 직접 만들어 시험해 본다.&lt;/li&gt;
&lt;li&gt;시각화 도구(VisuAlgo, CS Academy 등)로 단계별 동작을 확인하면 개념 이해가 빠르다.&lt;/li&gt;
&lt;li&gt;실제 코딩 테스트에서는 공간 제한과 입력 범위를 먼저 파악해 적절한 알고리즘을 선택한다.&lt;/li&gt;
&lt;li&gt;참고 교재: CLRS, Algorithms (Sedgewick), Problem Solving with Algorithms and Data Structures (Miller &amp;amp; Ranum).&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>CookieRun Modded Edition (Client)</title><link>https://ansangah.github.io/projects/cr-front/</link><pubDate>Thu, 30 May 2024 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/projects/cr-front/</guid><description>&lt;div data-pagefind-body&gt;
&lt;p&gt;기존 쿠키런 오픈소스를 기반으로 개발된 &lt;strong&gt;Java 데스크탑 클라이언트 프로젝트&lt;/strong&gt;입니다.
직접 구현한 그래픽 렌더링 시스템과 UI 패널 구조를 통해 게임의 메인 실행 환경을 구성했습니다.
서버와의 소켓 통신을 통해 실시간으로 게임 데이터를 주고받으며,
&lt;strong&gt;PVP 모드&lt;/strong&gt;, &lt;strong&gt;맵 전환&lt;/strong&gt;, &lt;strong&gt;플레이어 상태 표시&lt;/strong&gt; 등의 기능을 제공합니다.
Java의 AWT 및 Swing을 활용해 간결하면서도 동적인 게임 화면을 구현했습니다.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>CookieRun Modded Edition (Server)</title><link>https://ansangah.github.io/projects/cr-server/</link><pubDate>Thu, 30 May 2024 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/projects/cr-server/</guid><description>&lt;div data-pagefind-body&gt;
&lt;p&gt;기존 쿠키런 오픈소스를 기반으로 구현된 &lt;strong&gt;Java 서버 프로젝트&lt;/strong&gt;로,
클라이언트 간 &lt;strong&gt;PVP 매칭&lt;/strong&gt;과 게임 데이터 동기화를 담당합니다.
소켓 통신 기반의 멀티플레이 환경을 구현하였으며,
실시간 전투 데이터 송수신 및 점수 관리 기능을 포함합니다.
간결한 구조를 유지하기 위해 외부 데이터베이스 없이 메모리 기반으로 서버 상태를 관리합니다.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>데이터마이닝</title><link>https://ansangah.github.io/blog/subjects/dm/</link><pubDate>Tue, 16 Apr 2024 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/dm/</guid><description>&lt;h2 id="1-데이터마이닝-개요"&gt;1. 데이터마이닝 개요&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;대규모 데이터에서 &lt;strong&gt;유의미한 패턴과 지식을 추출&lt;/strong&gt;하는 과정.&lt;/li&gt;
&lt;li&gt;주된 단계: 데이터 정제 → 특징 추출 → 모델링/패턴 탐색 → 평가 및 시각화.&lt;/li&gt;
&lt;li&gt;특징: 대량(Volume), 다양성(Variety), 빠른 속도(Velocity), 정확성(Veracity)을 고려한 알고리즘 설계가 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-빈발-아이템셋-탐색frequent-itemset-mining"&gt;2. 빈발 아이템셋 탐색(Frequent Itemset Mining)&lt;/h2&gt;
&lt;h3 id="21-개념"&gt;2.1 개념&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;거래 데이터(쇼핑 내역 등)에서 함께 등장하는 아이템 묶음을 찾는 문제.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;지지도(Support)&lt;/strong&gt;: 전체 거래 중 해당 아이템셋이 등장한 비율.&lt;br&gt;
$$\mathrm{support}(X) = \frac{\text{X를 포함한 거래 수}}{\text{전체 거래 수}}$$&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;신뢰도(Confidence)&lt;/strong&gt;: 규칙 $X \rightarrow Y$의 신뢰도는 X가 포함된 거래 중 Y도 함께 등장할 확률.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;향상도(Lift)&lt;/strong&gt;: $ \frac{P(X,Y)}{P(X)P(Y)} $로 독립성 대비 얼마나 더 자주 같이 등장하는지 측정.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-apriori-알고리즘"&gt;2.2 Apriori 알고리즘&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;하향식(Top-down)&lt;/strong&gt; 탐색: 크기가 작은 빈발 아이템셋에서 시작하여 확장.&lt;/li&gt;
&lt;li&gt;원리: &lt;strong&gt;단조성(Apriori Principle)&lt;/strong&gt; — 어떤 아이템셋이 빈발하지 않다면 그 초집합도 빈발하지 않음.&lt;/li&gt;
&lt;li&gt;단계:
&lt;ol&gt;
&lt;li&gt;크기 1 아이템셋 후보 생성 및 지지도 계산.&lt;/li&gt;
&lt;li&gt;최소 지지도보다 큰 아이템셋만 남김.&lt;/li&gt;
&lt;li&gt;남은 아이템셋을 조합해 $k+1$ 크기 후보를 생성.&lt;/li&gt;
&lt;li&gt;반복하여 전체 빈발 아이템셋 도출.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;단점: 후보 생성/지지도 계산 시 많은 스캔이 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="23-fp-growth-frequent-pattern-growth"&gt;2.3 FP-Growth (Frequent Pattern Growth)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;후보 생성 없이 &lt;strong&gt;FP-트리&lt;/strong&gt; 구조를 이용해 패턴을 압축 저장.&lt;/li&gt;
&lt;li&gt;과정:
&lt;ol&gt;
&lt;li&gt;전체 거래를 스캔해 지지도 순으로 아이템 정렬.&lt;/li&gt;
&lt;li&gt;동일 순서로 트리에 삽입하여 경로 공유.&lt;/li&gt;
&lt;li&gt;각 아이템에 대한 조건부 트리를 구성해 재귀적으로 패턴 생성.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;Apriori보다 I/O 비용이 적고 빅데이터에 효율적.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="24-연관-규칙-생성"&gt;2.4 연관 규칙 생성&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;빈발 아이템셋에서 모든 가능한 분할을 생성하여 규칙 후보 생성.&lt;/li&gt;
&lt;li&gt;지지도·신뢰도·향상도 등 임계값을 적용해 의미 있는 규칙 선택.&lt;/li&gt;
&lt;li&gt;응용: 추천 시스템, 장바구니 분석, 침입 탐지.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-유사-항목-탐색-locality-sensitive-hashinglsh"&gt;3. 유사 항목 탐색: Locality Sensitive Hashing(LSH)&lt;/h2&gt;
&lt;h3 id="31-문제-정의"&gt;3.1 문제 정의&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;대규모 데이터셋에서 &lt;strong&gt;유사한 아이템을 빠르게 찾기&lt;/strong&gt; 위한 방법.&lt;/li&gt;
&lt;li&gt;예: 문서 중복 탐지, 이미지 검색, 레코드 중복 제거.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-기본-아이디어"&gt;3.2 기본 아이디어&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;해시 함수가 &lt;strong&gt;유사한 객체를 동일 버킷에 높은 확률로 매핑&lt;/strong&gt;하도록 설계.&lt;/li&gt;
&lt;li&gt;유사도 지표에 따라 해시 패밀리를 선택:
&lt;ul&gt;
&lt;li&gt;Jaccard 유사도 → MinHash.&lt;/li&gt;
&lt;li&gt;코사인 유사도 → Random Hyperplane.&lt;/li&gt;
&lt;li&gt;Lp 거리 → p-안정 분포 해시.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-minhash--밴드-기법"&gt;3.3 MinHash + 밴드 기법&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;문서를 &lt;strong&gt;셋&lt;/strong&gt;으로 표현하고 MinHash 시그니처(여러 해시 함수의 최소값)를 생성.&lt;/li&gt;
&lt;li&gt;시그니처를 r×b 밴드로 나눠 각 밴드마다 동일한 구간을 문자열로 취급해 해시 버킷에 저장.&lt;/li&gt;
&lt;li&gt;두 문서가 하나라도 같은 밴드-버킷에 들어가면 &lt;strong&gt;후보(pair)&lt;/strong&gt; 로 간주하고 실제 유사도를 계산.&lt;/li&gt;
&lt;li&gt;파라미터 (r,b) 조절로 유사도 임계값을 설정.
&lt;ul&gt;
&lt;li&gt;더 많은 밴드(b)는 거짓 음성 감소, 더 많은 행(r)은 거짓 양성 감소.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="34-lsh-파이프라인"&gt;3.4 LSH 파이프라인&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;데이터 전처리 및 특징화(셋/벡터).&lt;/li&gt;
&lt;li&gt;LSH 시그니처 생성.&lt;/li&gt;
&lt;li&gt;후보군 추출.&lt;/li&gt;
&lt;li&gt;정확한 거리 계산 후 상위 K개 또는 임계값 이상 반환.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="4-군집화clustering"&gt;4. 군집화(Clustering)&lt;/h2&gt;
&lt;h3 id="41-개요"&gt;4.1 개요&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;레이블이 없는 데이터에서 &lt;strong&gt;자연스러운 그룹&lt;/strong&gt;을 발견.&lt;/li&gt;
&lt;li&gt;목적: 군집 내 유사성 극대화, 군집 간 유사성 최소화.&lt;/li&gt;
&lt;li&gt;거리 척도: 유클리디언, 코사인, 해밍, DTW 등.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-k-means"&gt;4.2 K-means&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;구형(球形) 군집에 적합한 대표 알고리즘.&lt;/li&gt;
&lt;li&gt;절차:
&lt;ol&gt;
&lt;li&gt;초기 중심 K개 선택 (K-means++, 랜덤).&lt;/li&gt;
&lt;li&gt;각 데이터 포인트를 가장 가까운 중심에 할당.&lt;/li&gt;
&lt;li&gt;중심 갱신(할당된 포인트 평균).&lt;/li&gt;
&lt;li&gt;수렴할 때까지 반복.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;주의: K 값 선택(엘보우, 실루엣), 이상치 영향, 초기값 민감성.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-계층적-군집화"&gt;4.3 계층적 군집화&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;데이터 사이 거리를 기반으로 &lt;strong&gt;덴드로그램&lt;/strong&gt; 생성.&lt;/li&gt;
&lt;li&gt;상향식(Agglomerative): 각 포인트를 독립 군집으로 시작해 병합.
&lt;ul&gt;
&lt;li&gt;연결 기준: 단일(Single), 완전(Complete), 평균(Average), Ward.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;하향식(Divisive): 전체를 하나의 군집으로 보고 분할.&lt;/li&gt;
&lt;li&gt;원하는 군집 수만큼 수평선으로 잘라 결과 도출.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="44-밀도-기반-군집화-dbscan-hdbscan"&gt;4.4 밀도 기반 군집화 (DBSCAN, HDBSCAN)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;밀도가 높은 영역을 군집으로 정의하고 희소 영역은 노이즈로 처리.&lt;/li&gt;
&lt;li&gt;파라미터: $\varepsilon$ (반경), MinPts(최소 포인트 수).&lt;/li&gt;
&lt;li&gt;장점: 임의 모양 군집 탐색, 이상치 자동 탐지.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-그래프-기반-커뮤니티-탐지"&gt;5. 그래프 기반 커뮤니티 탐지&lt;/h2&gt;
&lt;h3 id="51-community-detection"&gt;5.1 Community Detection&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;그래프의 노드를 &lt;strong&gt;내부적으로 연결이 밀집된 하위 구조&lt;/strong&gt;로 분할.&lt;/li&gt;
&lt;li&gt;응용: 소셜 네트워크, 추천, 생물학 네트워크 분석.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="52-모듈러리티modularity"&gt;5.2 모듈러리티(Modularity)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;군집 내 연결 강도와 군집 간 연결 강도의 차이를 지표로 사용.&lt;/li&gt;
&lt;li&gt;Louvain, Leiden 알고리즘이 대표적: 모듈러리티 최대화를 반복 수행.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="53-스펙트럴-클러스터링spectral-clustering"&gt;5.3 스펙트럴 클러스터링(Spectral Clustering)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;그래프 라플라시안(Laplacian) 행렬의 고유벡터를 이용해 군집화.&lt;/li&gt;
&lt;li&gt;과정:
&lt;ol&gt;
&lt;li&gt;인접 행렬 $W$로 그래프 표현, 정도 행렬 $D$ 계산.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;정규화 라플라시안&lt;/strong&gt; $L = D^{-1/2}(D - W)D^{-1/2}$을 구성.&lt;/li&gt;
&lt;li&gt;$L$의 하위 k개의 고유벡터를 취해 새로운 특징 공간으로 임베딩.&lt;/li&gt;
&lt;li&gt;해당 공간에서 K-means 등 전통적 군집 알고리즘 수행.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;장점: 비선형 구조, 비구형 군집에도 적용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="54-비교"&gt;5.4 비교&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;모듈러리티 기반: 빠르지만 해상도 한계 존재.&lt;/li&gt;
&lt;li&gt;스펙트럴: 고유값 분해 비용이 있지만 품질 높은 분할 제공.&lt;/li&gt;
&lt;li&gt;실제 프로젝트에서는 그래프 크기, 희소성, 실시간 요구를 고려해 선택.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-차원-축소dimension-reduction"&gt;6. 차원 축소(Dimension Reduction)&lt;/h2&gt;
&lt;h3 id="61-필요성"&gt;6.1 필요성&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;고차원 데이터는 계산 비용 증가, 시각화 어려움, 차원의 저주 발생.&lt;/li&gt;
&lt;li&gt;차원 축소는 &lt;strong&gt;정보 손실을 최소화하면서 표현 차원 수를 줄이는 과정&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="62-주성분-분석pca"&gt;6.2 주성분 분석(PCA)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;공분산 행렬의 고유값 분해로 분산이 가장 큰 방향(주성분)을 찾는다.&lt;/li&gt;
&lt;li&gt;절차: 표준화 → 공분산 행렬 계산 → 고유값/고유벡터 → 상위 k개 선택 → 투영.&lt;/li&gt;
&lt;li&gt;주요 성질: 직교 변환, 선형 기법, 최대 정보 보존.&lt;/li&gt;
&lt;li&gt;한계: 비선형 패턴, 이상치에 민감.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="63-선형-판별-분석lda"&gt;6.3 선형 판별 분석(LDA)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;클래스 간 분산 대비 클래스 내 분산 비율을 최대화.&lt;/li&gt;
&lt;li&gt;지도학습 기반 차원 축소, 분류 성능 향상이 목표.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="64-비선형-차원-축소"&gt;6.4 비선형 차원 축소&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;t-SNE: 국소 구조 유지, 시각화에 탁월하지만 전역 구조 왜곡 가능.&lt;/li&gt;
&lt;li&gt;UMAP: t-SNE보다 빠르고 전역 구조를 더 잘 유지.&lt;/li&gt;
&lt;li&gt;Autoencoder: 심층 신경망으로 비선형 임베딩 학습.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="65-차원-축소와-lsh군집화-연계"&gt;6.5 차원 축소와 LSH/군집화 연계&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;고차원 벡터를 축소하여 LSH 효율 개선 및 노이즈 완화.&lt;/li&gt;
&lt;li&gt;군집화 전에 PCA로 잡음 제거 → 실루엣 지수 향상 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-데이터마이닝-프로젝트-팁"&gt;7. 데이터마이닝 프로젝트 팁&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;데이터 품질 확보: 결측치 처리, 이상치 탐지, 스케일링 필수.&lt;/li&gt;
&lt;li&gt;평가 지표:
&lt;ul&gt;
&lt;li&gt;빈발 패턴: 신뢰도, 향상도 외 Conviction, Kulczynski 등.&lt;/li&gt;
&lt;li&gt;군집/커뮤니티: 실루엣, Davies-Bouldin, 모듈러리티.&lt;/li&gt;
&lt;li&gt;차원 축소: 재구성 오차, 분류 성능 변화.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;시각화: 히트맵, 상관 행렬, 네트워크 그래프, 2D 임베딩(예: PCA, t-SNE).&lt;/li&gt;
&lt;li&gt;실무에서 LSH는 후보 생성, 정확한 판단은 후속 정밀 비교로 조합한다.&lt;/li&gt;
&lt;li&gt;반복적 실험과 파라미터 튜닝을 통해 재현 가능한 파이프라인을 문서화한다.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>자료구조</title><link>https://ansangah.github.io/blog/subjects/ds/</link><pubDate>Mon, 15 Apr 2024 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/blog/subjects/ds/</guid><description>&lt;h2 id="1-개요"&gt;1. 개요&lt;/h2&gt;
&lt;p&gt;자료구조는 데이터를 메모리와 디스크에 조직화하여 알고리즘이 효율적으로 작동하도록 돕는 기반 기술이다. 문제 해결 시에는 추상 자료형(ADT)이 제공하는 연산과 실제 구현 기법의 장단점을 함께 고려해야 한다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-배열과-클래스"&gt;2. 배열과 클래스&lt;/h2&gt;
&lt;h3 id="21-배열array"&gt;2.1 배열(Array)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;특징&lt;/strong&gt;: 연속된 메모리 블록, 인덱스를 통한 O(1) 랜덤 접근.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;제약&lt;/strong&gt;: 크기 고정, 중간 삽입·삭제 시 평균 O(n)의 이동 비용.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;활용&lt;/strong&gt;: 캐시 효율이 높아 수치 계산, DP 테이블, 게임 루프 상태 관리 등에 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="22-클래스-래핑"&gt;2.2 클래스 래핑&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;배열을 래핑한 클래스는 &lt;strong&gt;경계 검사&lt;/strong&gt;, &lt;strong&gt;동적 크기 조정&lt;/strong&gt;, &lt;strong&gt;반복자 제공&lt;/strong&gt; 같은 안정 장치를 제공한다.&lt;/li&gt;
&lt;li&gt;C++ &lt;code&gt;std::vector&lt;/code&gt;, Java &lt;code&gt;ArrayList&lt;/code&gt;는 내부적으로 동적 배열을 사용하며, 용량이 가득 차면 2배 확장(Amortized O(1) push).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="3-스택과-큐"&gt;3. 스택과 큐&lt;/h2&gt;
&lt;h3 id="31-스택stack"&gt;3.1 스택(Stack)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;후입선출(LIFO) 구조. 함수 호출 스택, 괄호 검사, DFS 역추적에 활용.&lt;/li&gt;
&lt;li&gt;핵심 연산: &lt;code&gt;push&lt;/code&gt;, &lt;code&gt;pop&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;. 배열·연결 리스트로 구현 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="32-큐queue"&gt;3.2 큐(Queue)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;선입선출(FIFO) 구조. BFS, 작업 스케줄링, 스트림 버퍼에서 사용.&lt;/li&gt;
&lt;li&gt;핵심 연산: &lt;code&gt;enqueue&lt;/code&gt;, &lt;code&gt;dequeue&lt;/code&gt;, &lt;code&gt;front&lt;/code&gt;. 원형 배열을 쓰면 인덱스가 자동으로 순환한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="33-덱deque"&gt;3.3 덱(Deque)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;양쪽에서 삽입·삭제 가능. 슬라이딩 윈도우, 모노톤 큐 최적화에 자주 등장.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="4-포인터와-연결-리스트"&gt;4. 포인터와 연결 리스트&lt;/h2&gt;
&lt;h3 id="41-포인터"&gt;4.1 포인터&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;포인터는 메모리 주소를 보관하는 변수. 동적 메모리(&lt;code&gt;malloc&lt;/code&gt;, &lt;code&gt;new&lt;/code&gt;)로 생성한 객체를 가리킨다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;주의&lt;/strong&gt;: 널 포인터 방지, Dangling Pointer(해제 후 사용), 이중 해제를 경계해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="42-단일-연결-리스트singly-linked-list"&gt;4.2 단일 연결 리스트(Singly Linked List)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;노드: &lt;code&gt;(데이터, 다음 포인터)&lt;/code&gt;. 삽입·삭제가 O(1), 임의 접근은 O(n).&lt;/li&gt;
&lt;li&gt;머리 삽입, 꼬리 포인터 유지, 더미 헤드 사용으로 구현 복잡도를 낮춘다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="43-이중-연결-리스트doubly-linked-list"&gt;4.3 이중 연결 리스트(Doubly Linked List)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;앞·뒤 포인터를 모두 보유하여 양방향 순회 가능. LRU 캐시, 에디터 구현에 유용.&lt;/li&gt;
&lt;li&gt;포인터 업데이트가 두 배로 많아 실수 발생 여지가 있으므로 테스트가 필수.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="5-리스트-추상-자료형"&gt;5. 리스트 추상 자료형&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;리스트 ADT는 순서를 가진 요소 컬렉션을 정의하며, 구현체에 따라 성능이 달라진다.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;동적 배열 리스트&lt;/strong&gt;: 인덱스 접근 O(1), 중간 삽입·삭제 O(n).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;연결 리스트&lt;/strong&gt;: 삽입·삭제 O(1) (포인터 확보 시), 검색 O(n). Iteration이 잦다면 커서 기반 인터페이스를 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="6-재귀recursion"&gt;6. 재귀(Recursion)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;함수가 자기 자신을 호출해 문제를 하위 문제로 쪼갠다.&lt;/li&gt;
&lt;li&gt;구성 요소: &lt;strong&gt;기저 사례(Base Case)&lt;/strong&gt;, &lt;strong&gt;재귀 관계&lt;/strong&gt;, &lt;strong&gt;상태 전파&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;시스템 호출 스택 깊이 제한을 고려해야 하며, Tail Recursion은 반복문으로 변환해 최적화 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="7-트리tree"&gt;7. 트리(Tree)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;비선형 계층 자료구조. 루트에서 자식으로 분기하며 사이클이 없다.&lt;/li&gt;
&lt;li&gt;용어 정리: 깊이(depth), 높이(height), 차수(degree), 서브트리(subtree).&lt;/li&gt;
&lt;li&gt;순회: 전위(preorder), 중위(inorder), 후위(postorder), 레벨 순서(level-order). 재귀 또는 큐를 활용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="8-이진-탐색-트리bst"&gt;8. 이진 탐색 트리(BST)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;왼쪽 서브트리 &amp;lt; 루트 &amp;lt; 오른쪽 서브트리 규칙을 유지하는 이진 트리.&lt;/li&gt;
&lt;li&gt;평균적으로 탐색·삽입·삭제 O(log n), 편향 시 O(n).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;균형화 기법&lt;/strong&gt;: AVL, Red-Black Tree, Treap, Splay Tree 등. 균형 트리를 사용하면 최악 시간 복잡도를 보장할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="9-우선순위-큐priority-queue"&gt;9. 우선순위 큐(Priority Queue)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;각 요소에 우선순위를 부여하고 가장 높은(또는 낮은) 우선순위 요소를 반환.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;힙(Heap)&lt;/strong&gt; 기반 구현이 일반적: &lt;code&gt;insert&lt;/code&gt;, &lt;code&gt;extract&lt;/code&gt; O(log n), &lt;code&gt;peek&lt;/code&gt; O(1).&lt;/li&gt;
&lt;li&gt;Applications: Dijkstra, 작업 스케줄링, 이벤트 시뮬레이션, Median 유지.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="10-그래프graph"&gt;10. 그래프(Graph)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;정점(V)과 간선(E)으로 구성. 방향성, 다중 간선, 자기 루프 유무로 분류.&lt;/li&gt;
&lt;li&gt;표현 방식:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;인접 리스트&lt;/strong&gt;: 희소 그래프에 적합, 공간 O(V+E).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;인접 행렬&lt;/strong&gt;: 간선 여부 확인 O(1), 공간 O(V²).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;탐색 기법: DFS(스택/재귀), BFS(큐). 컴포넌트 분리, 위상 정렬, 사이클 검출 등 다양한 문제의 기본.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="11-가중치-그래프weighted-graph"&gt;11. 가중치 그래프(Weighted Graph)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;간선마다 비용이 있는 그래프. 지도, 네트워크, 물류 최적화 등에서 활용.&lt;/li&gt;
&lt;li&gt;단일 출발 최단 거리: Dijkstra(음수 가중치X), Bellman-Ford(음수 허용), SPFA(평균 개선).&lt;/li&gt;
&lt;li&gt;전체 최단 거리: Floyd-Warshall(O(V³)), Johnson 알고리즘(희소 그래프에 효율적).&lt;/li&gt;
&lt;li&gt;최소 신장 트리: Kruskal(Union-Find), Prim(우선순위 큐).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="12-정렬sorting"&gt;12. 정렬(Sorting)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;데이터 순서를 재구성해 탐색이나 통계를 용이하게 하는 기본 연산.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비교 기반&lt;/strong&gt;: 퀵·병합·힙 정렬, 하한 O(n log n).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;비교 비기반&lt;/strong&gt;: 계수, 기수, 버킷 정렬. 데이터 범위나 자릿수를 활용해 O(n+k) 달성.&lt;/li&gt;
&lt;li&gt;조건 비교: 안정성, 제자리(in-place), 메모리, 분할 정복 여부 등을 평가해 선택한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="13-탐색searching"&gt;13. 탐색(Searching)&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;선형 탐색&lt;/strong&gt;: 순차 검사, 정렬 불필요, O(n).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;이진 탐색&lt;/strong&gt;: 정렬된 배열에서 중간값 비교로 범위를 절반씩 축소, O(log n).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;해시 탐색&lt;/strong&gt;: 평균 O(1), 충돌 대비 체이닝/개방 주소법을 설계.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;트리 탐색&lt;/strong&gt;: BST, B-Tree 등에서 노드 비교로 O(log n) 기대. 균형 유지가 핵심.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="14-학습-팁"&gt;14. 학습 팁&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;각 자료구조 연산의 시간·공간 복잡도를 직접 표로 정리해 반복 암기한다.&lt;/li&gt;
&lt;li&gt;IDE 디버거로 포인터 변화를 추적하면 연결 구조와 재귀 호출 흐름이 명확해진다.&lt;/li&gt;
&lt;li&gt;실전 문제에서는 입력 크기, 갱신 빈도, 임의 접근 필요성 등을 분석해 최적의 자료구조를 선택하라.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>이력서</title><link>https://ansangah.github.io/experience/</link><pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate><guid>https://ansangah.github.io/experience/</guid><description/></item></channel></rss>