This commit is contained in:
Morgan 2023-12-01 20:54:12 +09:00
parent 5f4628fddd
commit 3cd77a68cc
96 changed files with 14172 additions and 1 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
public/*
*.lock *.lock
.hugo_build.lock .hugo_build.lock

View File

@ -0,0 +1,312 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>파이썬으로 구현한 뉴턴의 방정식과 적분방정식 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="파이썬으로 구현한 뉴턴의 방정식과 적분방정식" />
<meta property="og:description" content="우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-05-21T13:18:27+00:00" />
<meta property="article:modified_time" content="2021-05-21T13:18:27+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="파이썬으로 구현한 뉴턴의 방정식과 적분방정식"/>
<meta name="twitter:description" content="우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "파이썬으로 구현한 뉴턴의 방정식과 적분방정식",
"item": "http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "파이썬으로 구현한 뉴턴의 방정식과 적분방정식",
"name": "파이썬으로 구현한 뉴턴의 방정식과 적분방정식",
"description": "우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다.",
"keywords": [
],
"articleBody": "우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다.뉴턴의 가속도 법칙은 $ F = \\frac{dp}{dt} $ 로 표현할 수 있습니다. 이 법칙에 의하면, 질량의 변화가 없는 물체에서, $ a $ 는 $ F$ 에 비례합니다. 따라서 각 순간 물체에 작용하는 힘의 크기를 안다면, 그 물체의 가속도를 알 수 있겠죠?\n이때, 가속도와 속도, 변위의 정의를 이용하면 $ a = \\frac{dv}{dt} $ 이고, $ v = \\frac{dx}{dt} $입니다.가속도를 안다면 적분을 통해 속도를 알 수 있고, 속도를 안다면 변위를 알 수 있죠.정상상태에서는 물체에 작용하는 힘의 방정식을 구할 수 있습니다. 이것을 질량으로 나눠 가속도를 얻을 수 있고, 속도와 변위의 방정식을 얻을 수 있습니다.\n하지만, 컴퓨터는 대수적으로 적분할 수 없습니다. (물론 할 수 있는 알고리즘도 있지만 불완전하죠)그렇다면 어떻게 각 시점에서 가속도의 값을 알고, 속도와 변위의 값을 알 수 있을까요?이렇게 미분방정식을 통해서 각 시점의 이산적인 변수값을 알 수 있도록 하는 것이 오일러 근사법입니다.오일러 근사법을 통틀어 이렇게 수치적으로 방정식을 해석하는 학문을 통틀어 수치해석학이라고 합니다.이렇게 물리를 시뮬레이션 하거나 컴퓨터로 해를 구할 때는 수치해석학을 사용합니다.\n오일러 방정식이란, $$ \\frac{dy}{dx} = f(x) $$라고 표현되어지는 미분 방정식이 있을 때, 오일러 근사법을 이용하면 일정한 지점의 $y$ 값을 근사로 구할 수 있습니다.\n$$ y_{n+1} = y_n + \\frac{dy}{dx}|_{x_n} \\Delta x $$ 라는 식으로 말이죠.\n이 식을 이용하면 특정 원점으로부터 $\\Delta x$만큼의 일정한 간격을 띄어가며 $y$ 를 근사할 수 있습니다.\n이 방법으로 물체에 작용하는 힘을 알 때 변위와 속도를 구할 수 있습니다. 특정 $\\Delta t$를 기준으로 $\\Delta$의 $n$배만큼의 시점에서 구할 수 있습니다.\n$$ v_{n+1} = v_n + \\frac{dv}{dt}|_{t_n} \\Delta t $$\n$$ x_{n+1} = x_n + \\frac{dx}{dt}|_{t_n} \\Delta t $$\n으로 말이죠..\n이제 파이썬으로 오일러 근사법을 구현해 봅시다. 이렇게 데이터의 배열끼리의 연산을 취급할 때에는 파이썬의 수치분석 모듈인 Numpy를 사용합니다. 하지만, 간단한 시뮬레이션에서는 파이썬 기본으로도 충분합니다. 그래프를 표현하기 위해 matplotlib과 수식을 위해 math를 이용합니다.\nimport matplotlib.pyplot as plt import math x0 = 0.0 y0 = 1.0 dx = 0.01 step = 1000 dydx = lambda x, y: 1/y x = [x0 + dx*i for i in range(step)] y = [y0] for n in range(step-1): y.append(y[n] + dydx(x[n],y[n]) * dx) plt.plot(x, y) plt.grid() plt.xlabel(\"x\") plt.ylabel(\"y\") plt.legend() plt.show() $ \\frac{dy}{dx} = \\frac{1}{y} $\n",
"wordCount" : "398",
"inLanguage": "en",
"datePublished": "2021-05-21T13:18:27Z",
"dateModified": "2021-05-21T13:18:27Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
파이썬으로 구현한 뉴턴의 방정식과 적분방정식
</h1>
<div class="post-meta"><span title='2021-05-21 13:18:27 &#43;0000 UTC'>
May 21, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다.뉴턴의 가속도 법칙은 $ F = \frac{dp}{dt} $ 로 표현할 수 있습니다. 이 법칙에 의하면, 질량의 변화가 없는 물체에서, $ a $ 는 $ F$ 에 비례합니다. 따라서 각 순간 물체에 작용하는 힘의 크기를 안다면, 그 물체의 가속도를 알 수 있겠죠?</p>
<p>이때, 가속도와 속도, 변위의 정의를 이용하면 $ a = \frac{dv}{dt} $ 이고, $ v = \frac{dx}{dt} $입니다.가속도를 안다면 적분을 통해 속도를 알 수 있고, 속도를 안다면 변위를 알 수 있죠.정상상태에서는 물체에 작용하는 힘의 방정식을 구할 수 있습니다. 이것을 질량으로 나눠 가속도를 얻을 수 있고, 속도와 변위의 방정식을 얻을 수 있습니다.</p>
<p>하지만, 컴퓨터는 대수적으로 적분할 수 없습니다. (물론 할 수 있는 알고리즘도 있지만 불완전하죠)그렇다면 어떻게 각 시점에서 가속도의 값을 알고, 속도와 변위의 값을 알 수 있을까요?이렇게 미분방정식을 통해서 각 시점의 이산적인 변수값을 알 수 있도록 하는 것이 오일러 근사법입니다.오일러 근사법을 통틀어 이렇게 수치적으로 방정식을 해석하는 학문을 통틀어 수치해석학이라고 합니다.이렇게 물리를 시뮬레이션 하거나 컴퓨터로 해를 구할 때는 수치해석학을 사용합니다.</p>
<h3 id="오일러-방정식이란">오일러 방정식이란,<a hidden class="anchor" aria-hidden="true" href="#오일러-방정식이란">#</a></h3>
<p>$$ \frac{dy}{dx} = f(x) $$라고 표현되어지는 미분 방정식이 있을 때, 오일러 근사법을 이용하면 일정한 지점의 $y$ 값을 근사로 구할 수 있습니다.</p>
<p>$$ y_{n+1} = y_n + \frac{dy}{dx}|_{x_n} \Delta x $$ 라는 식으로 말이죠.</p>
<p>이 식을 이용하면 특정 원점으로부터 $\Delta x$만큼의 일정한 간격을 띄어가며 $y$ 를 근사할 수 있습니다.</p>
<p>이 방법으로 물체에 작용하는 힘을 알 때 변위와 속도를 구할 수 있습니다. 특정 $\Delta t$를 기준으로 $\Delta$의 $n$배만큼의 시점에서 구할 수 있습니다.</p>
<p>$$ v_{n+1} = v_n + \frac{dv}{dt}|_{t_n} \Delta t $$</p>
<p>$$ x_{n+1} = x_n + \frac{dx}{dt}|_{t_n} \Delta t $$</p>
<p>으로 말이죠..</p>
<h3 id="이제-파이썬으로-오일러-근사법을-구현해-봅시다">이제 파이썬으로 오일러 근사법을 구현해 봅시다.<a hidden class="anchor" aria-hidden="true" href="#이제-파이썬으로-오일러-근사법을-구현해-봅시다">#</a></h3>
<p>이렇게 데이터의 배열끼리의 연산을 취급할 때에는 파이썬의 수치분석 모듈인 Numpy를 사용합니다. 하지만, 간단한 시뮬레이션에서는 파이썬 기본으로도 충분합니다. 그래프를 표현하기 위해 matplotlib과 수식을 위해 math를 이용합니다.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">math</span>
</span></span><span class="line"><span class="cl"><span class="n">x0</span> <span class="o">=</span> <span class="mf">0.0</span>
</span></span><span class="line"><span class="cl"><span class="n">y0</span> <span class="o">=</span> <span class="mf">1.0</span>
</span></span><span class="line"><span class="cl"><span class="n">dx</span> <span class="o">=</span> <span class="mf">0.01</span>
</span></span><span class="line"><span class="cl"><span class="n">step</span> <span class="o">=</span> <span class="mi">1000</span>
</span></span><span class="line"><span class="cl"><span class="n">dydx</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">:</span> <span class="mi">1</span><span class="o">/</span><span class="n">y</span>
</span></span><span class="line"><span class="cl"><span class="n">x</span> <span class="o">=</span> <span class="p">[</span><span class="n">x0</span> <span class="o">+</span> <span class="n">dx</span><span class="o">*</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">step</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"><span class="n">y</span> <span class="o">=</span> <span class="p">[</span><span class="n">y0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">step</span><span class="o">-</span><span class="mi">1</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">y</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">y</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">+</span> <span class="n">dydx</span><span class="p">(</span><span class="n">x</span><span class="p">[</span><span class="n">n</span><span class="p">],</span><span class="n">y</span><span class="p">[</span><span class="n">n</span><span class="p">])</span> <span class="o">*</span> <span class="n">dx</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">grid</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">&#34;x&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">&#34;y&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</span></span></code></pre></div><figure><img src="https://blog.kakaocdn.net/dn/KMPAl/btq9fmV0ntZ/HPdiTkaknSISR4yGvxKUSK/img.png"
alt="$ \frac{dy}{dx} = \frac{1}{y} $"/><figcaption>
<p>$ \frac{dy}{dx} = \frac{1}{y} $</p>
</figcaption>
</figure>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,287 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Security of IoT | Morgan&#39;s Blog</title>
<meta name="keywords" content="security">
<meta name="description" content="Security of IoT IoT란? IoT (Internet of Things), 독립적으로 존재했던 각종 전자기기 사물들이 인터넷으로 엮여 한번에 관리할 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2021/08/security-of-iot/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Security of IoT" />
<meta property="og:description" content="Security of IoT IoT란? IoT (Internet of Things), 독립적으로 존재했던 각종 전자기기 사물들이 인터넷으로 엮여 한번에 관리할 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2021/08/security-of-iot/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-08-06T10:32:57+00:00" />
<meta property="article:modified_time" content="2021-08-06T10:32:57+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Security of IoT"/>
<meta name="twitter:description" content="Security of IoT IoT란? IoT (Internet of Things), 독립적으로 존재했던 각종 전자기기 사물들이 인터넷으로 엮여 한번에 관리할 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "Security of IoT",
"item": "http://blog.morgan.kr/2021/08/security-of-iot/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Security of IoT",
"name": "Security of IoT",
"description": "Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.\nIoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.",
"keywords": [
"security"
],
"articleBody": "Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.\nIoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.\nIoT 서비스 제공자들은 사용자들의 데이터를 분석하는 더욱 발전한 알고리즘을 개발하면서 사용자들의 데이터를 수집한다. 이것들은 모여 방대한 빅 데이터가 된다. 물론 고객의 개인정보 무단수집과 남용의 논란도 계속 이어져 왔지만, 서비스를 이용하기 위해서 어쩔 수 없이 개인정보와 사생활을 팔아야 하는 것은 안타까운 일이다.\nIoT 보안 IoT에서는 보안이 매우 중요하다. 개인의 사생활을 담당하고 있기도 하지만, 생활 환경을 조절할 수 있어 자칫하면 목숨까지 위협할 수 있기 떄문이다. IoT기기는 소형화되어 있으며 저성능으로 구성되고 하드웨어에 자체에 접근이 쉬워 해킹에 매우 취약하다. 자동화된 생산에서 만약 반도체 설계부터 문제가 있거나 펌웨어에 백도어나 트로이 목마가 존재한다면 매우 심각하고 영구적인 보안 결함이 될 것이다. 따라서, 반도체 설계, 생산 과정에서 모듈 점검을 정확하게 진행하여야 하며, 점대점(Point-to-Point) 보안을 확립하는 것이 중요하다. 또한, 저성능 프로세서에 대비하기 위해 주변에 보안칩(암호 Co-Processor)를 장치하는 것이 좋다. 소프트웨어 적인 보안은 업데이트하기 용이하고 대처하기 쉽다는 장점이 있지만, 하드웨어 보안을 확립한다면 물리적 보안, 암호 알고리즘, 보안 부팅, 키 암호화, 모듈 서명 등 다양한 보안 기능과 해킹 방지를 탑재할 수 있어 이를 확립하는 것이 무엇보다 중요하다.\n반도체 물리적 복제 방지 (PUF)나 보안 칩(TPF)등의 탑재가 가장 중요할 것이며, 이는 키가 소프트웨어적으로 탈취당할 확률을 기하급수적으로 낮춰준다. 또한 Side-Channel Attack에 대한 방어까지 탐재하는 것이 좋을 것이다.\n…\n",
"wordCount" : "283",
"inLanguage": "en",
"datePublished": "2021-08-06T10:32:57Z",
"dateModified": "2021-08-06T10:32:57Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2021/08/security-of-iot/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
Security of IoT
</h1>
<div class="post-meta"><span title='2021-08-06 10:32:57 &#43;0000 UTC'>
Aug 6, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><h2 id="security-of-iot">Security of IoT<a hidden class="anchor" aria-hidden="true" href="#security-of-iot">#</a></h2>
<h3 id="iot란"><strong>IoT란?</strong><a hidden class="anchor" aria-hidden="true" href="#iot란">#</a></h3>
<p>IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.</p>
<p>IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.</p>
<p>IoT 서비스 제공자들은 사용자들의 데이터를 분석하는 더욱 발전한 알고리즘을 개발하면서 사용자들의 데이터를 수집한다. 이것들은 모여 방대한 빅 데이터가 된다. 물론 고객의 개인정보 무단수집과 남용의 논란도 계속 이어져 왔지만, 서비스를 이용하기 위해서 어쩔 수 없이 개인정보와 사생활을 팔아야 하는 것은 안타까운 일이다.</p>
<h3 id="iot-보안"><strong>IoT 보안</strong><a hidden class="anchor" aria-hidden="true" href="#iot-보안">#</a></h3>
<p>IoT에서는 보안이 매우 중요하다. 개인의 사생활을 담당하고 있기도 하지만, 생활 환경을 조절할 수 있어 자칫하면 목숨까지 위협할 수 있기 떄문이다. IoT기기는 소형화되어 있으며 저성능으로 구성되고 하드웨어에 자체에 접근이 쉬워 해킹에 매우 취약하다. 자동화된 생산에서 만약 반도체 설계부터 문제가 있거나 펌웨어에 백도어나 트로이 목마가 존재한다면 매우 심각하고 영구적인 보안 결함이 될 것이다. 따라서, 반도체 설계, 생산 과정에서 모듈 점검을 정확하게 진행하여야 하며, 점대점(Point-to-Point) 보안을 확립하는 것이 중요하다. 또한, 저성능 프로세서에 대비하기 위해 주변에 보안칩(암호 Co-Processor)를 장치하는 것이 좋다. 소프트웨어 적인 보안은 업데이트하기 용이하고 대처하기 쉽다는 장점이 있지만, 하드웨어 보안을 확립한다면 물리적 보안, 암호 알고리즘, 보안 부팅, 키 암호화, 모듈 서명 등 다양한 보안 기능과 해킹 방지를 탑재할 수 있어 이를 확립하는 것이 무엇보다 중요하다.</p>
<p>반도체 물리적 복제 방지 (PUF)나 보안 칩(TPF)등의 탑재가 가장 중요할 것이며, 이는 키가 소프트웨어적으로 탈취당할 확률을 기하급수적으로 낮춰준다. 또한 Side-Channel Attack에 대한 방어까지 탐재하는 것이 좋을 것이다.</p>
<p>&hellip;</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
<li><a href="http://blog.morgan.kr/tags/security/">security</a></li>
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,291 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>양자 컴퓨터와 양자 어닐링 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="양자 컴퓨터와 양자 어닐링" />
<meta property="og:description" content="양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-08-06T10:36:03+00:00" />
<meta property="article:modified_time" content="2021-08-06T10:36:03+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="양자 컴퓨터와 양자 어닐링"/>
<meta name="twitter:description" content="양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "양자 컴퓨터와 양자 어닐링",
"item": "http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "양자 컴퓨터와 양자 어닐링",
"name": "양자 컴퓨터와 양자 어닐링",
"description": "양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의\n양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.\n현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다.",
"keywords": [
],
"articleBody": "양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의\n양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.\n현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다. 이 사람은 19세기 초, 차분 기관이라는 기계식 계산기를 제작한다. 그 후, 그는 더 복잡한 기관인 분석 기관(해석 기관)을 제작한다. 찰스 배비지는 차분기관을 설계하였지만, 실제 완성하지는 못하였다. 하지만 후에 실제 만들어 보면서 작동하는 것을 확인하였다. 그는 천문 테이블을 만들기 위해 이 기계를 제작하였는데, 차분 기계는 다항함수를 계산할 수 있는 기관이었다. 그는 이 기관을 설계하고 난 뒤, 해석기관을 설계하였는데, 이는 천공카드를 이용해서 범용적인 계산을 할 수 있도록 하였다. 이 기계장치도 예산이랑 시간이 부족해서 완성하지 못하였다. 하지만 한 부인이 이 컴퓨터로 실제 프로그래밍을 하며, 최초의 프로그래머로 불리우고 있다.\n범용 컴퓨터의 현대적인 개념은 그 유명한 앨런 튜링이 정립했다. 그는 튜링 머신이라는 수학적 모델을 만들었는데, 모든 컴퓨터들은 이러한 튜링 머신을 기본 기능으로 설명할 수 있다. 그 전에 발명되었던, 현대의 트랜지스터와 같은 원리로 움직이는 진공관을 통해 튜링 머신이라는 논리적 모델을 실제 구현하게 된다. 그 후 에니그마를 깨기 위해 실제 계산 가능한 장치를 만들면서 최초의 전자식 계산기라고 알려져 있다.\n그 후 ENIAC이 만들어 지고, 폰 노이만이 노이만 구조라는 현대까지 아직도 적용되고 있는 방식을 제안한다. 이 폰 노이만 구조란 것은, 프로그램과 데이터를 기억장치에 저장하고, 명령어를 하나씩 수행하며 데이터를 수정해 나가는 방식을 의미한다.\n그 후 우리가 나는 집적회로와 트랜지스터가 사용되어 더욱 작은 컴퓨터가 만들어 지게 되었고, 이들이 발전해 나가면서 최초의 개인용 컴퓨터가 IBM에서 나오게 된다.\nØ 그래서, 양자 컴퓨터란 무엇인가? 흔히 알려진 양자 컴퓨터의 특징을 나열하자면, 0과 1 이분적이지 않게 두가지 정보를 동시에 가질 수 있고, 또 일반적인 컴퓨터보다 훨씬 빠르게 작동하고, 현대의 보안이 모두 뚫릴 것이며, 완전한 인공지능이 가능할 것이라 한다. 이중에서 물론 실제로 가능할 것도 있지만, 이런 것들이 가능하기에는 너무 오래 걸린다.\n",
"wordCount" : "321",
"inLanguage": "en",
"datePublished": "2021-08-06T10:36:03Z",
"dateModified": "2021-08-06T10:36:03Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
양자 컴퓨터와 양자 어닐링
</h1>
<div class="post-meta"><span title='2021-08-06 10:36:03 &#43;0000 UTC'>
Aug 6, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><h2 id="양자-컴퓨터와-양자-어닐링">양자 컴퓨터와 양자 어닐링<a hidden class="anchor" aria-hidden="true" href="#양자-컴퓨터와-양자-어닐링">#</a></h2>
<p>양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의</p>
<h3 id="양자-컴퓨터란-무엇일까"><strong>양자 컴퓨터란 무엇일까?</strong><a hidden class="anchor" aria-hidden="true" href="#양자-컴퓨터란-무엇일까">#</a></h3>
<h4 id="ø--현대-컴퓨터의-발전-과정">Ø 현대 컴퓨터의 발전 과정<a hidden class="anchor" aria-hidden="true" href="#ø--현대-컴퓨터의-발전-과정">#</a></h4>
<p>20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.</p>
<p>현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다. 이 사람은 19세기 초, 차분 기관이라는 기계식 계산기를 제작한다. 그 후, 그는 더 복잡한 기관인 분석 기관(해석 기관)을 제작한다. 찰스 배비지는 차분기관을 설계하였지만, 실제 완성하지는 못하였다. 하지만 후에 실제 만들어 보면서 작동하는 것을 확인하였다. 그는 천문 테이블을 만들기 위해 이 기계를 제작하였는데, 차분 기계는 다항함수를 계산할 수 있는 기관이었다. 그는 이 기관을 설계하고 난 뒤, 해석기관을 설계하였는데, 이는 천공카드를 이용해서 범용적인 계산을 할 수 있도록 하였다. 이 기계장치도 예산이랑 시간이 부족해서 완성하지 못하였다. 하지만 한 부인이 이 컴퓨터로 실제 프로그래밍을 하며, 최초의 프로그래머로 불리우고 있다.</p>
<p>범용 컴퓨터의 현대적인 개념은 그 유명한 앨런 튜링이 정립했다. 그는 튜링 머신이라는 수학적 모델을 만들었는데, 모든 컴퓨터들은 이러한 튜링 머신을 기본 기능으로 설명할 수 있다. 그 전에 발명되었던, 현대의 트랜지스터와 같은 원리로 움직이는 진공관을 통해 튜링 머신이라는 논리적 모델을 실제 구현하게 된다. 그 후 에니그마를 깨기 위해 실제 계산 가능한 장치를 만들면서 최초의 전자식 계산기라고 알려져 있다.</p>
<p>그 후 ENIAC이 만들어 지고, 폰 노이만이 노이만 구조라는 현대까지 아직도 적용되고 있는 방식을 제안한다. 이 폰 노이만 구조란 것은, 프로그램과 데이터를 기억장치에 저장하고, 명령어를 하나씩 수행하며 데이터를 수정해 나가는 방식을 의미한다.</p>
<p>그 후 우리가 나는 집적회로와 트랜지스터가 사용되어 더욱 작은 컴퓨터가 만들어 지게 되었고, 이들이 발전해 나가면서 최초의 개인용 컴퓨터가 IBM에서 나오게 된다.</p>
<h4 id="ø--그래서-양자-컴퓨터란-무엇인가">Ø 그래서, 양자 컴퓨터란 무엇인가?<a hidden class="anchor" aria-hidden="true" href="#ø--그래서-양자-컴퓨터란-무엇인가">#</a></h4>
<p>흔히 알려진 양자 컴퓨터의 특징을 나열하자면, 0과 1 이분적이지 않게 두가지 정보를 동시에 가질 수 있고, 또 일반적인 컴퓨터보다 훨씬 빠르게 작동하고, 현대의 보안이 모두 뚫릴 것이며, 완전한 인공지능이 가능할 것이라 한다. 이중에서 물론 실제로 가능할 것도 있지만, 이런 것들이 가능하기에는 너무 오래 걸린다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,285 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Ad-Tech와 통계의 쓰임새 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="CTR(클릭률) Click-through rate) 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $ 나타난다. ($\sigma$ 표준편차, $\mu$ 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Ad-Tech와 통계의 쓰임새" />
<meta property="og:description" content="CTR(클릭률) Click-through rate) 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $ 나타난다. ($\sigma$ 표준편차, $\mu$ 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-10-30T07:10:34+00:00" />
<meta property="article:modified_time" content="2021-10-30T07:10:34+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Ad-Tech와 통계의 쓰임새"/>
<meta name="twitter:description" content="CTR(클릭률) Click-through rate) 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $ 나타난다. ($\sigma$ 표준편차, $\mu$ 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "Ad-Tech와 통계의 쓰임새",
"item": "http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Ad-Tech와 통계의 쓰임새",
"name": "Ad-Tech와 통계의 쓰임새",
"description": "CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \\frac{z - \\mu}{\\sigma} $로 나타난다. ($\\sigma$ 표준편차, $\\mu$는 모집단의 평균이다.\n중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.\n점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다.",
"keywords": [
],
"articleBody": "CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \\frac{z - \\mu}{\\sigma} $로 나타난다. ($\\sigma$ 표준편차, $\\mu$는 모집단의 평균이다.\n중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.\n점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다. 평소에 신뢰구간 95%와 같이 구간추정하는 것과는 달리 적률방법을 이용하여 하나의 수치로 나타낸다. 표본분산의 기댓값이 모분산이 되고, 표본평균이 모평균이 된다. 더욱 정확한 수치를 계산하기 위해서 적률법을 이용한다. 모집단의 평균이 표본평균과 일치하는 모수를 찾는 방법으로 진행한다. 적률 생성함수는 $M_x(t) = E(e^tX)$로 표현되어 확률분포의 적률은 $ E(X^n) = M_x^(n) (0)$으로 표현할 수 있다. 적률생성함수를 몇번 미분하냐에 따라 n차 적률이라고 한다.\n이제 Ad-Tech에서 사용하는 각종 광고 비용계산과 그 지수 산출을 알아본다.\nCTR은 노출수 대 클릭수 비율로 구할 수 있다. 일반적으로 계산한 CTR수치는 CTR의 표본 평균이라고 할 수 있다. CTR수치는 매일마다 다르고, 또 언제 어떻게 바뀔지 모르는 랜덤 모집단이기 때문이다. 따라서, 오랜 기간동안 CTR수치를 측정하여 예측을 하는 방법으로 신뢰구간을 얻을 수 있다. 하지만, 오랜기간동안 광고수치를 계산하여 그 비용을 지불하기에는 오랜 기간이 걸리며 유행이 빠른 광고의 특성상 정확하지 않을 가능성이 있다. 따라서, 광고에서 CTR을 계산하여 캠페인의 대표 수치를 구하기 위해 표본에서 모집단의 수치를 계산할 수 있도록 중심극한 정리를 가정 하에 점추정을 통해 캠페인의 대표 CTR수치를 나타낸다.\n",
"wordCount" : "225",
"inLanguage": "en",
"datePublished": "2021-10-30T07:10:34Z",
"dateModified": "2021-10-30T07:10:34Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
Ad-Tech와 통계의 쓰임새
</h1>
<div class="post-meta"><span title='2021-10-30 07:10:34 &#43;0000 UTC'>
Oct 30, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $로 나타난다. ($\sigma$ 표준편차, $\mu$는 모집단의 평균이다.</p>
<p>중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.</p>
<p>점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다. 평소에 신뢰구간 95%와 같이 구간추정하는 것과는 달리 적률방법을 이용하여 하나의 수치로 나타낸다. 표본분산의 기댓값이 모분산이 되고, 표본평균이 모평균이 된다. 더욱 정확한 수치를 계산하기 위해서 적률법을 이용한다. 모집단의 평균이 표본평균과 일치하는 모수를 찾는 방법으로 진행한다. 적률 생성함수는 $M_x(t) = E(e^tX)$로 표현되어 확률분포의 적률은 $ E(X^n) = M_x^(n) (0)$으로 표현할 수 있다. 적률생성함수를 몇번 미분하냐에 따라 n차 적률이라고 한다.</p>
<p>이제 Ad-Tech에서 사용하는 각종 광고 비용계산과 그 지수 산출을 알아본다.</p>
<p>CTR은 노출수 대 클릭수 비율로 구할 수 있다. 일반적으로 계산한 CTR수치는 CTR의 표본 평균이라고 할 수 있다. CTR수치는 매일마다 다르고, 또 언제 어떻게 바뀔지 모르는 랜덤 모집단이기 때문이다. 따라서, 오랜 기간동안 CTR수치를 측정하여 예측을 하는 방법으로 신뢰구간을 얻을 수 있다. 하지만, 오랜기간동안 광고수치를 계산하여 그 비용을 지불하기에는 오랜 기간이 걸리며 유행이 빠른 광고의 특성상 정확하지 않을 가능성이 있다. 따라서, 광고에서 CTR을 계산하여 캠페인의 대표 수치를 구하기 위해 표본에서 모집단의 수치를 계산할 수 있도록 중심극한 정리를 가정 하에 점추정을 통해 캠페인의 대표 CTR수치를 나타낸다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,280 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>구글 페이지랭크 알고리즘 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="구글 페이지랭크 알고리즘" />
<meta property="og:description" content="구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2021-10-30T07:07:55+00:00" />
<meta property="article:modified_time" content="2021-10-30T07:07:55+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="구글 페이지랭크 알고리즘"/>
<meta name="twitter:description" content="구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "구글 페이지랭크 알고리즘",
"item": "http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "구글 페이지랭크 알고리즘",
"name": "구글 페이지랭크 알고리즘",
"description": "구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다.",
"keywords": [
],
"articleBody": "구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다. PageRank에서는 각각의 웹페이지를 노드로 보고, 상호 참조와 인용으로 각각의 노드를 연결하여 하나의 거대한그래프를 만든다. 각각의 페이지는 랭크값이라는 고유한 수치를 가지고 있고, 그 페이지에서 인용된 각각의 페이지는 인용한 페이지의 랭크값을 동등하게 나눠가진다. 많이 인용된 페이지는 랭크값이 높을 것이고 적게 인용된 페이지는 랭크값이 낮을 것이므로 이 랭크값으로 페이지들의 중요도를 줄세울 수 있다. 하지만 다중연결 그래프에서 각각의 노드가 각각의 노드의 값을 참조하기 때문에 순환참조 구조가 되어 무한적으로 계산하게 되는 문제가 있고, 결과적으로 노드의 값을 계산할 수 없다는 문제가 있다. 페이지랭크 알고리즘에서는 이 각각의 페이지의 랭크값이 계산을 계속하다 보면 각각 하나의 값으로 수렴한다는 것을 증명하여 문제를 해결하였다. 아니, 애초에 문제가 되지 않았던 것이다. 이 과정에서 그래프의 각 노드 랭크값을 표현한 행렬에 변환연산을 함으로써 계산의 단계를 나아가는데, 이때 이용되는 마르코프 행렬을 구글행렬이라고 한다. 페이지랭크 알고리즘은 이러한 각각의 랭크값을 계산하는 정규화공식과 계산과정의 규칙성, 그리고 수렴한다는 증명으로 완성된다. 물론 산출 과정중에 초기 산출 방법과 루프의 해결 그리고 보정을 위한 서퍼가 존재한다.\n(Step1) 초기화각 노드들의 중요도 초기값은 1N1N으로 설정.(이때 NN은 전체 웹페이지의 개수)\n(Step2) 업데이트노드 K의 t번째 시도에서 중요도를 $PR(K;t)$ 라고 할때, $ PR(K;t+1)$ 은 $ PR(K;t+1) = \\frac{1d}{N} + d \\Sigma{P∈K} \\frac{PR(P;t)}{|Γ_P|} $ 이다. 여기서 $d(0≤d≤1)$는 제동(damping)계수이고, $Γ_K$는 K에서 인용한 노드들의 집합이다. 그리고 $|ΓP|$는 P를 인용한 노드의 개수이다.\n구글행렬은 행렬분리를 하기 좋은 구조로 이루어져 있으며 이 덕분에 반복연산을 행하기에 매우 좋은 구조로 되어있다. 그래프를 인접행렬로 표현한 후, 각각의 페이지값을 확률행렬로 나타낸다. 인접행렬을 n승하면 n번 순회하여 도달하는 페이지를 의미한다. 하지만 인접행렬로 계산하면 수렴성을 보장할 수 없기 때문에 수렴성의 확보를 위해 확률행렬로 변환한 후, 각 열의 합이 1이 되고 나서 n승 계산을 수행한다. 따라서 행렬 S는 다음과 같이 정의한다. $S = H + \\frac{1e^T}{N}$ N은 총 노드의 갯수, 벡터 1인 전체 1인 열벡터이고, e는 특정 열의 합이 0이면 원소값이 1인 열벡터이다.\n이제 이 확률행렬을 수렴하게 계산하기 위해 구글행렬 G를 계산한다.\n$G = dS + (1-d)E$이고, 이때 d는 Damping 계수이다. 이렇게 계산한 구글행렬을 페이지랭크 알고리즘에 대입하면 가장 큰 고윳값이 1인 행렬이 되어 Frobenius 정리에 의해 초기값에 관계없이 일정한 값으로 수렴한다.\n",
"wordCount" : "395",
"inLanguage": "en",
"datePublished": "2021-10-30T07:07:55Z",
"dateModified": "2021-10-30T07:07:55Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
구글 페이지랭크 알고리즘
</h1>
<div class="post-meta"><span title='2021-10-30 07:07:55 &#43;0000 UTC'>
Oct 30, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다. PageRank에서는 각각의 웹페이지를 노드로 보고, 상호 참조와 인용으로 각각의 노드를 연결하여 하나의 거대한그래프를 만든다. 각각의 페이지는 랭크값이라는 고유한 수치를 가지고 있고, 그 페이지에서 인용된 각각의 페이지는 인용한 페이지의 랭크값을 동등하게 나눠가진다. 많이 인용된 페이지는 랭크값이 높을 것이고 적게 인용된 페이지는 랭크값이 낮을 것이므로 이 랭크값으로 페이지들의 중요도를 줄세울 수 있다. 하지만 다중연결 그래프에서 각각의 노드가 각각의 노드의 값을 참조하기 때문에 순환참조 구조가 되어 무한적으로 계산하게 되는 문제가 있고, 결과적으로 노드의 값을 계산할 수 없다는 문제가 있다. 페이지랭크 알고리즘에서는 이 각각의 페이지의 랭크값이 계산을 계속하다 보면 각각 하나의 값으로 수렴한다는 것을 증명하여 문제를 해결하였다. 아니, 애초에 문제가 되지 않았던 것이다. 이 과정에서 그래프의 각 노드 랭크값을 표현한 행렬에 변환연산을 함으로써 계산의 단계를 나아가는데, 이때 이용되는 마르코프 행렬을 구글행렬이라고 한다. 페이지랭크 알고리즘은 이러한 각각의 랭크값을 계산하는 정규화공식과 계산과정의 규칙성, 그리고 수렴한다는 증명으로 완성된다. 물론 산출 과정중에 초기 산출 방법과 루프의 해결 그리고 보정을 위한 서퍼가 존재한다.</p>
<p><strong>(Step1) 초기화</strong>각 노드들의 중요도 초기값은 1N1N으로 설정.(이때 NN은 전체 웹페이지의 개수)</p>
<p><strong>(Step2) 업데이트</strong>노드 K의 t번째 시도에서 중요도를 $PR(K;t)$ 라고 할때, $ PR(K;t+1)$ 은 $ PR(K;t+1) = \frac{1d}{N} + d \Sigma{P∈K} \frac{PR(P;t)}{|Γ_P|} $ 이다. 여기서 $d(0≤d≤1)$는 제동(damping)계수이고, $Γ_K$는 K에서 인용한 노드들의 집합이다. 그리고 $|ΓP|$는 P를 인용한 노드의 개수이다.</p>
<p>구글행렬은 행렬분리를 하기 좋은 구조로 이루어져 있으며 이 덕분에 반복연산을 행하기에 매우 좋은 구조로 되어있다. 그래프를 인접행렬로 표현한 후, 각각의 페이지값을 확률행렬로 나타낸다. 인접행렬을 n승하면 n번 순회하여 도달하는 페이지를 의미한다. 하지만 인접행렬로 계산하면 수렴성을 보장할 수 없기 때문에 수렴성의 확보를 위해 확률행렬로 변환한 후, 각 열의 합이 1이 되고 나서 n승 계산을 수행한다. 따라서 행렬 S는 다음과 같이 정의한다. $S = H + \frac{1e^T}{N}$ N은 총 노드의 갯수, 벡터 1인 전체 1인 열벡터이고, e는 특정 열의 합이 0이면 원소값이 1인 열벡터이다.</p>
<p>이제 이 확률행렬을 수렴하게 계산하기 위해 구글행렬 G를 계산한다.</p>
<p>$G = dS + (1-d)E$이고, 이때 d는 Damping 계수이다. 이렇게 계산한 구글행렬을 페이지랭크 알고리즘에 대입하면 가장 큰 고윳값이 1인 행렬이 되어 Frobenius 정리에 의해 초기값에 관계없이 일정한 값으로 수렴한다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,301 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>VAE의 손실 함수 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 함수는 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. , reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 도움이 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="VAE의 손실 함수" />
<meta property="og:description" content="VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 함수는 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. , reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 도움이 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2022-12-15T11:21:46+00:00" />
<meta property="article:modified_time" content="2022-12-15T11:21:46+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="VAE의 손실 함수"/>
<meta name="twitter:description" content="VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 함수는 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. , reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 도움이 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "VAE의 손실 함수",
"item": "http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "VAE의 손실 함수",
"name": "VAE의 손실 함수",
"description": "VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.\n먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.\n$$L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$$\n여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다.",
"keywords": [
],
"articleBody": "VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.\n먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.\n$$L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$$\n여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다. $q(z|x)$는 인코더의 출력을 잠재 변수의 확률 분포로 추정한 것을 의미하며, $D_{KL}$은 클로저-라이브러리 발산을 의미합니다.\n이를 분리하여 계산하면 아래와 같이 나뉩니다.\n$$L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$$\n$$= \\mathbb{E}{q(z|x)}[\\log p(x|z)] - \\mathbb{E}{q(z|x)}[\\log \\frac{q(z|x)}{p(z)}]$$\n이때, reparametrization trick을 이용하면 손실 함수의 그래디언트를 쉽게 계산할 수 있습니다. 이 기법은 잠재 변수의 확률 분포를 정의할 때, 정규 분포의 모수를 함수로 표현하는 것을 의미합니다. 이렇게 하면 잠재 변수의 확률 분포를 명시적으로 정의할 수 있어 그래디언트를 계산하기 쉬워집니다.\n예를 들어, $q(z|x)$를 아래와 같이 정의할 수 있습니다.\n$$q(z|x) = \\mathcal{N}(\\mu(x), \\sigma^2(x))$$\n여기서 $\\mu(x)$와 $\\sigma^2(x)$는 인코더의 출력을 이용해 계산된 정규 분포의 모수입니다. 이렇게 정의된 $q(z|x)$를 이용하면 손실 함수의 그래디언트를 아래와 같이 계산할 수 있습니다.\n$$\\frac{\\partial L}{\\partial \\theta} = \\frac{\\partial}{\\partial \\theta}\\mathbb{E}{q(z|x)}[\\log p(x|z)] - \\frac{\\partial}{\\partial \\theta}\\mathbb{E}{q(z|x)}[\\log \\frac{q(z|x)}{p(z)}]$$\n$$= \\mathbb{E}{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log p(x|z)\\right] - \\mathbb{E}{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log \\frac{q(z|x)}{p(z)}\\right]$$\n이때, 위 식의 첫 번째 항을 전개하면 다음과 같습니다.\n$$\\mathbb{E}_{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log p(x|z)\\right] = \\int q(z|x)\\frac{\\partial}{\\partial \\theta}\\log p(x|z) dz$$\n여기서 $\\theta$는 VAE에서 사용되는 모든 매개변수를 의미합니다. 따라서 이 식을 이용하면 VAE의 손실 함수의 그래디언트를 계산할 수 있습니다.\n예를 들어, 손실 함수가 $L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$인 경우에는 첫 번째 항의 그래디언트는 다음과 같이 계산할 수 있습니다.\n$$\\frac{\\partial}{\\partial \\theta}\\mathbb{E}{q(z|x)}[\\log p(x|z)] = \\mathbb{E}{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log p(x|z)\\right]$$\n",
"wordCount" : "258",
"inLanguage": "en",
"datePublished": "2022-12-15T11:21:46.836Z",
"dateModified": "2022-12-15T11:21:46.836Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
VAE의 손실 함수
</h1>
<div class="post-meta"><span title='2022-12-15 11:21:46.836 &#43;0000 UTC'>
Dec 15, 2022
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.</p>
<p>먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.</p>
<p>$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$</p>
<p>여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다. $q(z|x)$는 인코더의 출력을 잠재 변수의 확률 분포로 추정한 것을 의미하며, $D_{KL}$은 클로저-라이브러리 발산을 의미합니다.</p>
<p>이를 분리하여 계산하면 아래와 같이 나뉩니다.</p>
<p>$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$</p>
<p>$$= \mathbb{E}{q(z|x)}[\log p(x|z)] - \mathbb{E}{q(z|x)}[\log \frac{q(z|x)}{p(z)}]$$</p>
<p>이때, reparametrization trick을 이용하면 손실 함수의 그래디언트를 쉽게 계산할 수 있습니다. 이 기법은 잠재 변수의 확률 분포를 정의할 때, 정규 분포의 모수를 함수로 표현하는 것을 의미합니다. 이렇게 하면 잠재 변수의 확률 분포를 명시적으로 정의할 수 있어 그래디언트를 계산하기 쉬워집니다.</p>
<p>예를 들어, $q(z|x)$를 아래와 같이 정의할 수 있습니다.</p>
<p>$$q(z|x) = \mathcal{N}(\mu(x), \sigma^2(x))$$</p>
<p>여기서 $\mu(x)$와 $\sigma^2(x)$는 인코더의 출력을 이용해 계산된 정규 분포의 모수입니다. 이렇게 정의된 $q(z|x)$를 이용하면 손실 함수의 그래디언트를 아래와 같이 계산할 수 있습니다.</p>
<p>$$\frac{\partial L}{\partial \theta} = \frac{\partial}{\partial \theta}\mathbb{E}{q(z|x)}[\log p(x|z)] - \frac{\partial}{\partial \theta}\mathbb{E}{q(z|x)}[\log \frac{q(z|x)}{p(z)}]$$</p>
<p>$$= \mathbb{E}{q(z|x)}\left[\frac{\partial}{\partial \theta}\log p(x|z)\right] - \mathbb{E}{q(z|x)}\left[\frac{\partial}{\partial \theta}\log \frac{q(z|x)}{p(z)}\right]$$</p>
<p>이때, 위 식의 첫 번째 항을 전개하면 다음과 같습니다.</p>
<p>$$\mathbb{E}_{q(z|x)}\left[\frac{\partial}{\partial \theta}\log p(x|z)\right] = \int q(z|x)\frac{\partial}{\partial \theta}\log p(x|z) dz$$</p>
<p>여기서 $\theta$는 VAE에서 사용되는 모든 매개변수를 의미합니다. 따라서 이 식을 이용하면 VAE의 손실 함수의 그래디언트를 계산할 수 있습니다.</p>
<p>예를 들어, 손실 함수가 $L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$인 경우에는 첫 번째 항의 그래디언트는 다음과 같이 계산할 수 있습니다.</p>
<p>$$\frac{\partial}{\partial \theta}\mathbb{E}{q(z|x)}[\log p(x|z)] = \mathbb{E}{q(z|x)}\left[\frac{\partial}{\partial \theta}\log p(x|z)\right]$$</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,290 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Kernel, Bootloader | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Linux Kernel #2">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2023/11/kernel-bootloader/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Kernel, Bootloader" />
<meta property="og:description" content="Linux Kernel #2" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2023/11/kernel-bootloader/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2023-11-22T05:35:09+00:00" />
<meta property="article:modified_time" content="2023-11-22T05:35:09+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Kernel, Bootloader"/>
<meta name="twitter:description" content="Linux Kernel #2"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "Kernel, Bootloader",
"item": "http://blog.morgan.kr/2023/11/kernel-bootloader/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Kernel, Bootloader",
"name": "Kernel, Bootloader",
"description": "Linux Kernel #2",
"keywords": [
],
"articleBody": "부트로더가 하는 일은\nCPU 초기화 IVT 초기화 하드웨어 초기화 및 커널 찾기 (외부 메모리 인터페이스 초기화 및 파일시스템 인식 과정) 커널을 메모리에 올리고 커널 Entry로 점프 인데, 여기서 부트로더가 커널을 메모리에 올릴때 어디에 어떻게 올리냐가 헷갈렸다.\n컴파일 된 커널을 보면 relative 주소로 되어 있는데, 부트로더가 커널의 .data랑 .bss를 다른 프로세스처럼 적절한 곳에 따로 두는 걸로 착각했다. 당연히 부트로더 단계에서는 메모리 매핑이나 페이징이 아직 없고, 커널은 메모리에 매핑이 된게 아니라 고정된 주소에 있어야 한다.\n커널은 PIC(Position Independant Code)인데, `.text`, `.data`, `.bss`가 정해진 offset 차이로 고정되어 메모리에 올라가기 때문에 동적 주소 매핑 없이 base address에 relative 하게 모든 section의 위치를 알 수 있다.\n생각해보면 간단하고 당연한 거였다.\n그리고 외부적 인터럽트나 시스템 콜 없이 프로세스가 context를 계속 잡고 있으면 다시 커널로 돌아올 방법이 없다. timed inturrupt나 watchdog이 필요하다.\n* 부트로더 단계에서 MMU 초기화 하고 페이징 하는 복잡한 시스템이 아니라 임베디드 ARM 환경에서의 이야기다. UEFI나 모던 시스템에서는 다를거다.\n",
"wordCount" : "144",
"inLanguage": "en",
"datePublished": "2023-11-22T05:35:09.645Z",
"dateModified": "2023-11-22T05:35:09.645Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2023/11/kernel-bootloader/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
Kernel, Bootloader
</h1>
<div class="post-description">
Linux Kernel #2
</div>
<div class="post-meta"><span title='2023-11-22 05:35:09.645 &#43;0000 UTC'>
Nov 22, 2023
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>부트로더가 하는 일은</p>
<ol>
<li>CPU 초기화</li>
<li>IVT 초기화</li>
<li>하드웨어 초기화 및 커널 찾기 (외부 메모리 인터페이스 초기화 및 파일시스템 인식 과정)</li>
<li>커널을 메모리에 올리고 커널 Entry로 점프</li>
</ol>
<p>인데, 여기서 부트로더가 커널을 메모리에 올릴때 어디에 어떻게 올리냐가 헷갈렸다.</p>
<p>컴파일 된 커널을 보면 relative 주소로 되어 있는데, 부트로더가 커널의 .data랑 .bss를 다른 프로세스처럼 적절한 곳에 따로 두는 걸로 착각했다. 당연히 부트로더 단계에서는 메모리 매핑이나 페이징이 아직 없고, 커널은 메모리에 매핑이 된게 아니라 고정된 주소에 있어야 한다.</p>
<p>커널은 PIC(Position Independant Code)인데, `.text`, `.data`, `.bss`가 정해진 offset 차이로 고정되어 메모리에 올라가기 때문에 동적 주소 매핑 없이 base address에 relative 하게 모든 section의 위치를 알 수 있다.</p>
<p>생각해보면 간단하고 당연한 거였다.</p>
<p>그리고 외부적 인터럽트나 시스템 콜 없이 프로세스가 context를 계속 잡고 있으면 다시 커널로 돌아올 방법이 없다. timed inturrupt나 watchdog이 필요하다.</p>
<p>* 부트로더 단계에서 MMU 초기화 하고 페이징 하는 복잡한 시스템이 아니라 임베디드 ARM 환경에서의 이야기다. UEFI나 모던 시스템에서는 다를거다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,314 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Kernel, Process creation | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Linux Kernel #3">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2023/11/kernel-process-creation/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Kernel, Process creation" />
<meta property="og:description" content="Linux Kernel #3" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2023/11/kernel-process-creation/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2023-11-26T07:44:51+00:00" />
<meta property="article:modified_time" content="2023-11-26T07:44:51+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Kernel, Process creation"/>
<meta name="twitter:description" content="Linux Kernel #3"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "Kernel, Process creation",
"item": "http://blog.morgan.kr/2023/11/kernel-process-creation/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Kernel, Process creation",
"name": "Kernel, Process creation",
"description": "Linux Kernel #3",
"keywords": [
],
"articleBody": "static int init(void * unused) { lock_kernel(); do_basic_setup(); /* * Ok, we have completed the initial bootup, and * we're essentially up and running. Get rid of the * initmem segments and start the user-mode stuff.. */ free_initmem(); unlock_kernel(); if (open(\"/dev/console\", O_RDWR, 0) \u003c 0) printk(\"Warning: unable to open an initial console.\\n\"); (void) dup(0); (void) dup(0); /* * We try each of these until one succeeds. * * The Bourne shell can be used instead of init if we are * trying to recover a really broken machine. */ if (execute_command) execve(execute_command,argv_init,envp_init); execve(\"/sbin/init\",argv_init,envp_init); execve(\"/etc/init\",argv_init,envp_init); execve(\"/bin/init\",argv_init,envp_init); execve(\"/bin/sh\",argv_init,envp_init); panic(\"No init found. Try passing init= option to kernel.\"); } In this init/main.c, after basic kernel initialization things, open(\"/dev/console\") and two dup(0) opens three file descriptor 0, 1, 2 as stdin, stdout, stderr. Later when execve() or fork() happens, it simply copies calling processs task_struct as process context, so all file descriptors are also passed down as-is.\nAll processes file descriptor 0, 1, 2 originates to inits file descriptor.\nIf calling process opens PTY or TTY, which is common when we opens new terminal to run a process, it is also passed down to exec/forked process.\n",
"wordCount" : "192",
"inLanguage": "en",
"datePublished": "2023-11-26T07:44:51.449Z",
"dateModified": "2023-11-26T07:44:51.449Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2023/11/kernel-process-creation/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
Kernel, Process creation
</h1>
<div class="post-description">
Linux Kernel #3
</div>
<div class="post-meta"><span title='2023-11-26 07:44:51.449 &#43;0000 UTC'>
Nov 26, 2023
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="k">static</span> <span class="kt">int</span> <span class="nf">init</span><span class="p">(</span><span class="kt">void</span> <span class="o">*</span> <span class="n">unused</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nf">lock_kernel</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"> <span class="nf">do_basic_setup</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm"> * Ok, we have completed the initial bootup, and
</span></span></span><span class="line"><span class="cl"><span class="cm"> * we&#39;re essentially up and running. Get rid of the
</span></span></span><span class="line"><span class="cl"><span class="cm"> * initmem segments and start the user-mode stuff..
</span></span></span><span class="line"><span class="cl"><span class="cm"> */</span>
</span></span><span class="line"><span class="cl"> <span class="nf">free_initmem</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"> <span class="nf">unlock_kernel</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="nf">open</span><span class="p">(</span><span class="s">&#34;/dev/console&#34;</span><span class="p">,</span> <span class="n">O_RDWR</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="nf">printk</span><span class="p">(</span><span class="s">&#34;Warning: unable to open an initial console.</span><span class="se">\n</span><span class="s">&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">dup</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="nf">dup</span><span class="p">(</span><span class="mi">0</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm"> * We try each of these until one succeeds.
</span></span></span><span class="line"><span class="cl"><span class="cm"> *
</span></span></span><span class="line"><span class="cl"><span class="cm"> * The Bourne shell can be used instead of init if we are
</span></span></span><span class="line"><span class="cl"><span class="cm"> * trying to recover a really broken machine.
</span></span></span><span class="line"><span class="cl"><span class="cm"> */</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="p">(</span><span class="n">execute_command</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="nf">execve</span><span class="p">(</span><span class="n">execute_command</span><span class="p">,</span><span class="n">argv_init</span><span class="p">,</span><span class="n">envp_init</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="nf">execve</span><span class="p">(</span><span class="s">&#34;/sbin/init&#34;</span><span class="p">,</span><span class="n">argv_init</span><span class="p">,</span><span class="n">envp_init</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="nf">execve</span><span class="p">(</span><span class="s">&#34;/etc/init&#34;</span><span class="p">,</span><span class="n">argv_init</span><span class="p">,</span><span class="n">envp_init</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="nf">execve</span><span class="p">(</span><span class="s">&#34;/bin/init&#34;</span><span class="p">,</span><span class="n">argv_init</span><span class="p">,</span><span class="n">envp_init</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="nf">execve</span><span class="p">(</span><span class="s">&#34;/bin/sh&#34;</span><span class="p">,</span><span class="n">argv_init</span><span class="p">,</span><span class="n">envp_init</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"> <span class="nf">panic</span><span class="p">(</span><span class="s">&#34;No init found. Try passing init= option to kernel.&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>In this <code>init/main.c</code>, after basic kernel initialization things, <code>open(&quot;/dev/console&quot;)</code> and two <code>dup(0)</code> opens three file descriptor 0, 1, 2 as stdin, stdout, stderr. Later when <code>execve()</code> or <code>fork()</code> happens, it simply copies calling process&rsquo;s <code>task_struct</code> as process context, so all file descriptors are also passed down as-is.</p>
<p>All processes&rsquo; file descriptor 0, 1, 2 originates to <code>init</code>&rsquo;s file descriptor.</p>
<p>If calling process opens PTY or TTY, which is common when we opens new terminal to run a process, it is also passed down to exec/forked process.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,387 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Kernel, syscalls | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Deep dive Linux Kernel #1">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/2023/11/kernel-syscalls/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Kernel, syscalls" />
<meta property="og:description" content="Deep dive Linux Kernel #1" />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/2023/11/kernel-syscalls/" /><meta property="article:section" content="posts" />
<meta property="article:published_time" content="2023-11-11T01:22:30+00:00" />
<meta property="article:modified_time" content="2023-11-11T01:22:30+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Kernel, syscalls"/>
<meta name="twitter:description" content="Deep dive Linux Kernel #1"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "Kernel, syscalls",
"item": "http://blog.morgan.kr/2023/11/kernel-syscalls/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "Kernel, syscalls",
"name": "Kernel, syscalls",
"description": "Deep dive Linux Kernel #1",
"keywords": [
],
"articleBody": "sys_fork() .align 2 _sys_fork: call _find_empty_process testl %eax,%eax js 1f push %gs pushl %esi pushl %edi pushl %ebp pushl %eax call _copy_process addl $20,%esp 1: ret FUNCTION find_empty_process() A: IF ++last_pid \u003c 0 last_pid = 1 FOR i : 0 -\u003e NR_TASKS IF task[i] \u0026\u0026 task[i].pid == last_pid GOTO A FOR i : 1 -\u003e NR_TASKS IF NOT task[i] RETURN i RETURN -1 Set last_pid to 1 or more.\nFrom taskid from 0 to max_tasks, if task exists and pid is last_pid then increases pid and again.\nFrom taskid from 1 to max_tasks, if tasks not exists, return.\n-\u003e It just iterates through tasks and find last taskid linearly.\nFUNCTION copy_process \u003c- nr, EBP, EDI, ESI, GS, EBX~EDX, CS~FS, EIP, EFLAGS, ESP, SS -\u003e INT TASK_STRUCT P INT I FILE F P = (TASK_STRUCT)(GET_FREE_PAGE()) IF NOT P RET ERR SET P START_TIME = RUNNING PID = LAST_PID FATHER = CURRENT_PID COUNTER = PRIORITY START_TIME = jiffies SIGNAL, ALARM, LEADER, UTIME, STIME, CUTIME, CSDTIME, BACK_LINK = 0 SET TSS BACK_LINK = 0 ESP0 = PAGE_SIZE + ADDR(P) SS0 = 0x10 EAX = 0 ES ~ GS = 0xFFFF LDT = _LDT(nr) EIP, EFLAGS = ARGUMENT ECX ~ EDI = ARGUMENT TRACR_BITMAP = 0x80000000 COPY_MEM (nr, p) IF \u003c- FREE_PAGE ADDR(P) RET ERR FOR i : 0 ~ NR_OPEN IF f = P.filp[i] THEN INCR f.f_count 1 IF CURRENT.PWD THEN INCR CURRENT.PWD.i_count 1 IF CURRENT.ROOT THEN INCR CURRENT.ROOT.i_count 1 SET_TSS_DESC \u003c- (GDT + nr/2 + FIRST_TSS_ENTRY) , P.TSS SET_LDT_DESC \u003c- (GDT + nr/2 + FIRST_LDT_ENTRY) , P.LDT task(nr) \u003c- p RET last_pid “nr” passed is the index of the new task in the task array, where each element corresponds to a process slot. fork() copies the parents kernel context, as well as general registers and segment selectors required for a new process to run in user space. It creates a new task structure from a new free page and sets up default values and certain parameters inherited from the parent, such as process ID, priority, and execution times. Then it copies memory regions from the parent to the new process, referred to by “nr,” which is the index of the new process in the task array. Changes the parent processs working directory (PWD) and root directory reference counters, incrementing them by 1 to reflect the new child process now also using these resources. Sets the Task State Segment (TSS) and Local Descriptor Table (LDT) entries, which are x86-specific structures used for task switching and memory segmentation, respectively. TSS holds information about the tasks stack for privilege level changes and also the hardware context when a task switch occurs. LDT is a segment descriptor table that stores descriptors for local segments, giving a task its own set of segment registers. Finally, it assigns the newly created task structure, p, to the task array at index “nr.” This effectively makes the new task available for scheduling. _sys_fork() “sys_fork” finds an empty process ID using the search loop in _find_empty_process, then it invokes _copy_process to clone the parents kernel context to the new process. This sets up a complete environment for the new process to run independently from the parent, but initially as a nearly identical copy.\n",
"wordCount" : "532",
"inLanguage": "en",
"datePublished": "2023-11-11T01:22:30Z",
"dateModified": "2023-11-11T01:22:30Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/2023/11/kernel-syscalls/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
Kernel, syscalls
</h1>
<div class="post-description">
Deep dive Linux Kernel #1
</div>
<div class="post-meta"><span title='2023-11-11 01:22:30 &#43;0000 UTC'>
Nov 11, 2023
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><h3 id="sys_fork">sys_fork()<a hidden class="anchor" aria-hidden="true" href="#sys_fork">#</a></h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-asm" data-lang="asm"><span class="line"><span class="cl"><span class="na">.align</span> <span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="nl">_sys_fork:</span>
</span></span><span class="line"><span class="cl"> <span class="nf">call</span> <span class="no">_find_empty_process</span>
</span></span><span class="line"><span class="cl"> <span class="nf">testl</span> <span class="nv">%eax</span><span class="p">,</span><span class="nv">%eax</span>
</span></span><span class="line"><span class="cl"> <span class="nf">js</span> <span class="mi">1</span><span class="no">f</span>
</span></span><span class="line"><span class="cl"> <span class="nf">push</span> <span class="nv">%gs</span>
</span></span><span class="line"><span class="cl"> <span class="nf">pushl</span> <span class="nv">%esi</span>
</span></span><span class="line"><span class="cl"> <span class="nf">pushl</span> <span class="nv">%edi</span>
</span></span><span class="line"><span class="cl"> <span class="nf">pushl</span> <span class="nv">%ebp</span>
</span></span><span class="line"><span class="cl"> <span class="nf">pushl</span> <span class="nv">%eax</span>
</span></span><span class="line"><span class="cl"> <span class="nf">call</span> <span class="no">_copy_process</span>
</span></span><span class="line"><span class="cl"> <span class="nf">addl</span> <span class="no">$20</span><span class="p">,</span><span class="nv">%esp</span>
</span></span><span class="line"><span class="cl"><span class="err">1:</span> <span class="nf">ret</span>
</span></span></code></pre></div><h4 id="function-find_empty_process"><code>FUNCTION find_empty_process()</code><a hidden class="anchor" aria-hidden="true" href="#function-find_empty_process">#</a></h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">A:
</span></span><span class="line"><span class="cl"> IF ++last_pid &lt; 0
</span></span><span class="line"><span class="cl"> last_pid = 1
</span></span><span class="line"><span class="cl"> FOR i : 0 -&gt; NR_TASKS
</span></span><span class="line"><span class="cl"> IF task[i] &amp;&amp; task[i].pid == last_pid
</span></span><span class="line"><span class="cl"> GOTO A
</span></span><span class="line"><span class="cl"> FOR i : 1 -&gt; NR_TASKS
</span></span><span class="line"><span class="cl"> IF NOT task[i]
</span></span><span class="line"><span class="cl"> RETURN i
</span></span><span class="line"><span class="cl"> RETURN -1
</span></span></code></pre></div><ol>
<li>
<p>Set last_pid to 1 or more.</p>
</li>
<li>
<p>From taskid from 0 to max_tasks, if task exists and pid is last_pid then increases pid and again.</p>
</li>
<li>
<p>From taskid from 1 to max_tasks, if tasks not exists, return.</p>
</li>
</ol>
<p>-&gt; It just iterates through tasks and find last taskid linearly.</p>
<h4 id="function-copy_process"><code>FUNCTION copy_process</code><a hidden class="anchor" aria-hidden="true" href="#function-copy_process">#</a></h4>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">&lt;- nr, EBP, EDI, ESI, GS, EBX~EDX, CS~FS, EIP, EFLAGS, ESP, SS
</span></span><span class="line"><span class="cl">-&gt; INT
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">TASK_STRUCT P
</span></span><span class="line"><span class="cl">INT I
</span></span><span class="line"><span class="cl">FILE F
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">P = (TASK_STRUCT)(GET_FREE_PAGE())
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">IF NOT P
</span></span><span class="line"><span class="cl"> RET ERR
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">SET P
</span></span><span class="line"><span class="cl"> START_TIME = RUNNING
</span></span><span class="line"><span class="cl"> PID = LAST_PID
</span></span><span class="line"><span class="cl"> FATHER = CURRENT_PID
</span></span><span class="line"><span class="cl"> COUNTER = PRIORITY
</span></span><span class="line"><span class="cl"> START_TIME = jiffies
</span></span><span class="line"><span class="cl"> SIGNAL, ALARM, LEADER, UTIME, STIME, CUTIME, CSDTIME, BACK_LINK = 0
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> SET TSS
</span></span><span class="line"><span class="cl"> BACK_LINK = 0
</span></span><span class="line"><span class="cl"> ESP0 = PAGE_SIZE + ADDR(P)
</span></span><span class="line"><span class="cl"> SS0 = 0x10
</span></span><span class="line"><span class="cl"> EAX = 0
</span></span><span class="line"><span class="cl"> ES ~ GS = 0xFFFF
</span></span><span class="line"><span class="cl"> LDT = _LDT(nr)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> EIP, EFLAGS = ARGUMENT
</span></span><span class="line"><span class="cl"> ECX ~ EDI = ARGUMENT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> TRACR_BITMAP = 0x80000000
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">COPY_MEM (nr, p)
</span></span><span class="line"><span class="cl">IF &lt;-
</span></span><span class="line"><span class="cl"> FREE_PAGE ADDR(P)
</span></span><span class="line"><span class="cl"> RET ERR
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">FOR i : 0 ~ NR_OPEN
</span></span><span class="line"><span class="cl"> IF
</span></span><span class="line"><span class="cl"> f = P.filp[i]
</span></span><span class="line"><span class="cl"> THEN
</span></span><span class="line"><span class="cl"> INCR f.f_count 1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">IF
</span></span><span class="line"><span class="cl"> CURRENT.PWD
</span></span><span class="line"><span class="cl">THEN
</span></span><span class="line"><span class="cl"> INCR CURRENT.PWD.i_count 1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">IF
</span></span><span class="line"><span class="cl"> CURRENT.ROOT
</span></span><span class="line"><span class="cl">THEN
</span></span><span class="line"><span class="cl"> INCR CURRENT.ROOT.i_count 1
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">SET_TSS_DESC &lt;- (GDT + nr/2 + FIRST_TSS_ENTRY) , P.TSS
</span></span><span class="line"><span class="cl">SET_LDT_DESC &lt;- (GDT + nr/2 + FIRST_LDT_ENTRY) , P.LDT
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">task(nr) &lt;- p
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">RET last_pid
</span></span></code></pre></div><ul>
<li>&ldquo;nr&rdquo; passed is the index of the new task in the task array, where each element corresponds to a process slot.</li>
<li>fork() copies the parent&rsquo;s kernel context, as well as general registers and segment selectors required for a new process to run in user space.</li>
<li>It creates a new task structure from a new free page and sets up default values and certain parameters inherited from the parent, such as process ID, priority, and execution times.</li>
<li>Then it copies memory regions from the parent to the new process, referred to by &ldquo;nr,&rdquo; which is the index of the new process in the task array.</li>
<li>Changes the parent process&rsquo;s working directory (PWD) and root directory reference counters, incrementing them by 1 to reflect the new child process now also using these resources.</li>
<li>Sets the Task State Segment (TSS) and Local Descriptor Table (LDT) entries, which are x86-specific structures used for task switching and memory segmentation, respectively.</li>
<li>TSS holds information about the task&rsquo;s stack for privilege level changes and also the hardware context when a task switch occurs.</li>
<li>LDT is a segment descriptor table that stores descriptors for local segments, giving a task its own set of segment registers.</li>
<li>Finally, it assigns the newly created task structure, p, to the task array at index &ldquo;nr.&rdquo; This effectively makes the new task available for scheduling.</li>
</ul>
<h3 id="_sys_fork"><code>_sys_fork()</code><a hidden class="anchor" aria-hidden="true" href="#_sys_fork">#</a></h3>
<p>&ldquo;sys_fork&rdquo; finds an empty process ID using the search loop in <code>_find_empty_process</code>, then it invokes <code>_copy_process</code> to clone the parent&rsquo;s kernel context to the new process. This sets up a complete environment for the new process to run independently from the parent, but initially as a nearly identical copy.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/LINESeedKR-Bd.woff2 Normal file

Binary file not shown.

BIN
public/LINESeedKR-Rg.woff2 Normal file

Binary file not shown.

BIN
public/LINESeedKR-Th.woff2 Normal file

Binary file not shown.

Binary file not shown.

BIN
public/Monaspace-Neon.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
public/SourceSans3-It.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

55
public/admin/config.yml Normal file
View File

@ -0,0 +1,55 @@
backend:
name: gitea
repo: morgan/blog
app_id: 64d5b875-e747-4176-b545-ce7a3b0c7f16
api_root: https://git.morgan.kr/api/v1
base_url: https://git.morgan.kr
branch: main
media_folder: static/img
public_folder: /img
collections:
- name: 'post'
label: 'Post'
folder: 'content/posts'
create: true
publish_mode: editorial_workflow
slug: '{{year}}-{{month}}-{{day}}-{{slug}}'
editor:
preview: false
fields:
- { label: 'Title', name: 'title', widget: 'string' }
- { label: 'Publish Date', name: 'date', widget: 'datetime' }
- { label: 'Slug', name: 'slug', widget: 'string' }
- { label: 'Description', name: 'description', widget: 'string', required: false }
- { label: 'Body', name: 'body', widget: 'markdown' }
- name: 'daily'
label: 'Daily'
folder: 'content/daily'
create: true
publish_mode: editorial_workflow
slug: '{{year}}-{{month}}-{{day}}'
editor:
preview: false
fields:
- { label: 'Title', name: 'title', widget: 'string' }
- { label: 'Publish Date', name: 'date', widget: 'datetime' }
- { label: 'Slug', name: 'slug', widget: 'string' }
- { label: 'Body', name: 'body', widget: 'markdown' }
- name: 'diary'
label: 'Diary'
folder: 'content/diary'
create: true
publish_mode: editorial_workflow
slug: '{{year}}-{{month}}-{{day}}-{{slug}}'
editor:
preview: false
fields:
- { label: 'Title', name: 'title', widget: 'string' }
- { label: 'Publish Date', name: 'date', widget: 'datetime' }
- { label: 'Slug', name: 'slug', widget: 'string' }
- { label: 'Description', name: 'description', widget: 'string', required: false }
- { label: 'Body', name: 'body', widget: 'markdown' }

20
public/admin/index.html Normal file
View File

@ -0,0 +1,20 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="robots" content="noindex" />
<title>Content Manager</title>
<style>
@import 'https://fonts.googleapis.com/css2?family=Source+Sans+3&display=swap';
@import "https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.8/dist/web/static/pretendard.css";
body, h1, h2, h3, h4, h5, h6, p {
font-family: "Source Sans 3", Pretendard, sans-serif !important;
}
</style>
</head>
<body>
<!-- Include the script that builds the page and powers Decap CMS -->
<script src="https://unpkg.com/decap-cms@^3.0.0/dist/decap-cms.js"></script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,281 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>시험을 일주일 앞두고 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="지금까지 인생에서 가장 중요한 시험. 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 이상 집중을 없을 같다. 이제 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.
몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="시험을 일주일 앞두고" />
<meta property="og:description" content="지금까지 인생에서 가장 중요한 시험. 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 이상 집중을 없을 같다. 이제 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.
몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-06-20T09:23:28+00:00" />
<meta property="article:modified_time" content="2021-06-20T09:23:28+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="시험을 일주일 앞두고"/>
<meta name="twitter:description" content="지금까지 인생에서 가장 중요한 시험. 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 이상 집중을 없을 같다. 이제 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.
몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "시험을 일주일 앞두고",
"item": "http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "시험을 일주일 앞두고",
"name": "시험을 일주일 앞두고",
"description": "지금까지 내 인생에서 가장 중요한 시험. 그 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 더 이상 집중을 할 수 없을 것 같다. 이제 이 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 뭘 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 게 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.\n몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다.",
"keywords": [
],
"articleBody": "지금까지 내 인생에서 가장 중요한 시험. 그 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 더 이상 집중을 할 수 없을 것 같다. 이제 이 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 뭘 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 게 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.\n몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다. SW나 해킹이나 반도체에 대해 몇달동안 파고 들어 공부하고, 조사하고 생각하다 보니 전에보다 더 자세하게, 깊게 알게 되었고, 예전과는 살짝 다른 생각을 하게 되었다. 예전에는 마냥 컴퓨터공학이나 해킹이 하고 싶었던 반면 지금은 더 자세하게 무엇이 하고 싶은지에 대한 목록을 작성할 수 있게 되었다. 각종 주제에 대해서도 흥미를 갖게 되었고 특히 예전에는 그냥 넘어갔던 책들을 다시 읽어보고 싶어졌다. 앎에 대한 욕구가 끝없이 증가해 버렸다. 지금 교보문고에 있는 읽고싶은 책들만 합해도 100만원이 넘어가니 말이다.\n아마 올해 자기소개서를 쓸 때에는 정말 깔끔하고 자세한 자기소개서를 쓸 수 있지 않을까 싶다. 개발자 이력서 쓰는 법이나 회사 취직에 관한 글을 꽤 읽었으니 기술적으로도 단정한 글이 되지 않을까 싶다. 항상 느끼는 것이, 이건 대학 자소서 준비인지 아니면 그냥 개발자의 자기소개서인지 의문이 든다. 그럴 정도로 기술적인 내용을 많이 집어넣는데, 이게 과학고생의 글인지 아니면 디미고 같은 개발중점 학교 학생의 글인지 햇갈린다.\n짧은 회고록이 되었지만 2주 후, 자소서를 쓰고 있을 나를 상상하니 빨리 지나갔으면 좋겠다는 생각밖에 들지 않는다.\n",
"wordCount" : "218",
"inLanguage": "en",
"datePublished": "2021-06-20T09:23:28Z",
"dateModified": "2021-06-20T09:23:28Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
시험을 일주일 앞두고
</h1>
<div class="post-meta"><span title='2021-06-20 09:23:28 &#43;0000 UTC'>
Jun 20, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>지금까지 내 인생에서 가장 중요한 시험. 그 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 더 이상 집중을 할 수 없을 것 같다. 이제 이 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 뭘 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 게 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.</p>
<p>몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다. SW나 해킹이나 반도체에 대해 몇달동안 파고 들어 공부하고, 조사하고 생각하다 보니 전에보다 더 자세하게, 깊게 알게 되었고, 예전과는 살짝 다른 생각을 하게 되었다. 예전에는 마냥 컴퓨터공학이나 해킹이 하고 싶었던 반면 지금은 더 자세하게 무엇이 하고 싶은지에 대한 목록을 작성할 수 있게 되었다. 각종 주제에 대해서도 흥미를 갖게 되었고 특히 예전에는 그냥 넘어갔던 책들을 다시 읽어보고 싶어졌다. 앎에 대한 욕구가 끝없이 증가해 버렸다. 지금 교보문고에 있는 읽고싶은 책들만 합해도 100만원이 넘어가니 말이다.</p>
<p>아마 올해 자기소개서를 쓸 때에는 정말 깔끔하고 자세한 자기소개서를 쓸 수 있지 않을까 싶다. 개발자 이력서 쓰는 법이나 회사 취직에 관한 글을 꽤 읽었으니 기술적으로도 단정한 글이 되지 않을까 싶다. 항상 느끼는 것이, 이건 대학 자소서 준비인지 아니면 그냥 개발자의 자기소개서인지 의문이 든다. 그럴 정도로 기술적인 내용을 많이 집어넣는데, 이게 과학고생의 글인지 아니면 디미고 같은 개발중점 학교 학생의 글인지 햇갈린다.</p>
<p>짧은 회고록이 되었지만 2주 후, 자소서를 쓰고 있을 나를 상상하니 빨리 지나갔으면 좋겠다는 생각밖에 들지 않는다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,285 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>선택실패 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 다짐은 물거품이 되었다.
역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/2022041406/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="선택실패" />
<meta property="og:description" content="고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 다짐은 물거품이 되었다.
역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/2022041406/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2022-04-14T06:55:25+00:00" />
<meta property="article:modified_time" content="2022-04-14T06:55:25+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="선택실패"/>
<meta name="twitter:description" content="고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 다짐은 물거품이 되었다.
역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "선택실패",
"item": "http://blog.morgan.kr/blog/2022041406/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "선택실패",
"name": "선택실패",
"description": "고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 그 다짐은 물거품이 되었다.\n역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다.",
"keywords": [
],
"articleBody": "고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 그 다짐은 물거품이 되었다.\n역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다. 붙어도 안간다는 생각으로. 하지만 내가 희망했던 대학을 떨어지고, 상위 학교 하위 학과와 하위 학교 자유 학과중에 선택해야 했다. 내가 3년동안 해왔던 것과 내가 무엇을 하고 싶은지를 생각해 본다면 당연히 학과를 보고 진학을 해야 했었는데, 막상 상위 학교의 합격증을 받으니 당연히 마음 한켠에서는 이걸 버린다고?!?라는 마음이 있었고, 그 마음에 휘둘려 등록예치금을 보낸다. 아직 등록 기간이 남았으니 등록 취소를 해도 되겠지만, 사실상 마음을 다잡은 것이나 마찬가지였다. 등록금 환불 신청서까지 적어놓고 책상에 올려두었다. 도장과 보호자 서명까지 받아놓고 고민했다. 후회하지 않을까? 어느 쪽으로 가나 조금 다니고 후회하게 될텐데, 학교를 후회하는게 학과를 후회하는 것보다 더 심하지 않을까 생각해 결국 그대로 원서는 놔둔 채 날이 넘어간다. 날짜가 넘어가는 걸 보고 얼마나 힘이 풀렸는지 모르겠다. 이제는 돌이킬 수 없구나.\n그런 선택을 한 후 몇일간은 대학교 이름에 심취해 우리 학과도 선녀처럼 보였다. 전망 좋은 공과 학과로만 보였다. 하지만 시간이 지나면서 심취해 있던 생각이 풀리기 시작했고, 학과의 현실을 마주하기 시작하면서 후회가 밀려왔다. 서양에서는 주로 취급하지도 않는 사양산업의 책임으로만 끌고 온 이름만 대학인 학과. 이게 우리 조선해양 공학과의 현실이었고, 미래였다. 미래도 없는 학과. 이런 학과인줄 알고는 있었다. 하지만 실제 전공 수업을 들으면서 더욱이 실감났다. 왜 이런 학교에 와서 이딴 옛날 정보를 배워야 하는가. 왜 교수님은 열등감에 산업을 과장하고 잘 될거라고 세뇌하고 애원하듯이 수업을 하실까. 그 정도로 사양산업의 학과라는 것을 깨닫게 되었고, 탈출을 결심했다.\n결국 탈출을 결심하게 될 줄은 알았다. 반수를 하던, 유학을 결심하던, 군대를 가던 어떻게든 이런 현실을 벗어나고자 하게 될 것이란 것을 알고 있었다. 학교도 내가 생각했던 것처럼 엄청 막 좋은 곳은 마냥 아니었다. 역사가 오래되어 뿌리깊은 명문이지만 보수적 교육과 보수적 관념 그 자체인 학교인 듯 했다. 대학교 수업은 고등학교의 주입식 교육 그 연장선 뿐이었다. 많은 것에 너무 큰 상실감을 느꼈다. 학과에서도, 학교에서도. 그래서 결국 대한민국 교육의 한계인가 싶었다. 대학교도 같은 처지의 교육이구나 했다.\n지금 학과에 대한 열등감으로 그렇게 느끼는 것일 수도 있다. 하지만 만약 ‘학과’때문에 학교도 그렇게 느껴진다면 그만큼 그 학과에 문제가 크다는 것이 아닐까?\n난 유학을 결심했다.\n대한민국의 교육을 벗어나고 싶다. 아직 기초를 공부하는 입장으로서 얼만큼의 주입식인 필요하다는 것은 인정한다. 하지만 이것이 대학원까지 이어지고 심지어 그 이상에도 이어지는 교육 체계와 대학 교수들 아래에서 배우고 싶지 않다. 난 이루고 싶은 꿈과 하고 싶은 일, 애타게 배우고 싶은 것이 있다. 지금까지 내가 노력할 수 있었던 사명감이라 할 수도 있다. 이것이 깨져버린 이상, 그리고 여기서 계속 공부를 이어나가는 이상 내 꿈은 영원히 짓밟힐 것이다. 지금 여기에는 어떤 수를 써도 그것을 이룰 수 있는 길은 없다고 생각한다. 누구는 회피라 할테지만, 난 여기에서는 내가 할 수 있는 능력의 최선을 다했다고 생각한다. 과거를 후회하면서 이뿐인 자리에 있느니, 차라리 이 현실을 회피해 새 길을 열어나가련다.\n제일 중요한 것은 이것이 지금 하기 싫은 일에 대한 회피가 목적이 되어 버리면 안된다는 것이다.\n",
"wordCount" : "489",
"inLanguage": "en",
"datePublished": "2022-04-14T06:55:25Z",
"dateModified": "2022-04-14T06:55:25Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/2022041406/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
선택실패
</h1>
<div class="post-meta"><span title='2022-04-14 06:55:25 &#43;0000 UTC'>
Apr 14, 2022
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 그 다짐은 물거품이 되었다.</p>
<p>역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다. 붙어도 안간다는 생각으로. 하지만 내가 희망했던 대학을 떨어지고, 상위 학교 하위 학과와 하위 학교 자유 학과중에 선택해야 했다. 내가 3년동안 해왔던 것과 내가 무엇을 하고 싶은지를 생각해 본다면 당연히 학과를 보고 진학을 해야 했었는데, 막상 상위 학교의 합격증을 받으니 당연히 마음 한켠에서는 이걸 버린다고?!?라는 마음이 있었고, 그 마음에 휘둘려 등록예치금을 보낸다. 아직 등록 기간이 남았으니 등록 취소를 해도 되겠지만, 사실상 마음을 다잡은 것이나 마찬가지였다. 등록금 환불 신청서까지 적어놓고 책상에 올려두었다. 도장과 보호자 서명까지 받아놓고 고민했다. 후회하지 않을까? 어느 쪽으로 가나 조금 다니고 후회하게 될텐데, 학교를 후회하는게 학과를 후회하는 것보다 더 심하지 않을까 생각해 결국 그대로 원서는 놔둔 채 날이 넘어간다. 날짜가 넘어가는 걸 보고 얼마나 힘이 풀렸는지 모르겠다. 이제는 돌이킬 수 없구나.</p>
<p>그런 선택을 한 후 몇일간은 대학교 이름에 심취해 우리 학과도 선녀처럼 보였다. 전망 좋은 공과 학과로만 보였다. 하지만 시간이 지나면서 심취해 있던 생각이 풀리기 시작했고, 학과의 현실을 마주하기 시작하면서 후회가 밀려왔다. 서양에서는 주로 취급하지도 않는 사양산업의 책임으로만 끌고 온 이름만 대학인 학과. 이게 우리 조선해양 공학과의 현실이었고, 미래였다. 미래도 없는 학과. 이런 학과인줄 알고는 있었다. 하지만 실제 전공 수업을 들으면서 더욱이 실감났다. 왜 이런 학교에 와서 이딴 옛날 정보를 배워야 하는가. 왜 교수님은 열등감에 산업을 과장하고 잘 될거라고 세뇌하고 애원하듯이 수업을 하실까. 그 정도로 사양산업의 학과라는 것을 깨닫게 되었고, 탈출을 결심했다.</p>
<p>결국 탈출을 결심하게 될 줄은 알았다. 반수를 하던, 유학을 결심하던, 군대를 가던 어떻게든 이런 현실을 벗어나고자 하게 될 것이란 것을 알고 있었다. 학교도 내가 생각했던 것처럼 엄청 막 좋은 곳은 마냥 아니었다. 역사가 오래되어 뿌리깊은 명문이지만 보수적 교육과 보수적 관념 그 자체인 학교인 듯 했다. 대학교 수업은 고등학교의 주입식 교육 그 연장선 뿐이었다. 많은 것에 너무 큰 상실감을 느꼈다. 학과에서도, 학교에서도. 그래서 결국 대한민국 교육의 한계인가 싶었다. 대학교도 같은 처지의 교육이구나 했다.</p>
<p>지금 학과에 대한 열등감으로 그렇게 느끼는 것일 수도 있다. 하지만 만약 ‘학과’때문에 학교도 그렇게 느껴진다면 그만큼 그 학과에 문제가 크다는 것이 아닐까?</p>
<p>난 유학을 결심했다.</p>
<p>대한민국의 교육을 벗어나고 싶다. 아직 기초를 공부하는 입장으로서 얼만큼의 주입식인 필요하다는 것은 인정한다. 하지만 이것이 대학원까지 이어지고 심지어 그 이상에도 이어지는 교육 체계와 대학 교수들 아래에서 배우고 싶지 않다. 난 이루고 싶은 꿈과 하고 싶은 일, 애타게 배우고 싶은 것이 있다. 지금까지 내가 노력할 수 있었던 사명감이라 할 수도 있다. 이것이 깨져버린 이상, 그리고 여기서 계속 공부를 이어나가는 이상 내 꿈은 영원히 짓밟힐 것이다. 지금 여기에는 어떤 수를 써도 그것을 이룰 수 있는 길은 없다고 생각한다. 누구는 회피라 할테지만, 난 여기에서는 내가 할 수 있는 능력의 최선을 다했다고 생각한다. 과거를 후회하면서 이뿐인 자리에 있느니, 차라리 이 현실을 회피해 새 길을 열어나가련다.</p>
<p>제일 중요한 것은 이것이 지금 하기 싫은 일에 대한 회피가 목적이 되어 버리면 안된다는 것이다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,285 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>블로그 글쓰기는 너무 힘들어.. | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 소장을 위해 Ghost &#43; Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만&hellip;. 결국 글을 쓰지도 않은 달마다 돈만 나가고 있다&hellip;
블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="블로그 글쓰기는 너무 힘들어.." />
<meta property="og:description" content="야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 소장을 위해 Ghost &#43; Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만&hellip;. 결국 글을 쓰지도 않은 달마다 돈만 나가고 있다&hellip;
블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-08T05:19:00+00:00" />
<meta property="article:modified_time" content="2021-10-08T05:19:00+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="블로그 글쓰기는 너무 힘들어.."/>
<meta name="twitter:description" content="야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 소장을 위해 Ghost &#43; Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만&hellip;. 결국 글을 쓰지도 않은 달마다 돈만 나가고 있다&hellip;
블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "블로그 글쓰기는 너무 힘들어..",
"item": "http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "블로그 글쓰기는 너무 힘들어..",
"name": "블로그 글쓰기는 너무 힘들어..",
"description": "야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 내 소장을 위해 Ghost + Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만\u0026hellip;. 결국 글을 쓰지도 않은 채 달마다 돈만 나가고 있다\u0026hellip;\n블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다.",
"keywords": [
],
"articleBody": "야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 내 소장을 위해 Ghost + Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만…. 결국 글을 쓰지도 않은 채 달마다 돈만 나가고 있다…\n블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다. 나에게 있는거라고는 집에 있는 아버지 노트북과 내 아이폰 밖에 없으니까..\n그래도 일기같은 형식으로 글을 써 내려갔다면 좋을 것 같은데 그 역할을 트위터가 하고 있는 바람에 더욱 쓰지 않게 되었다. 물론 길게길게 회고록을 쓰거나 감상을 쓰거나 후회를 하기 위해서라면 블로그만큼 좋은것도 없기는 한데, 나는 타자가 느리고, 글을 너무 못쓴다. 이과생특\n하지만 애초에 내가 코딩을 하지 않은것도 몇달째 되어가고 있고, 내가 아이패드나 노트북을 구매하지 않는 이상 글을 절대 꾸준히 쓸 수 없을 것 같다. 물론 아침에 일어나면 남는 자투리 시간을 이용하여 글을 틈틈히 쓸수도 있지만, 역시 그 역할을 트위터가 하고 있다.\n글쓰기가 너무 힘들다. 다른 블로그들을 보면 글도 길고 길지만 쉽게 읽히며 뭘 말하고 싶은지 탁탁 이해가 쉽다. 하지만 내가 글을 쓰자니 길제 쓰기도 힘들고 시간도 걸리고 머리도 아프고 할 이야기도 없다.\n글을 쓰고 싶다. 멋지게 글을 쓰고 싶다. 다른 사람에게 도움이 되는 글을 쓰고 싶다. 내 글을 가지고 사람들이 기꺼이 대가를 지불할 만큼의 가치를 가지는 글을 쓰고 싶다. (그 대가란, 그 사람들의 시간..)\n열심히 해봐야 겠다. 앞으로 대학 입시까지 2달 적게 남기도 했고, 내 몸이 망가져가는 걸 많이 실감했기에 건강하고 규칙적인 생활습관을 가지려 하고 있고, 그 첫걸음이 일찍 자서 일찍 일어나고, 남는 시간에 글쓰기이다.\n화이팅! 할 수 있다..!\n",
"wordCount" : "258",
"inLanguage": "en",
"datePublished": "2021-10-08T05:19:00Z",
"dateModified": "2021-10-08T05:19:00Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
블로그 글쓰기는 너무 힘들어..
</h1>
<div class="post-meta"><span title='2021-10-08 05:19:00 &#43;0000 UTC'>
Oct 8, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 내 소장을 위해 Ghost + Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만&hellip;. 결국 글을 쓰지도 않은 채 달마다 돈만 나가고 있다&hellip;</p>
<p>블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다. 나에게 있는거라고는 집에 있는 아버지 노트북과 내 아이폰 밖에 없으니까..</p>
<p>그래도 일기같은 형식으로 글을 써 내려갔다면 좋을 것 같은데 그 역할을 트위터가 하고 있는 바람에 더욱 쓰지 않게 되었다. 물론 길게길게 회고록을 쓰거나 감상을 쓰거나 후회를 하기 위해서라면 블로그만큼 좋은것도 없기는 한데, 나는 타자가 느리고, 글을 너무 못쓴다. 이과생특</p>
<p>하지만 애초에 내가 코딩을 하지 않은것도 몇달째 되어가고 있고, 내가 아이패드나 노트북을 구매하지 않는 이상 글을 절대 꾸준히 쓸 수 없을 것 같다. 물론 아침에 일어나면 남는 자투리 시간을 이용하여 글을 틈틈히 쓸수도 있지만, 역시 그 역할을 트위터가 하고 있다.</p>
<p>글쓰기가 너무 힘들다. 다른 블로그들을 보면 글도 길고 길지만 쉽게 읽히며 뭘 말하고 싶은지 탁탁 이해가 쉽다. 하지만 내가 글을 쓰자니 길제 쓰기도 힘들고 시간도 걸리고 머리도 아프고 할 이야기도 없다.</p>
<p>글을 쓰고 싶다. 멋지게 글을 쓰고 싶다. 다른 사람에게 도움이 되는 글을 쓰고 싶다. 내 글을 가지고 사람들이 기꺼이 대가를 지불할 만큼의 가치를 가지는 글을 쓰고 싶다. (그 대가란, 그 사람들의 시간..)</p>
<p>열심히 해봐야 겠다. 앞으로 대학 입시까지 2달 적게 남기도 했고, 내 몸이 망가져가는 걸 많이 실감했기에 건강하고 규칙적인 생활습관을 가지려 하고 있고, 그 첫걸음이 일찍 자서 일찍 일어나고, 남는 시간에 글쓰기이다.</p>
<p>화이팅! 할 수 있다..!</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>데이터센터 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 있는 데이터로 가공하기 위해 필요한 수없이 컴퓨팅 파워를, 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 있다.
아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/datacenter/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="데이터센터" />
<meta property="og:description" content="구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 있는 데이터로 가공하기 위해 필요한 수없이 컴퓨팅 파워를, 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 있다.
아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/datacenter/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-23T08:15:14+00:00" />
<meta property="article:modified_time" content="2021-10-23T08:15:14+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="데이터센터"/>
<meta name="twitter:description" content="구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 있는 데이터로 가공하기 위해 필요한 수없이 컴퓨팅 파워를, 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 있다.
아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "데이터센터",
"item": "http://blog.morgan.kr/blog/datacenter/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "데이터센터",
"name": "데이터센터",
"description": "구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 수 있는 데이터로 가공하기 위해 필요한 수없이 큰 컴퓨팅 파워를, 큰 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 알 수 있다.\n아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다.",
"keywords": [
],
"articleBody": "구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 수 있는 데이터로 가공하기 위해 필요한 수없이 큰 컴퓨팅 파워를, 큰 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 알 수 있다.\n아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다. 발열과 전력문제이다. 어디보다도 전력을 사용하여 열이 덥혀질 시설이 겨울만큼 춥다는 것으로 얼마나 냉각시스템이 신경쓰는지 알 수 있다. 심지어 우리집에 있는 노트북만 사용해도 80도 가까이 올라가고, 방이 더워지는데 수백, 수천, 수만대의 컴퓨터가 설치되어있는 데이터센터는 오죽할까. 연료를 태워 그 열기로 전기를 만들고 그 전기를 다시 열로 바꾸고, 그 열을 내보내기 위해 또 다시 전기를 쓰다니.\n나도 집에 작은 서버 하나를 운영하고 있다. 매달 받는 전기세가 가히 신비롭다. 그리고 방도 매우 덥다. 한대로 이 정도인데, 데이터센터는 엄청난 전기를 먹고 있다. 게다가 요즘에는 비트코인 열풍이 불어서 채굴이 한창 떠오르고 있다. 어떻게 보면 채굴장도 하나의 데이터 센터라고 볼 수 있지 않은가. Visa나 마스터카드와 같은 카드사들의 데이터센터가 각 나라로 각 개인으로 분산되어 분포하는 것과 비슷하게 볼 수 있으니 말이다. 이러한 와중에 전력이 부족해지고 있다는 뉴스가 자주 떠오른다.\n그 많은 데이터센터의 대부분은 아마 인텔 제온 프로세서, 하드 디스크와 엔비디아의 그래픽카드를 구축해 놓았을 것이다. MS의 Bing 데이터 센터는 FPGA를 이용해 조금 더 성능을 높였다는데, ASIC이나 FPGA를 이용한 데이터센터도 많을 것 같다. 다들 전기를 많이 먹는 장비들이다. 그렇다면 전성비를 고려하는 건 어떨까. 가령 전성비 최강인 ARM이나 RISC를 사용한다던가, Bing처럼 FPGA를 이용하던가.\n사실 전성비가 좋은만큼 서버 프로세서만큼의 수율이 나오지 않을 것이며 그 정도의 성능을 낼 정도의 대형 프로세서는 나오기 힘들 것 같다. 아직까지 모바일로 사용하는 이유기도 하고. 하지만 괴물급 기업들이 ARM 개발을 위해 한창 노력중이니. 엔비디아도 ARM코어로 데이터센터 개발중이라 하고, 그 애플이 ARM으로 노력중이니 곧 데스크탑급 되는 시스템이 나오고, 좀 있으면 서버급도 나올 수 있지 않을까 기대하고 있다. ARM 는 극강의 전성비를 고려한 설계인 만큼 물량으로 밀어붙여도 x86에 전력으로는 이길지 않을까 싶다. 서버에서는 코어수도 중요하게 작용하니까 다중코어로는 훨씬 유리하지 않을까 싶다.\n화이팅! ARM으로 개발하시는 기업들 모두!\n",
"wordCount" : "335",
"inLanguage": "en",
"datePublished": "2021-10-23T08:15:14Z",
"dateModified": "2021-10-23T08:15:14Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/datacenter/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
데이터센터
</h1>
<div class="post-meta"><span title='2021-10-23 08:15:14 &#43;0000 UTC'>
Oct 23, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 수 있는 데이터로 가공하기 위해 필요한 수없이 큰 컴퓨팅 파워를, 큰 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 알 수 있다.</p>
<p>아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다. 발열과 전력문제이다. 어디보다도 전력을 사용하여 열이 덥혀질 시설이 겨울만큼 춥다는 것으로 얼마나 냉각시스템이 신경쓰는지 알 수 있다. 심지어 우리집에 있는 노트북만 사용해도 80도 가까이 올라가고, 방이 더워지는데 수백, 수천, 수만대의 컴퓨터가 설치되어있는 데이터센터는 오죽할까. 연료를 태워 그 열기로 전기를 만들고 그 전기를 다시 열로 바꾸고, 그 열을 내보내기 위해 또 다시 전기를 쓰다니.</p>
<p>나도 집에 작은 서버 하나를 운영하고 있다. 매달 받는 전기세가 가히 신비롭다. 그리고 방도 매우 덥다. 한대로 이 정도인데, 데이터센터는 엄청난 전기를 먹고 있다. 게다가 요즘에는 비트코인 열풍이 불어서 채굴이 한창 떠오르고 있다. 어떻게 보면 채굴장도 하나의 데이터 센터라고 볼 수 있지 않은가. Visa나 마스터카드와 같은 카드사들의 데이터센터가 각 나라로 각 개인으로 분산되어 분포하는 것과 비슷하게 볼 수 있으니 말이다. 이러한 와중에 전력이 부족해지고 있다는 뉴스가 자주 떠오른다.</p>
<p>그 많은 데이터센터의 대부분은 아마 인텔 제온 프로세서, 하드 디스크와 엔비디아의 그래픽카드를 구축해 놓았을 것이다. MS의 Bing 데이터 센터는 FPGA를 이용해 조금 더 성능을 높였다는데, ASIC이나 FPGA를 이용한 데이터센터도 많을 것 같다. 다들 전기를 많이 먹는 장비들이다. 그렇다면 전성비를 고려하는 건 어떨까. 가령 전성비 최강인 ARM이나 RISC를 사용한다던가, Bing처럼 FPGA를 이용하던가.</p>
<p>사실 전성비가 좋은만큼 서버 프로세서만큼의 수율이 나오지 않을 것이며 그 정도의 성능을 낼 정도의 대형 프로세서는 나오기 힘들 것 같다. 아직까지 모바일로 사용하는 이유기도 하고. 하지만 괴물급 기업들이 ARM 개발을 위해 한창 노력중이니. 엔비디아도 ARM코어로 데이터센터 개발중이라 하고, 그 애플이 ARM으로 노력중이니 곧 데스크탑급 되는 시스템이 나오고, 좀 있으면 서버급도 나올 수 있지 않을까 기대하고 있다. ARM 는 극강의 전성비를 고려한 설계인 만큼 물량으로 밀어붙여도 x86에 전력으로는 이길지 않을까 싶다. 서버에서는 코어수도 중요하게 작용하니까 다중코어로는 훨씬 유리하지 않을까 싶다.</p>
<p>화이팅! ARM으로 개발하시는 기업들 모두!</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>개인정보.. Privacy.. | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="나는 구글이 싫었다.
구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/gaeinjeongbo-privacy/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="개인정보.. Privacy.." />
<meta property="og:description" content="나는 구글이 싫었다.
구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/gaeinjeongbo-privacy/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-23T08:31:52+00:00" />
<meta property="article:modified_time" content="2021-10-23T08:31:52+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="개인정보.. Privacy.."/>
<meta name="twitter:description" content="나는 구글이 싫었다.
구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "개인정보.. Privacy..",
"item": "http://blog.morgan.kr/blog/gaeinjeongbo-privacy/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "개인정보.. Privacy..",
"name": "개인정보.. Privacy..",
"description": "나는 구글이 싫었다.\n구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다.",
"keywords": [
],
"articleBody": "나는 구글이 싫었다.\n구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다. 물론 에어팟 수리를 하러 갔다가 아이폰에 홀리듯이 들어가버렸다. 한동안 애플의 통합 생태계의 편리함에 매료되어 내가 빅테크 기업에 어떤 이미지를 가지고 있으며 어떤 불만과 어떤 사상을 가지고 있는지 잊었었다.\n하지만 이 문제는 구글이나 애플만의 문제가 아닐 것이다. 따라서 애플과 구글만을 싫어한다고 해서 해결될 문제가 아니다. 이건 모든 빅데이터 산업과 모든 데이터 기업들이 가지고 있는 문제이고, 현대 사회에서 피할 수 없는 문제인 것 같다. 개인에 맞추기 위해, 광고주와 개인을 동시에 만족시키기 위해선 개인정보의 수집이 불가피하다. 최소한의 개인정보 수집이라 해고 결국 수집해야 하는 개인정보는 한둘이 아니다. 따라서 우리는 우리의 개인정보에 대해 어떤 것을 기업에게 주고 어떤 것을 주지 않을지 선택할 권리가 있어야 하고, 선택에 신경써야 한다. 특정 앱을 잘못 설치했다가 지금 모습이 데이터센터에 축적되고 있을 수도 있으니까. 이러한 점에서 개인의 Privacy 선택권을 최대한으로 존중하는 애플은 본받을 만 하다. 애플이 선구적으로 도입한 Ask app not to track이나 앱별 개인정보 관리, 카메라 사용과 마이크 사용 표시는 안드로이드에서도 도입하려 하고 있으니까 이건 정말 잘했다고 생각한다. 애플은 광고 받는 장사가 아니니까 할 수 있는 거겠지만 말이다.\n하지만 구글은 태생이 검색엔진이고 광고 받는게 중요하고 가장 큰 수입원인 기업인 만큼 개인정보 수집에 가장 신경써야 하면서도 가장 필요한 기업이다. 앞으로 어떻게 할지 궁금하다.\n난 아이폰을 사용한다. 앱 트래킹은 다 차단했고, 필요한 것 외에는 카메라를 절대 허용하지 않는다. IP별 개인화도 좋아하지 않아 Private Relay도 잘 쓰고 있다. 하지만 매일매일 구글을 사용하고, 어쩔 수 없이 트래킹이 발생할 수 밖에 없다. 따라서 우리는 개인정보를 흘리고 다니지 않고 꽉 매고 다니는게 중요하다. 계정 보안과 로그아웃은 당연히 중요하고, 무분별하게 계정 연동을 하거나 가입하는 것도, 공개된 웹 상에 자신의 전화번호나 주소, 이메일 주소들을 과도하게 공개하지 않는것도 중요하다.\nHTTPS 연결 확인도 중요하고, WiFi가 믿을 만 한지, 이 네트워크가 믿을 만 한건지도 중요하다. 신경써야 할 게 많지만 철저히 익명으로, 해킹당하지 않을 예방법을 생각하면 쉽다. 개인정보 보호와 해킹 방지는 방법이 비슷하다. 주의해야 할 것은 믿을 만한 곳에 흘리는 개인정보이다. 구글이나, 네이버. 믿을 만 하지만 가장 필요한 회사이다. 가장 이용해먹는 회사이고. 이 점만 주의한다면 일반적으로 자신의 개인정보를 관리한다고 할 수 있지 않을까..?\n",
"wordCount" : "397",
"inLanguage": "en",
"datePublished": "2021-10-23T08:31:52Z",
"dateModified": "2021-10-23T08:31:52Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/gaeinjeongbo-privacy/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
개인정보.. Privacy..
</h1>
<div class="post-meta"><span title='2021-10-23 08:31:52 &#43;0000 UTC'>
Oct 23, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>나는 구글이 싫었다.</p>
<p>구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다. 물론 에어팟 수리를 하러 갔다가 아이폰에 홀리듯이 들어가버렸다. 한동안 애플의 통합 생태계의 편리함에 매료되어 내가 빅테크 기업에 어떤 이미지를 가지고 있으며 어떤 불만과 어떤 사상을 가지고 있는지 잊었었다.</p>
<p>하지만 이 문제는 구글이나 애플만의 문제가 아닐 것이다. 따라서 애플과 구글만을 싫어한다고 해서 해결될 문제가 아니다. 이건 모든 빅데이터 산업과 모든 데이터 기업들이 가지고 있는 문제이고, 현대 사회에서 피할 수 없는 문제인 것 같다. 개인에 맞추기 위해, 광고주와 개인을 동시에 만족시키기 위해선 개인정보의 수집이 불가피하다. 최소한의 개인정보 수집이라 해고 결국 수집해야 하는 개인정보는 한둘이 아니다. 따라서 우리는 우리의 개인정보에 대해 어떤 것을 기업에게 주고 어떤 것을 주지 않을지 선택할 권리가 있어야 하고, 선택에 신경써야 한다. 특정 앱을 잘못 설치했다가 지금 모습이 데이터센터에 축적되고 있을 수도 있으니까. 이러한 점에서 개인의 Privacy 선택권을 최대한으로 존중하는 애플은 본받을 만 하다. 애플이 선구적으로 도입한 Ask app not to track이나 앱별 개인정보 관리, 카메라 사용과 마이크 사용 표시는 안드로이드에서도 도입하려 하고 있으니까 이건 정말 잘했다고 생각한다. 애플은 광고 받는 장사가 아니니까 할 수 있는 거겠지만 말이다.</p>
<p>하지만 구글은 태생이 검색엔진이고 광고 받는게 중요하고 가장 큰 수입원인 기업인 만큼 개인정보 수집에 가장 신경써야 하면서도 가장 필요한 기업이다. 앞으로 어떻게 할지 궁금하다.</p>
<p>난 아이폰을 사용한다. 앱 트래킹은 다 차단했고, 필요한 것 외에는 카메라를 절대 허용하지 않는다. IP별 개인화도 좋아하지 않아 Private Relay도 잘 쓰고 있다. 하지만 매일매일 구글을 사용하고, 어쩔 수 없이 트래킹이 발생할 수 밖에 없다. 따라서 우리는 개인정보를 흘리고 다니지 않고 꽉 매고 다니는게 중요하다. 계정 보안과 로그아웃은 당연히 중요하고, 무분별하게 계정 연동을 하거나 가입하는 것도, 공개된 웹 상에 자신의 전화번호나 주소, 이메일 주소들을 과도하게 공개하지 않는것도 중요하다.</p>
<p>HTTPS 연결 확인도 중요하고, WiFi가 믿을 만 한지, 이 네트워크가 믿을 만 한건지도 중요하다. 신경써야 할 게 많지만 철저히 익명으로, 해킹당하지 않을 예방법을 생각하면 쉽다. 개인정보 보호와 해킹 방지는 방법이 비슷하다. 주의해야 할 것은 믿을 만한 곳에 흘리는 개인정보이다. 구글이나, 네이버. 믿을 만 하지만 가장 필요한 회사이다. 가장 이용해먹는 회사이고. 이 점만 주의한다면 일반적으로 자신의 개인정보를 관리한다고 할 수 있지 않을까..?</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,283 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>학교에서 했던 프로젝트들.. | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content=" 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 ">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="학교에서 했던 프로젝트들.." />
<meta property="og:description" content=" 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 " />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-23T08:51:44+00:00" />
<meta property="article:modified_time" content="2021-10-23T08:51:44+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="학교에서 했던 프로젝트들.."/>
<meta name="twitter:description" content=" 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 "/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "학교에서 했던 프로젝트들..",
"item": "http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "학교에서 했던 프로젝트들..",
"name": "학교에서 했던 프로젝트들..",
"description": " 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 ",
"keywords": [
],
"articleBody": " 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 ",
"wordCount" : "28",
"inLanguage": "en",
"datePublished": "2021-10-23T08:51:44Z",
"dateModified": "2021-10-23T08:51:44Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
학교에서 했던 프로젝트들..
</h1>
<div class="post-meta"><span title='2021-10-23 08:51:44 &#43;0000 UTC'>
Oct 23, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><ol>
<li>귀가시간 수집 프로그램</li>
<li>기상곡 수집 프로그램</li>
<li>컴퓨터실 사용현황</li>
<li>학교 내부 정보공유망</li>
<li>문서파일 자동저장 및 복구 시스템</li>
<li>학교 저지 사이트 API 정리 및 제출시스템 프록시</li>
<li>선생님들이 부탁하셨던 수많은 프로그램들</li>
</ol>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

402
public/blog/index.html Normal file
View File

@ -0,0 +1,402 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Blogs | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Blogs - Morgan&#39;s Blog">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://blog.morgan.kr/blog/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Blogs" />
<meta property="og:description" content="Hi! I&#39;m Morgan!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://blog.morgan.kr/blog/" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Blogs"/>
<meta name="twitter:description" content="Hi! I&#39;m Morgan!"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
}
]
}
</script>
</head>
<body class="list dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<header class="page-header post-title-header">
<h1>
Blogs
</h1>
</header>
<div class="posts-entry-div">
<article class="post-entry">
<header class="entry-header">
<h2>미러서버를 운영하면서...
</h2>
</header>
<div class="entry-content">
<p>학교 둥하교때마다 짬내서 적은거라 비문이 많다..
미러링 서버를 만든게 21년 말에 학교에서 우분투 깔다가 너무 오래걸려서 짜증나서 만든거였는데, 그게 서버 업그레이드도 몇번 거치고 다른것들도 추가하고 하니까 사이즈가 많이 커졌다. 작년까지 에러도 자주나고 그랬는데 이제야 안정적으로 운용할 정도의 수준은 된 것 같다.
미러 Sync하는 스크립트를 옛날 단순하게 적었던걸 그대로 쓰고 있다. Path도 지정 못하고 Configurability도 현저히 떨어져서 새로 짜야겠다고 생각은 했는데, 그래서 최근에 reposync 라고 아에 다시 만들었다. 근데 이게 미러링 사이즈가 18TiB정도 되니까 이걸 테스트 해보기가 겁나더라....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-10-23 09:45:50 &#43;0000 UTC&#39;&gt;Oct 23, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 미러서버를 운영하면서..." href="http://blog.morgan.kr/blog/operating-mirroring-server/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>About USB-C and DP Alt Mode.
</h2>
</header>
<div class="entry-content">
<p>Microsoft Surface Laptop 4 &amp; Linux 제가 밖에서도 쓰고 집에서도 사용하는 만능 서피스 랩탑 4를 사용한지 어느새 2년이 넘었습니다. 그 사이에 리퍼도 받고 OS도 여러번 갈아엎기도 하고, 또 제 하드한 작업들을 잘 버텨주기도 한 정말 대단한 랩탑입니다.
특히 3:2의 광활한 세로는 정말 좋아서 다른 비율의 노트북은 이제 사용할 수 없는 몸이 되어버리기도 했습니다. 길이를 측정해보면 13인치 랩탑들과 동일한데, 세로에 5cm정도를 추가한 정도라 타이틀바 하나정도 넓혀주는 셈이라 마음놓고 패널바를 띄어놓고 사용할 수 있습니다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-05-06 12:55:32 &#43;0000 UTC&#39;&gt;May 6, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to About USB-C and DP Alt Mode." href="http://blog.morgan.kr/blog/usb-c-and-dp-alt-mode/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>선택실패
</h2>
</header>
<div class="entry-content">
<p>고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 그 다짐은 물거품이 되었다.
역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2022-04-14 06:55:25 &#43;0000 UTC&#39;&gt;Apr 14, 2022&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 선택실패" href="http://blog.morgan.kr/blog/2022041406/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>다른 사람의 집에 산다는 것
</h2>
</header>
<div class="entry-content">
<p>우리 집은 창원이다. 어렸을 때 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.
대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2022-04-09 04:02:17 &#43;0000 UTC&#39;&gt;Apr 9, 2022&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 다른 사람의 집에 산다는 것" href="http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>고등학교 돌아보기
</h2>
</header>
<div class="entry-content">
<p>2021년을 돌아보며.
2021.12.22
벌써 12월 22일이다. 12월달에는 열심히 살아야지 하던게 어제같은데 벌써 새해가 다가온다. 나는 내년 성인이 되지만, 아직 실감이 안난다. 술담배를 할 수 있는 나이라기 보다는 내 행동에 내가 책임져야 하는 때가 되었다는 게 더 실감이 난다. 대학을 고민하며 내가 앞으로 뭘 하면서 먹고 살아야할지 꽤 오랫동안 고심했는데, 그 결과로 조금 성장한 것 같아 이제와서는 약간 기쁘기도 하고 무섭기도 하면서 슬픈 약간 오묘한 기분이다. 어찌되었든 이제 성인이 되니까 조금 변해야겠다고 다짐하고 있다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-12-21 16:23:55 &#43;0000 UTC&#39;&gt;Dec 21, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 고등학교 돌아보기" href="http://blog.morgan.kr/blog/godeunghaggyo-dolabogi/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>대학 입시가 한단계만 남았다.
</h2>
</header>
<div class="entry-content">
<p>대학 입시가 한단계만을 앞두고 있다.
합격자 발표와 등록.
뭐 공부하고 대비해야하는 시험은 다 끝났으니 마음껏 놀고 있지만 마음의 한편에는 아직 불안함이 많이 존재하고 있다. 또 공부와 시험대비라는 정해져 있는 계획만을 12년 동안 따르던 나에게서 갑자기 계획이나 강제성이 사라졌다. 이제부터는 내가 무엇을 할 것인지를 나 혼자서 알아서 결정해야 하고 또한 그 책임도 내가 져야할 것이다. 예를 들어 늦게자도 누군가 깨워주지 않는다는 것에서 그것을 처음으로 느꼈다.
지금 하고싶은 것도 없다. 무언가 해야하는 것도 딱히 없다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-12-01 08:09:52 &#43;0000 UTC&#39;&gt;Dec 1, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 대학 입시가 한단계만 남았다." href="http://blog.morgan.kr/blog/daehag-ibsiga-handangye-namassda/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>전자 제어의 세계인 미래, 그 보안의 위협
</h2>
</header>
<div class="entry-content">
<p>미래 사회에는 전기자동차와 자율주행 자동차가 성하게 유행할 것이다. 사람 운전자의 역할이 거의 축소되고, AI나 전자적으로 제어될 것인데, 지금도 많이 일어나고 있는 논란은 바로 보안이다. 만약 자율주행 자동차가 해킹을 당하게 된다면 어떨까? 해커는 자동차에 타고 있는 사람의 생사여탈권을 가지게 될 정도로 심각한 문제가 있는 것이다. 그러므로, 이러한 생활환경에 직접적인 영향을 주는 전자기기의 보안은 매우 중요한 것으로 판단된다. 미래에 우리의 생활을 가장 많은 부분 담당할 사물인터넷도 마찬가지이다. 우리의 생활과 강하게 연관되어 있고, 그러므로 보안이 가장 주요한 요인이 된다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:17:47 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 전자 제어의 세계인 미래, 그 보안의 위협" href="http://blog.morgan.kr/blog/jeonja-jeeoyi-segyein-mirae-geu-boanyi-wihyeob/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>양자들의 트랜지스터와 핫 캐리어 효과
</h2>
</header>
<div class="entry-content">
<p>트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 수 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.
단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:09:53 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 양자들의 트랜지스터와 핫 캐리어 효과" href="http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>인생 두번째 실패. 두번째 대학탈락.
</h2>
</header>
<div class="entry-content">
<p>내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.
내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 ‘불합격’. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.
내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.
바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-23 08:52:59 &#43;0000 UTC&#39;&gt;Oct 23, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 인생 두번째 실패. 두번째 대학탈락." href="http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>나는 무엇을 하고 있는걸까
</h2>
</header>
<div class="entry-content">
<p>프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C&#43;&#43;에 관심을 가졌고, 왜 C로 코딩하는데 C&#43;&#43;를 써야하는지 의문을 가지고 C&#43;&#43;을 공부했다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-23 08:52:15 &#43;0000 UTC&#39;&gt;Oct 23, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 나는 무엇을 하고 있는걸까" href="http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>학교에서 했던 프로젝트들..
</h2>
</header>
<div class="entry-content">
<p> 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 </p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-23 08:51:44 &#43;0000 UTC&#39;&gt;Oct 23, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 학교에서 했던 프로젝트들.." href="http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>개인정보.. Privacy..
</h2>
</header>
<div class="entry-content">
<p>나는 구글이 싫었다.
구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-23 08:31:52 &#43;0000 UTC&#39;&gt;Oct 23, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 개인정보.. Privacy.." href="http://blog.morgan.kr/blog/gaeinjeongbo-privacy/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>데이터센터
</h2>
</header>
<div class="entry-content">
<p>구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 수 있는 데이터로 가공하기 위해 필요한 수없이 큰 컴퓨팅 파워를, 큰 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 알 수 있다.
아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-23 08:15:14 &#43;0000 UTC&#39;&gt;Oct 23, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 데이터센터" href="http://blog.morgan.kr/blog/datacenter/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>블로그 글쓰기는 너무 힘들어..
</h2>
</header>
<div class="entry-content">
<p>야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 내 소장을 위해 Ghost &#43; Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만…. 결국 글을 쓰지도 않은 채 달마다 돈만 나가고 있다…
블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-08 05:19:00 &#43;0000 UTC&#39;&gt;Oct 8, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 블로그 글쓰기는 너무 힘들어.." href="http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>나는 무엇을 해야 하는걸까
</h2>
</header>
<div class="entry-content">
<p>대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 그 때는 붙을 줄 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 그 영향을 받아 피를 흘리고 있다.
다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.
오늘까지 자기소개서를 작성했다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-09-11 01:20:00 &#43;0000 UTC&#39;&gt;Sep 11, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 나는 무엇을 해야 하는걸까" href="http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Attitude for criticism
</h2>
</header>
<div class="entry-content">
<p>요즘 우리 학교에 학교를 개혁하겠다는 학생회장이 나타나고 나서부터 친구들이 학교에 대한 여러 가지 불만들을 풀어내기 시작했다. 나도 마찬가지로 학교에 대한 여러 가지 불만사항들이 많았다. 나는 매 학기마다 개정된 학교 교칙이나 규정들을 정독하는 이벤트를 가지는데, 그때마다 항상 ‘아, 학생들이 당연히 너무 불리하다.. 라던가, ‘이 조항은 너무 아닌데, 너무 구시대적인 생각이 아닌가?‘라는 생각이 들기도 한다.
대학을 가야하는 시기라서 여러 학교들의 생활이나 공부방법, 대학 진학 상황들에 대해서 더욱 관심을 가지게 되었다. 특히 전국급 자사고나 타 지역 과학고의 생활과 공부습관?...</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-09-10 07:30:10 &#43;0000 UTC&#39;&gt;Sep 10, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Attitude for criticism" href="http://blog.morgan.kr/blog/attitude-for-criticism/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>시험을 일주일 앞두고
</h2>
</header>
<div class="entry-content">
<p>지금까지 내 인생에서 가장 중요한 시험. 그 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 더 이상 집중을 할 수 없을 것 같다. 이제 이 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 뭘 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 게 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.
몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-06-20 09:23:28 &#43;0000 UTC&#39;&gt;Jun 20, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 시험을 일주일 앞두고" href="http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>나는 무엇을 하고 싶은 걸까..
</h2>
</header>
<div class="entry-content">
<p>나는 개발자가 되고 싶었다. 그래서 나 나름대로 여러가지 언어를 배우기도 했고 컴퓨터 관련된 여러 가지 활동을 하면서 나의 꿈을 키워나간다고 믿었다. 고등학교를 다니면서 외적으로 개인적인 공부도 많이 하고 있고, 이를 바탕으로 진로를 정하려고 했다. 고등학교 3학년이라 앞으로의 진로를 정해야 했고, 이런 저런 고민을 하다 보니 내가 공부했던 것들이, 또 내가 알고 있는 것들이 단순히 빙산의 일각이라는 사실을 깨달았다.
과학고를 다니는 덕에 수학적인 내용을 기본으로 하는 여러가지 컴퓨터 분야에 대해서는 나름 쉽게 공부할 수 있었다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-01-28 06:14:00 &#43;0000 UTC&#39;&gt;Jan 28, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 나는 무엇을 하고 싶은 걸까.." href="http://blog.morgan.kr/blog/what-i-wanted-to-do/"></a>
</article>
</div>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
</body>
</html>

193
public/blog/index.xml Normal file
View File

@ -0,0 +1,193 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Blogs on Morgan&#39;s Blog</title>
<link>http://blog.morgan.kr/blog/</link>
<description>Recent content in Blogs on Morgan&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<lastBuildDate>Mon, 23 Oct 2023 09:45:50 +0000</lastBuildDate><atom:link href="http://blog.morgan.kr/blog/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>미러서버를 운영하면서...</title>
<link>http://blog.morgan.kr/blog/operating-mirroring-server/</link>
<pubDate>Mon, 23 Oct 2023 09:45:50 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/operating-mirroring-server/</guid>
<description>operating-mirroring-server</description>
</item>
<item>
<title>About USB-C and DP Alt Mode.</title>
<link>http://blog.morgan.kr/blog/usb-c-and-dp-alt-mode/</link>
<pubDate>Sat, 06 May 2023 12:55:32 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/usb-c-and-dp-alt-mode/</guid>
<description>Microsoft Surface Laptop 4 &amp;amp; Linux 제가 밖에서도 쓰고 집에서도 사용하는 만능 서피스 랩탑 4를 사용한지 어느새 2년이 넘었습니다. 그 사이에 리퍼도 받고 OS도 여러번 갈아엎기도 하고, 또 제 하드한 작업들을 잘 버텨주기도 한 정말 대단한 랩탑입니다.
특히 3:2의 광활한 세로는 정말 좋아서 다른 비율의 노트북은 이제 사용할 수 없는 몸이 되어버리기도 했습니다. 길이를 측정해보면 13인치 랩탑들과 동일한데, 세로에 5cm정도를 추가한 정도라 타이틀바 하나정도 넓혀주는 셈이라 마음놓고 패널바를 띄어놓고 사용할 수 있습니다.</description>
</item>
<item>
<title>선택실패</title>
<link>http://blog.morgan.kr/blog/2022041406/</link>
<pubDate>Thu, 14 Apr 2022 06:55:25 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/2022041406/</guid>
<description>고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 그 다짐은 물거품이 되었다.
역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다.</description>
</item>
<item>
<title>다른 사람의 집에 산다는 것</title>
<link>http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/</link>
<pubDate>Sat, 09 Apr 2022 04:02:17 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/</guid>
<description>우리 집은 창원이다. 어렸을 때 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.
대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지.</description>
</item>
<item>
<title>고등학교 돌아보기</title>
<link>http://blog.morgan.kr/blog/godeunghaggyo-dolabogi/</link>
<pubDate>Tue, 21 Dec 2021 16:23:55 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/godeunghaggyo-dolabogi/</guid>
<description>2021년을 돌아보며.
2021.12.22
벌써 12월 22일이다. 12월달에는 열심히 살아야지 하던게 어제같은데 벌써 새해가 다가온다. 나는 내년 성인이 되지만, 아직 실감이 안난다. 술담배를 할 수 있는 나이라기 보다는 내 행동에 내가 책임져야 하는 때가 되었다는 게 더 실감이 난다. 대학을 고민하며 내가 앞으로 뭘 하면서 먹고 살아야할지 꽤 오랫동안 고심했는데, 그 결과로 조금 성장한 것 같아 이제와서는 약간 기쁘기도 하고 무섭기도 하면서 슬픈 약간 오묘한 기분이다. 어찌되었든 이제 성인이 되니까 조금 변해야겠다고 다짐하고 있다.</description>
</item>
<item>
<title>대학 입시가 한단계만 남았다.</title>
<link>http://blog.morgan.kr/blog/daehag-ibsiga-handangye-namassda/</link>
<pubDate>Wed, 01 Dec 2021 08:09:52 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/daehag-ibsiga-handangye-namassda/</guid>
<description>대학 입시가 한단계만을 앞두고 있다.
합격자 발표와 등록.
뭐 공부하고 대비해야하는 시험은 다 끝났으니 마음껏 놀고 있지만 마음의 한편에는 아직 불안함이 많이 존재하고 있다. 또 공부와 시험대비라는 정해져 있는 계획만을 12년 동안 따르던 나에게서 갑자기 계획이나 강제성이 사라졌다. 이제부터는 내가 무엇을 할 것인지를 나 혼자서 알아서 결정해야 하고 또한 그 책임도 내가 져야할 것이다. 예를 들어 늦게자도 누군가 깨워주지 않는다는 것에서 그것을 처음으로 느꼈다.
지금 하고싶은 것도 없다. 무언가 해야하는 것도 딱히 없다.</description>
</item>
<item>
<title>전자 제어의 세계인 미래, 그 보안의 위협</title>
<link>http://blog.morgan.kr/blog/jeonja-jeeoyi-segyein-mirae-geu-boanyi-wihyeob/</link>
<pubDate>Sat, 30 Oct 2021 07:17:47 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/jeonja-jeeoyi-segyein-mirae-geu-boanyi-wihyeob/</guid>
<description>미래 사회에는 전기자동차와 자율주행 자동차가 성하게 유행할 것이다. 사람 운전자의 역할이 거의 축소되고, AI나 전자적으로 제어될 것인데, 지금도 많이 일어나고 있는 논란은 바로 보안이다. 만약 자율주행 자동차가 해킹을 당하게 된다면 어떨까? 해커는 자동차에 타고 있는 사람의 생사여탈권을 가지게 될 정도로 심각한 문제가 있는 것이다. 그러므로, 이러한 생활환경에 직접적인 영향을 주는 전자기기의 보안은 매우 중요한 것으로 판단된다. 미래에 우리의 생활을 가장 많은 부분 담당할 사물인터넷도 마찬가지이다. 우리의 생활과 강하게 연관되어 있고, 그러므로 보안이 가장 주요한 요인이 된다.</description>
</item>
<item>
<title>양자들의 트랜지스터와 핫 캐리어 효과</title>
<link>http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/</link>
<pubDate>Sat, 30 Oct 2021 07:09:53 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/</guid>
<description>트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 수 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.
단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다.</description>
</item>
<item>
<title>인생 두번째 실패. 두번째 대학탈락.</title>
<link>http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/</link>
<pubDate>Sat, 23 Oct 2021 08:52:59 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/</guid>
<description>내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.
내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 &amp;lsquo;불합격&amp;rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.
내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.
바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다.</description>
</item>
<item>
<title>나는 무엇을 하고 있는걸까</title>
<link>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/</link>
<pubDate>Sat, 23 Oct 2021 08:52:15 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/</guid>
<description>프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C++에 관심을 가졌고, 왜 C로 코딩하는데 C++를 써야하는지 의문을 가지고 C++을 공부했다.</description>
</item>
<item>
<title>학교에서 했던 프로젝트들..</title>
<link>http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/</link>
<pubDate>Sat, 23 Oct 2021 08:51:44 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/</guid>
<description> 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 </description>
</item>
<item>
<title>개인정보.. Privacy..</title>
<link>http://blog.morgan.kr/blog/gaeinjeongbo-privacy/</link>
<pubDate>Sat, 23 Oct 2021 08:31:52 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/gaeinjeongbo-privacy/</guid>
<description>나는 구글이 싫었다.
구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다.</description>
</item>
<item>
<title>데이터센터</title>
<link>http://blog.morgan.kr/blog/datacenter/</link>
<pubDate>Sat, 23 Oct 2021 08:15:14 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/datacenter/</guid>
<description>구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 수 있는 데이터로 가공하기 위해 필요한 수없이 큰 컴퓨팅 파워를, 큰 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 알 수 있다.
아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다.</description>
</item>
<item>
<title>블로그 글쓰기는 너무 힘들어..</title>
<link>http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/</link>
<pubDate>Fri, 08 Oct 2021 05:19:00 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/</guid>
<description>야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 내 소장을 위해 Ghost + Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만&amp;hellip;. 결국 글을 쓰지도 않은 채 달마다 돈만 나가고 있다&amp;hellip;
블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다.</description>
</item>
<item>
<title>나는 무엇을 해야 하는걸까</title>
<link>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/</link>
<pubDate>Sat, 11 Sep 2021 01:20:00 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/</guid>
<description>대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 그 때는 붙을 줄 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 그 영향을 받아 피를 흘리고 있다.
다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.
오늘까지 자기소개서를 작성했다.</description>
</item>
<item>
<title>Attitude for criticism</title>
<link>http://blog.morgan.kr/blog/attitude-for-criticism/</link>
<pubDate>Fri, 10 Sep 2021 07:30:10 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/attitude-for-criticism/</guid>
<description>요즘 우리 학교에 학교를 개혁하겠다는 학생회장이 나타나고 나서부터 친구들이 학교에 대한 여러 가지 불만들을 풀어내기 시작했다. 나도 마찬가지로 학교에 대한 여러 가지 불만사항들이 많았다. 나는 매 학기마다 개정된 학교 교칙이나 규정들을 정독하는 이벤트를 가지는데, 그때마다 항상 &amp;lsquo;아, 학생들이 당연히 너무 불리하다..&amp;rsquo; 라던가, &amp;lsquo;이 조항은 너무 아닌데, 너무 구시대적인 생각이 아닌가?&amp;lsquo;라는 생각이 들기도 한다.
대학을 가야하는 시기라서 여러 학교들의 생활이나 공부방법, 대학 진학 상황들에 대해서 더욱 관심을 가지게 되었다. 특히 전국급 자사고나 타 지역 과학고의 생활과 공부습관?</description>
</item>
<item>
<title>시험을 일주일 앞두고</title>
<link>http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/</link>
<pubDate>Sun, 20 Jun 2021 09:23:28 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/</guid>
<description>지금까지 내 인생에서 가장 중요한 시험. 그 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 더 이상 집중을 할 수 없을 것 같다. 이제 이 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 뭘 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 게 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.
몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다.</description>
</item>
<item>
<title>나는 무엇을 하고 싶은 걸까..</title>
<link>http://blog.morgan.kr/blog/what-i-wanted-to-do/</link>
<pubDate>Thu, 28 Jan 2021 06:14:00 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/what-i-wanted-to-do/</guid>
<description>나는 개발자가 되고 싶었다. 그래서 나 나름대로 여러가지 언어를 배우기도 했고 컴퓨터 관련된 여러 가지 활동을 하면서 나의 꿈을 키워나간다고 믿었다. 고등학교를 다니면서 외적으로 개인적인 공부도 많이 하고 있고, 이를 바탕으로 진로를 정하려고 했다. 고등학교 3학년이라 앞으로의 진로를 정해야 했고, 이런 저런 고민을 하다 보니 내가 공부했던 것들이, 또 내가 알고 있는 것들이 단순히 빙산의 일각이라는 사실을 깨달았다.
과학고를 다니는 덕에 수학적인 내용을 기본으로 하는 여러가지 컴퓨터 분야에 대해서는 나름 쉽게 공부할 수 있었다.</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,288 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>인생 두번째 실패. 두번째 대학탈락. | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.
내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 &lsquo;불합격&rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.
내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.
바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="인생 두번째 실패. 두번째 대학탈락." />
<meta property="og:description" content="내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.
내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 &lsquo;불합격&rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.
내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.
바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-23T08:52:59+00:00" />
<meta property="article:modified_time" content="2021-10-23T08:52:59+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="인생 두번째 실패. 두번째 대학탈락."/>
<meta name="twitter:description" content="내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.
내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 &lsquo;불합격&rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.
내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.
바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "인생 두번째 실패. 두번째 대학탈락.",
"item": "http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "인생 두번째 실패. 두번째 대학탈락.",
"name": "인생 두번째 실패. 두번째 대학탈락.",
"description": "내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.\n내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 \u0026lsquo;불합격\u0026rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.\n내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.\n바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다.",
"keywords": [
],
"articleBody": "내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.\n내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 ‘불합격’. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.\n내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.\n바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다.\n할 수 있는 모든 것을 해보자. 후회없이.\n",
"wordCount" : "85",
"inLanguage": "en",
"datePublished": "2021-10-23T08:52:59Z",
"dateModified": "2021-10-23T08:52:59Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
인생 두번째 실패. 두번째 대학탈락.
</h1>
<div class="post-meta"><span title='2021-10-23 08:52:59 &#43;0000 UTC'>
Oct 23, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.</p>
<p>내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 &lsquo;불합격&rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.</p>
<p>내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.</p>
<p>바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다.</p>
<p>할 수 있는 모든 것을 해보자. 후회없이.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>http://blog.morgan.kr/blog/</title>
<link rel="canonical" href="http://blog.morgan.kr/blog/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://blog.morgan.kr/blog/">
</head>
</html>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,292 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>양자들의 트랜지스터와 핫 캐리어 효과 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.
단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="양자들의 트랜지스터와 핫 캐리어 효과" />
<meta property="og:description" content="트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.
단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-30T07:09:53+00:00" />
<meta property="article:modified_time" content="2021-10-30T07:09:53+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="양자들의 트랜지스터와 핫 캐리어 효과"/>
<meta name="twitter:description" content="트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.
단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "양자들의 트랜지스터와 핫 캐리어 효과",
"item": "http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "양자들의 트랜지스터와 핫 캐리어 효과",
"name": "양자들의 트랜지스터와 핫 캐리어 효과",
"description": "트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 수 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.\n단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다.",
"keywords": [
],
"articleBody": "트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 수 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.\n단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다. 이를 통해 큐비트의 역할을 할 수 있는 단일한 원자를 생성해 내고, 이 단일 원자들이 스위칭 작용을 하는 주체가 된다. 단일 원자 트랜지스터는 실온에서 작동하고, 적은 숫자의 원자만을 이용하기 때문에 스위칭에 필요한 전력의 양도 매우 적다.\n단일원자 트랜지스터는 실리콘 표면의 인 원자와 반응시키는 방법이 이용된다. 원자가 정해진 위치에 고정되어 있고 각각의 원자가 전자 주개 또는 스위쳐로 작용하여 전자 하나하나의 흐름을 제어하게 된다.\n양자 트랜지스터 양자 트랜지스터는 기존의 MOS 트랜지스터와 비슷하게 행동하지만, 중간 p,N형 반도체가 하던 채널 형성과 전자 이동 제어를 나노 양자점이 전담하게 된다.\n핫 캐리어 효과 반도체 공정이 작아지면서 트랜지스터 채널이 소형화되었고, 이에 따라 채널의 길이가 줄어들게 되었다. 채널의 길이가 줄어들면서 전자의 튐 현상과 전자 제어가 힘들어진다는 한계점이 있다. 그 중 핫 캐리어 효과는 Drain전압은 일정한데 비해 짧아진 거리에 의해 전기장이 매우 커지는 효과가 일어나고, 평소보다 훨씬 가속된 전자들의 운동에너지에 의해 원래라면 넘어갈 수 없던 Oxide 전계를 넘어서게 되면서 규소 원자와 충돌하여 갇히게 된다. 이를 핫 캐리어 효과, 빠른 전자에 의한 주입 현상이라고 한다. 이에 의해 예측한 것과는 더 적은 전하가 이동하게 되고, 전류가 불안정하고 수율이 떨어지게 된다.\n핫 캐리어 효과를 최소한으로 하고 이를 방지하기 위해서는 Oxide 게이트와 접해있는 부분의 실리콘을 특수하게 덜 도핑하는 방법이 있다. 전류 손실의 손해를 보지만 핫 캐리어 효과에 의한 손실보다는 훨씬 적다. 원래는 전자의 운동을 최소한으로 방해하기 위해 저항이 낮도록 도핑하는데, Oxide에 접해있는 부분의 저항을 특별히 더 높게 도핑하여 핫 캐리어의 운동을 방해하는 효과를 준다.\n",
"wordCount" : "294",
"inLanguage": "en",
"datePublished": "2021-10-30T07:09:53Z",
"dateModified": "2021-10-30T07:09:53Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
양자들의 트랜지스터와 핫 캐리어 효과
</h1>
<div class="post-meta"><span title='2021-10-30 07:09:53 &#43;0000 UTC'>
Oct 30, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 수 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.</p>
<ol>
<li>단일원자 트랜지스터</li>
</ol>
<p>단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다. 이를 통해 큐비트의 역할을 할 수 있는 단일한 원자를 생성해 내고, 이 단일 원자들이 스위칭 작용을 하는 주체가 된다. 단일 원자 트랜지스터는 실온에서 작동하고, 적은 숫자의 원자만을 이용하기 때문에 스위칭에 필요한 전력의 양도 매우 적다.</p>
<p>단일원자 트랜지스터는 실리콘 표면의 인 원자와 반응시키는 방법이 이용된다. 원자가 정해진 위치에 고정되어 있고 각각의 원자가 전자 주개 또는 스위쳐로 작용하여 전자 하나하나의 흐름을 제어하게 된다.</p>
<ol start="2">
<li>양자 트랜지스터</li>
</ol>
<p>양자 트랜지스터는 기존의 MOS 트랜지스터와 비슷하게 행동하지만, 중간 p,N형 반도체가 하던 채널 형성과 전자 이동 제어를 나노 양자점이 전담하게 된다.</p>
<ol start="3">
<li>핫 캐리어 효과</li>
</ol>
<p>반도체 공정이 작아지면서 트랜지스터 채널이 소형화되었고, 이에 따라 채널의 길이가 줄어들게 되었다. 채널의 길이가 줄어들면서 전자의 튐 현상과 전자 제어가 힘들어진다는 한계점이 있다. 그 중 핫 캐리어 효과는 Drain전압은 일정한데 비해 짧아진 거리에 의해 전기장이 매우 커지는 효과가 일어나고, 평소보다 훨씬 가속된 전자들의 운동에너지에 의해 원래라면 넘어갈 수 없던 Oxide 전계를 넘어서게 되면서 규소 원자와 충돌하여 갇히게 된다. 이를 핫 캐리어 효과, 빠른 전자에 의한 주입 현상이라고 한다. 이에 의해 예측한 것과는 더 적은 전하가 이동하게 되고, 전류가 불안정하고 수율이 떨어지게 된다.</p>
<p>핫 캐리어 효과를 최소한으로 하고 이를 방지하기 위해서는 Oxide 게이트와 접해있는 부분의 실리콘을 특수하게 덜 도핑하는 방법이 있다. 전류 손실의 손해를 보지만 핫 캐리어 효과에 의한 손실보다는 훨씬 적다. 원래는 전자의 운동을 최소한으로 방해하기 위해 저항이 낮도록 도핑하는데, Oxide에 접해있는 부분의 저항을 특별히 더 높게 도핑하여 핫 캐리어의 운동을 방해하는 효과를 준다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,278 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>나는 무엇을 하고 있는걸까 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C&#43;&#43;에 관심을 가졌고, 왜 C로 코딩하는데 C&#43;&#43;를 써야하는지 의문을 가지고 C&#43;&#43;을 공부했다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="나는 무엇을 하고 있는걸까" />
<meta property="og:description" content="프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C&#43;&#43;에 관심을 가졌고, 왜 C로 코딩하는데 C&#43;&#43;를 써야하는지 의문을 가지고 C&#43;&#43;을 공부했다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-10-23T08:52:15+00:00" />
<meta property="article:modified_time" content="2021-10-23T08:52:15+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="나는 무엇을 하고 있는걸까"/>
<meta name="twitter:description" content="프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C&#43;&#43;에 관심을 가졌고, 왜 C로 코딩하는데 C&#43;&#43;를 써야하는지 의문을 가지고 C&#43;&#43;을 공부했다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "나는 무엇을 하고 있는걸까",
"item": "http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "나는 무엇을 하고 있는걸까",
"name": "나는 무엇을 하고 있는걸까",
"description": "프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C++에 관심을 가졌고, 왜 C로 코딩하는데 C++를 써야하는지 의문을 가지고 C++을 공부했다.",
"keywords": [
],
"articleBody": "프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C++에 관심을 가졌고, 왜 C로 코딩하는데 C++를 써야하는지 의문을 가지고 C++을 공부했다. C++이 완전히 다르다는 것에 충격을 먹었고, 이후 비슷한 객체지향에 대해 알아보며 Python에 입문했다. C에 비해 너무 쉬운 코딩과 너무 간단한 개발에 충격을 먹었고, PS하는데만 쓸 수 있던 C와는 다르게 다양한 분야에 접목하기 너무나도 쉬운 Python은 나를 개발 세계에 빠뜨렸다.\nPython의 다양한 모듈을 사용하며 Requests와 같은 웹을 다루는 모듈을 쓰며 대체 웹은 어떤 구조일까 의문이 들어 네트워킹이나 HTTP, HTTPS에 대해 공부했고, 이런 것들을 응용해 나가며 실질적인 코딩에 가깝게 가면서도 주어진 기능 외로 작동하게 만드는 것에 맛을 들려 해킹에 대해 점점 흥미를 가지기 시작했다. Python은 빠르게 무언가 기능하는 하나의 완성품을 만들기 너무 적당했고, 실행했을 때 원하는 대로 작동했을 때의 쾌감에 빠져버렸다. 이후 생각나는 아이디어란 아이디어는 다 파이썬으로 구현했고, 나 자신의 아이디어 뿐 아니라 주변의 아이디어를 신경쓰게 되었고, 그게 학교 서비스 구현 프로젝트로 이어졌다. 파이썬으로 간단하게 했던 것들을 친구들이 노가다로 하는 모습을 보고 아 저거 파이썬으로 할 수 있겠는데라고 생각했고, 그렇게 만들어본게 수십개는 될 것이다. 한편으로는 내 호기심에 딱 알맞게 점점 깊은 곳으로 내려가고 있었다. 원리의 원리를 계속 파고들며 컴퓨터 구조까지 내려갔고, 내려가면서 다른 땅굴을 파는 게 너무 재미있었다. 해킹이.\n결국 반도체까지 내려가서 더 이상 이해할 수 없을 때까지 내려갔고, 해킹은 더 이상 내가 알던 해킹이라는 학문이 아니게 다 통합되었다. 해킹을 할 수 있던 원인중 대부분 그 아랫단계에서 기초된 버그였고, 아래로 내려갈수록 하나로 합쳐졌다. 그래서 내가 읽은 책을 살펴보면 다양한 분야가 많이 있지만 다 상하관계로 얽혀있음을 알 수 있다. 네트워크에서 기초해서 TCP/IP로, 거기서 물리계층인 데이터 통신까지, 그리고 신호처리와 신호를 처리하는 소자까지 이어져 있다.\n관심사에 따라 공부해서 재미있게 공부했고, 관심사에 따라 공부하니 꼬리물기 공부가 가능했다. 서로 얽혀서 각자의 이해를 도왔고, 서로의 흥미를 돋구었다. 그냥 ‘컴퓨터’라는 분야 하나가 너무 재미있었고, 나에게는 천직이라고 생각됐다. 전체가 재미있으니 가장 기초인 ‘반도체’나 ‘컴퓨터 구조’가 자연스럽게 내 진로이자, 내 주요 관심사가 되었다.\n",
"wordCount" : "348",
"inLanguage": "en",
"datePublished": "2021-10-23T08:52:15Z",
"dateModified": "2021-10-23T08:52:15Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
나는 무엇을 하고 있는걸까
</h1>
<div class="post-meta"><span title='2021-10-23 08:52:15 &#43;0000 UTC'>
Oct 23, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C++에 관심을 가졌고, 왜 C로 코딩하는데 C++를 써야하는지 의문을 가지고 C++을 공부했다. C++이 완전히 다르다는 것에 충격을 먹었고, 이후 비슷한 객체지향에 대해 알아보며 Python에 입문했다. C에 비해 너무 쉬운 코딩과 너무 간단한 개발에 충격을 먹었고, PS하는데만 쓸 수 있던 C와는 다르게 다양한 분야에 접목하기 너무나도 쉬운 Python은 나를 개발 세계에 빠뜨렸다.</p>
<p>Python의 다양한 모듈을 사용하며 Requests와 같은 웹을 다루는 모듈을 쓰며 대체 웹은 어떤 구조일까 의문이 들어 네트워킹이나 HTTP, HTTPS에 대해 공부했고, 이런 것들을 응용해 나가며 실질적인 코딩에 가깝게 가면서도 주어진 기능 외로 작동하게 만드는 것에 맛을 들려 해킹에 대해 점점 흥미를 가지기 시작했다. Python은 빠르게 무언가 기능하는 하나의 완성품을 만들기 너무 적당했고, 실행했을 때 원하는 대로 작동했을 때의 쾌감에 빠져버렸다. 이후 생각나는 아이디어란 아이디어는 다 파이썬으로 구현했고, 나 자신의 아이디어 뿐 아니라 주변의 아이디어를 신경쓰게 되었고, 그게 학교 서비스 구현 프로젝트로 이어졌다. 파이썬으로 간단하게 했던 것들을 친구들이 노가다로 하는 모습을 보고 아 저거 파이썬으로 할 수 있겠는데라고 생각했고, 그렇게 만들어본게 수십개는 될 것이다. 한편으로는 내 호기심에 딱 알맞게 점점 깊은 곳으로 내려가고 있었다. 원리의 원리를 계속 파고들며 컴퓨터 구조까지 내려갔고, 내려가면서 다른 땅굴을 파는 게 너무 재미있었다. 해킹이.</p>
<p>결국 반도체까지 내려가서 더 이상 이해할 수 없을 때까지 내려갔고, 해킹은 더 이상 내가 알던 해킹이라는 학문이 아니게 다 통합되었다. 해킹을 할 수 있던 원인중 대부분 그 아랫단계에서 기초된 버그였고, 아래로 내려갈수록 하나로 합쳐졌다. 그래서 내가 읽은 책을 살펴보면 다양한 분야가 많이 있지만 다 상하관계로 얽혀있음을 알 수 있다. 네트워크에서 기초해서 TCP/IP로, 거기서 물리계층인 데이터 통신까지, 그리고 신호처리와 신호를 처리하는 소자까지 이어져 있다.</p>
<p>관심사에 따라 공부해서 재미있게 공부했고, 관심사에 따라 공부하니 꼬리물기 공부가 가능했다. 서로 얽혀서 각자의 이해를 도왔고, 서로의 흥미를 돋구었다. 그냥 &lsquo;컴퓨터&rsquo;라는 분야 하나가 너무 재미있었고, 나에게는 천직이라고 생각됐다. 전체가 재미있으니 가장 기초인 &lsquo;반도체&rsquo;&lsquo;컴퓨터 구조&rsquo;가 자연스럽게 내 진로이자, 내 주요 관심사가 되었다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,293 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>나는 무엇을 해야 하는걸까 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 때는 붙을 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 영향을 받아 피를 흘리고 있다.
다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.
오늘까지 자기소개서를 작성했다.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="나는 무엇을 해야 하는걸까" />
<meta property="og:description" content="대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 때는 붙을 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 영향을 받아 피를 흘리고 있다.
다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.
오늘까지 자기소개서를 작성했다." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2021-09-11T01:20:00+00:00" />
<meta property="article:modified_time" content="2021-09-11T01:20:00+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="나는 무엇을 해야 하는걸까"/>
<meta name="twitter:description" content="대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 때는 붙을 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 영향을 받아 피를 흘리고 있다.
다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.
오늘까지 자기소개서를 작성했다."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "나는 무엇을 해야 하는걸까",
"item": "http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "나는 무엇을 해야 하는걸까",
"name": "나는 무엇을 해야 하는걸까",
"description": "대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 그 때는 붙을 줄 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 그 영향을 받아 피를 흘리고 있다.\n다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.\n오늘까지 자기소개서를 작성했다.",
"keywords": [
],
"articleBody": "대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 그 때는 붙을 줄 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 그 영향을 받아 피를 흘리고 있다.\n다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.\n오늘까지 자기소개서를 작성했다. 3번 대학별 지원동기를 쓰면서 계속 내가 하고 싶은 것이 무엇인지 내가 지금까지 무엇을 했는지에 대해 고민을 했다.\n내가 항상 하던 생각. 무엇을 공부하던지 간에 항상 들었던 생각. 내가 무엇을 하던 나보다 잘하는 사람은 존재하구나. 특별한 존재가 되기에는 나는 너무나 작구나. 자신감이 점점 떨어지는 듯한 느낌이 들었다. 그래서 나는 나를 특별하게 만드는, 내가 돋보일 수 있도록 해주는 것들을 공부하자고 생각했다.\n나는 마구잡이로 공부했다. 필요할 때에만 공부했고, 원하는 것만 공부했다. 그래서 그걸 공부라고 해도 될 지 모르겠다. 일단 내 기억에서는 공부가 아니다. 나는 컴퓨터 공부를 취미정도로만 생각했지 공부라고는 생각하지 않았다. 그래서 항상 뭔가 컴퓨터를 공부하면 죄책감이 들고 공부한 것 처럼 느껴지지 않았다. 물론 재미있게 한 덕분에 지식은 방대해 졌지만..\nFPGA에 대해 공부할 때에도 마찬가지였다. 공부였지만 내 마음 속에서는 공부가 아니라 딴짓으로 박혀있었다. 그래서 원하는 것을 알 수 있고 재미있게 할 수 있었지만 자세히 알고 집중해서 했다고는 못한다. FPGA를 공부했지만, 알고는 있지만 공부했다고는 할 수 없어서 결국 안한거나 마찬가지인 것이 되어버렸다. 이미 한번 공부한 내용이지만..\n그래서 자소서를 쓸 때 고민이 되었다. 주위 친구들은 다들 수과학 내용을 위주로 썼는데, 나는 온통 다 반도체, 컴퓨터 연구 공부했던 내용, 나한테는 딴짓했던 내용이기 때문이다. 나한테는 논 것을 써내려가는 느낌이었다. 물론 쓰고 나서 객관적으로 바라보면 꽤 볼만한 자소서가 되어있었지만, 처음부터 써내려갈때에는 많이 괴롭고 고민되었다.\n아직도 컴퓨터 공부는 뭔지 잘 모르겠다. 하지만 그게 정말 재미있고, 내 적성에 100% 맞다는 것만은 알고 있다. 앞으로는 컴퓨터에 대해서 제대로 공부하고 싶다. 그것은 고등학생 신분으로는 내 맘속에서 딴짓이라고 정의되어 버리므로, 일단은 대학을 가야 하구나 싶다.\n야망이라는 말이 있다. 나는 항상 내 꿈을 말할 때 표현의 부족함을 느꼈다. 꿈이라고 하기에는 지극히 개인적이고 꿈보다 훨씬 이루고 싶고, 인생을 움직이는 원동력과도 비슷한 거니까. 물론 꿈을 사람마다 다르게 해석할 수 있다. 그게 꿈 아니야? 라고 할 수도 있다. 하지만 나에게는 꿈보다 훨씬 이루고 싶은 것이 있다. 컴퓨터라는 기계의 역사에 내 이름을 크게 남기는 것. 내가 생각했을 때는 꿈보다는 야망에 훨씬 가까운 내용이었다. 나는 컴퓨터의 패러다임을 바꾸고 싶다. 어쩌면 Linus Torvalds처럼, 혹은 벨 연구소와 IBM 연구소의 많은 사람들 처럼. 내 이름을 직접적을 남기지 않아도 내 작품이 두고두고 무언가의 기반이 되었으면 좋겠다. 내 작품을 컴퓨터 역사에 깊이 뿌리박히게 하는 것. 그게 내 야망이자 꿈인것 같다.\n내 야망을 이루기 위해서는 컴퓨터를 잘 알아야 할테지.. 컴퓨터라는 기계를 역사부터 원리까지 꿰뚫고 있어야 하겠지. 그것을 위한 여정은 매우 길고 또 험난하겠지. 하지만 운이 좋았다. 나는 그 과정이 정말로 재밌다. 놀지 말고 쉬지 말라고 해도 할 수 있다. 그게 내가 그것을 딴짓이라고 생각한 원인이니까.\n그게 정말 강한 원동력이었던 것 같다. 컴퓨터 공부를 놀이라고 생각했던 것. 하지만 앞으로는 “공부”를 해야 할 것 같다. 슬금슬금 한계가 다가오고 있기도 했고, 무엇보다 그것만 하면서 살 수는 없으니까. 지금으로써 내가 할 수 있는 것은 이 마음을 잊지 않는 것. 꾸준히 생각하는 것. 기반 지식을 열심히 쌓는 것.\n그리고 대학교 진학..\n",
"wordCount" : "502",
"inLanguage": "en",
"datePublished": "2021-09-11T01:20:00Z",
"dateModified": "2021-09-11T01:20:00Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
나는 무엇을 해야 하는걸까
</h1>
<div class="post-meta"><span title='2021-09-11 01:20:00 &#43;0000 UTC'>
Sep 11, 2021
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><h2 id="대학-탈락-이후">대학 탈락 이후<a hidden class="anchor" aria-hidden="true" href="#대학-탈락-이후">#</a></h2>
<p>나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 그 때는 붙을 줄 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 그 영향을 받아 피를 흘리고 있다.</p>
<p>다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.</p>
<p>오늘까지 자기소개서를 작성했다. 3번 대학별 지원동기를 쓰면서 계속 내가 하고 싶은 것이 무엇인지 내가 지금까지 무엇을 했는지에 대해 고민을 했다.</p>
<p>내가 항상 하던 생각. 무엇을 공부하던지 간에 항상 들었던 생각. 내가 무엇을 하던 나보다 잘하는 사람은 존재하구나. 특별한 존재가 되기에는 나는 너무나 작구나. 자신감이 점점 떨어지는 듯한 느낌이 들었다. 그래서 나는 나를 특별하게 만드는, 내가 돋보일 수 있도록 해주는 것들을 공부하자고 생각했다.</p>
<p>나는 마구잡이로 공부했다. 필요할 때에만 공부했고, 원하는 것만 공부했다. 그래서 그걸 공부라고 해도 될 지 모르겠다. 일단 내 기억에서는 공부가 아니다. 나는 컴퓨터 공부를 취미정도로만 생각했지 공부라고는 생각하지 않았다. 그래서 항상 뭔가 컴퓨터를 공부하면 죄책감이 들고 공부한 것 처럼 느껴지지 않았다. 물론 재미있게 한 덕분에 지식은 방대해 졌지만..</p>
<p>FPGA에 대해 공부할 때에도 마찬가지였다. 공부였지만 내 마음 속에서는 공부가 아니라 딴짓으로 박혀있었다. 그래서 원하는 것을 알 수 있고 재미있게 할 수 있었지만 자세히 알고 집중해서 했다고는 못한다. FPGA를 공부했지만, 알고는 있지만 공부했다고는 할 수 없어서 결국 안한거나 마찬가지인 것이 되어버렸다. 이미 한번 공부한 내용이지만..</p>
<p>그래서 자소서를 쓸 때 고민이 되었다. 주위 친구들은 다들 수과학 내용을 위주로 썼는데, 나는 온통 다 반도체, 컴퓨터 연구 공부했던 내용, 나한테는 딴짓했던 내용이기 때문이다. 나한테는 논 것을 써내려가는 느낌이었다. 물론 쓰고 나서 객관적으로 바라보면 꽤 볼만한 자소서가 되어있었지만, 처음부터 써내려갈때에는 많이 괴롭고 고민되었다.</p>
<p>아직도 컴퓨터 공부는 뭔지 잘 모르겠다. 하지만 그게 정말 재미있고, 내 적성에 100% 맞다는 것만은 알고 있다. 앞으로는 컴퓨터에 대해서 제대로 공부하고 싶다. 그것은 고등학생 신분으로는 내 맘속에서 딴짓이라고 정의되어 버리므로, 일단은 대학을 가야 하구나 싶다.</p>
<p>야망이라는 말이 있다. 나는 항상 내 꿈을 말할 때 표현의 부족함을 느꼈다. 꿈이라고 하기에는 지극히 개인적이고 꿈보다 훨씬 이루고 싶고, 인생을 움직이는 원동력과도 비슷한 거니까. 물론 꿈을 사람마다 다르게 해석할 수 있다. 그게 꿈 아니야? 라고 할 수도 있다. 하지만 나에게는 꿈보다 훨씬 이루고 싶은 것이 있다. 컴퓨터라는 기계의 역사에 내 이름을 크게 남기는 것. 내가 생각했을 때는 꿈보다는 야망에 훨씬 가까운 내용이었다. 나는 컴퓨터의 패러다임을 바꾸고 싶다. 어쩌면 <em>Linus Torvalds</em>처럼, 혹은 벨 연구소와 IBM 연구소의 많은 사람들 처럼. 내 이름을 직접적을 남기지 않아도 내 작품이 두고두고 무언가의 기반이 되었으면 좋겠다. 내 작품을 컴퓨터 역사에 깊이 뿌리박히게 하는 것. 그게 내 야망이자 꿈인것 같다.</p>
<p>내 야망을 이루기 위해서는 컴퓨터를 잘 알아야 할테지.. 컴퓨터라는 기계를 역사부터 원리까지 꿰뚫고 있어야 하겠지. 그것을 위한 여정은 매우 길고 또 험난하겠지. 하지만 운이 좋았다. 나는 그 과정이 정말로 재밌다. 놀지 말고 쉬지 말라고 해도 할 수 있다. 그게 내가 그것을 딴짓이라고 생각한 원인이니까.</p>
<p>그게 정말 강한 원동력이었던 것 같다. 컴퓨터 공부를 놀이라고 생각했던 것. 하지만 앞으로는 “공부”를 해야 할 것 같다. 슬금슬금 한계가 다가오고 있기도 했고, 무엇보다 그것만 하면서 살 수는 없으니까. 지금으로써 내가 할 수 있는 것은 이 마음을 잊지 않는 것. 꾸준히 생각하는 것. 기반 지식을 열심히 쌓는 것.</p>
<p>그리고 대학교 진학..</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,286 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>다른 사람의 집에 산다는 것 | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="우리 집은 창원이다. 어렸을 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.
대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지.">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG&#43;9vmJ0cTS&#43;ovo0FeA="
onload="hljs.initHighlightingOnLoad();"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="다른 사람의 집에 산다는 것" />
<meta property="og:description" content="우리 집은 창원이다. 어렸을 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.
대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지." />
<meta property="og:type" content="article" />
<meta property="og:url" content="http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/" /><meta property="article:section" content="blog" />
<meta property="article:published_time" content="2022-04-09T04:02:17+00:00" />
<meta property="article:modified_time" content="2022-04-09T04:02:17+00:00" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="다른 사람의 집에 산다는 것"/>
<meta name="twitter:description" content="우리 집은 창원이다. 어렸을 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.
대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지."/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Blogs",
"item": "http://blog.morgan.kr/blog/"
},
{
"@type": "ListItem",
"position": 3 ,
"name": "다른 사람의 집에 산다는 것",
"item": "http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/"
}
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BlogPosting",
"headline": "다른 사람의 집에 산다는 것",
"name": "다른 사람의 집에 산다는 것",
"description": "우리 집은 창원이다. 어렸을 때 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.\n대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지.",
"keywords": [
],
"articleBody": "우리 집은 창원이다. 어렸을 때 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.\n대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지. 고등학교때와는 차원을 달리할 정도로 극악의 기숙사였다. 그래서 그런지, 공용 공간의 위생을 병적으로 집착하는 나에게는 너무 스트레스였다. 여기저기 남이 쓰던 쓰레기나 껌같은 흔적들이 방 곳곳에 있었고, 애초에 너무 더러웠다. 그래서 결국 기숙사에일주일을 못 버티고도망쳐 나왔다. 그렇게 조부모님 댁에 얹혀 살기 시작했고, 1시간의 통학생활이 시작되었다.\n처음에 통학을 했을 때에는 학교를 가기만 하는게 너무 힘들었고, 어떻게 이렇게 힘들게 학교를다니지라는 걱정만 있었지만, 막상 한달째 통학을 하고 나니 일상 운동도 되고 기숙사와는 달리 정신을 빠릿빠릿하게 세우고 생활을 하게되는 장점도 많았다. 특히 강제적으로라도 기상시간이 앞당겨진다는 것은 일상의 더 빠른 시작을 일으켜 가장 강점이 되었다. 강권의 약속과 술약에서 수월히 빠져나올 수 있는 구실이 된다는 것은 덤.\n원래의 집에서 생활하는 여타 통학과는 달리 나는 조부모님 댁에서 생활을 하니 삶의 제한이 꽤 자유롭다. 통금 시간도 없고, 부모님의 잔소리도 없어(솔직히 이건 필요하다.) 기숙사의 자유도와 비슷하지 않을까 싶다. 하지만 그만큼의 자유에는 할머니 할아버지의 생활도 최대한 배려하고 눈치를 많이 보면서 살아야 한다는 의무가 따른다.\n내가 가장 질색하는 몇가지가 있다. 강박에 가까워 고치기 정말 힘든데다 관련된 사소한 것에도 진짜 엄청난 스트레스를 받는다.\n먼저 바닥에 먼지가 있는 것을 극도로 싫어한다. 발은 항상 깨끗해야 한다. 침대에서 거꾸로 누울때도 걱정없이 잘 수 있을 정도로 발은 청결해야 한다. 하지만 조부모님댁(이하 본가)은 연립주택인데다, 도심에 있어 먼지가 많이 쌓인다. 게다가 청소를 잘 안하신다. 발에 계속 뭔가 달라붙고 먼지가 쌓이고 그것으로 스트레스를 엄청 받았는데, 내가 청소를 하는 것으로 해결되었다. 난 청소를 좋아한다.\n또, 나는 강박이 있어 밥을 남기지를 못한다. 죽을 것 같아도 밀어 넣는다. 그런 강박이 있다. 그래서 평소에는 음식 냄새를 맡으면 토가 쏠린다. 그런것은 문을 닫으면 해결될 수 있다. 하지만 본가의 세탁기는 부엌을 지나 베란다에 있다. 빨래를 해주시고 말리시는 과정에서 음식에 대해서 많은 일들이 일어난다. 첫번째 항목에와 마찬가지로 음식 먼지, 즉 고춧가루 소금이나 음식에 관련된 사소한 찌꺼기들에 엄청난 스트레스를 받는다. 빨래를 가져오시는 과정에서 음식 먼지가 많이 붙는다. 이건 어떻게 해결해야 할지 감이 안온다. 런드리고라고 빨래 대행까지 생각했는데, 도리가 아닌것 같아서 포기했다. 뭔가를 요구하기에는 얹혀 사는 입장이라 너무 불편하다.\n내 방은 아무도 청소하지 않았으면 한다. 사생활 그런 문제는 아니고 그냥 ‘있던 그대로’라는 강박 때문이다. 물건이 나도 모르는 새에 위피가 바뀌어 있으면 사소한 것에도 스트레스를 받는다. 이건 어쩔 수 없는 성격상의 결점이라 부탁드리는 수밖에 없을 것 같다.\n조부모님은 진짜 어려운 관계인 것 같다. 부모님보다는 거리감이 있지만 그 외에서는 가장 가까운 관계이다. 조부모님과 나의 관계는 극단적으로 생각하면 남이지만 사실 소중한 가족이다. 편해진다면 얼마든지 편해질 수 있지만 불편해지면 얼마든지 불편해질 수도 있는것 같다.\n",
"wordCount" : "442",
"inLanguage": "en",
"datePublished": "2022-04-09T04:02:17Z",
"dateModified": "2022-04-09T04:02:17Z",
"author":{
"@type": "Person",
"name": "Me"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/"
},
"publisher": {
"@type": "Organization",
"name": "Morgan's Blog",
"logo": {
"@type": "ImageObject",
"url": "https://blog.morgan.kr/favicon.ico"
}
}
}
</script>
</head>
<body class=" dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<article class="post-single">
<header class="post-header">
<h1 class="post-title">
다른 사람의 집에 산다는 것
</h1>
<div class="post-meta"><span title='2022-04-09 04:02:17 &#43;0000 UTC'>
Apr 9, 2022
</span>
</div>
</header>
<div class="post-divider"></div>
<div class="post-content"><p>우리 집은 창원이다. 어렸을 때 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.</p>
<p>대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지. 고등학교때와는 차원을 달리할 정도로 극악의 기숙사였다. 그래서 그런지, 공용 공간의 위생을 병적으로 집착하는 나에게는 너무 스트레스였다. 여기저기 남이 쓰던 쓰레기나 껌같은 흔적들이 방 곳곳에 있었고, 애초에 너무 더러웠다. 그래서 결국 기숙사에일주일을 못 버티고도망쳐 나왔다. 그렇게 조부모님 댁에 얹혀 살기 시작했고, 1시간의 통학생활이 시작되었다.</p>
<p>처음에 통학을 했을 때에는 학교를 가기만 하는게 너무 힘들었고, 어떻게 이렇게 힘들게 학교를다니지라는 걱정만 있었지만, 막상 한달째 통학을 하고 나니 일상 운동도 되고 기숙사와는 달리 정신을 빠릿빠릿하게 세우고 생활을 하게되는 장점도 많았다. 특히 강제적으로라도 기상시간이 앞당겨진다는 것은 일상의 더 빠른 시작을 일으켜 가장 강점이 되었다. 강권의 약속과 술약에서 수월히 빠져나올 수 있는 구실이 된다는 것은 덤.</p>
<p>원래의 집에서 생활하는 여타 통학과는 달리 나는 조부모님 댁에서 생활을 하니 삶의 제한이 꽤 자유롭다. 통금 시간도 없고, 부모님의 잔소리도 없어(솔직히 이건 필요하다.) 기숙사의 자유도와 비슷하지 않을까 싶다. 하지만 그만큼의 자유에는 할머니 할아버지의 생활도 최대한 배려하고 눈치를 많이 보면서 살아야 한다는 의무가 따른다.</p>
<p>내가 가장 질색하는 몇가지가 있다. 강박에 가까워 고치기 정말 힘든데다 관련된 사소한 것에도 진짜 엄청난 스트레스를 받는다.</p>
<p>먼저 바닥에 먼지가 있는 것을 극도로 싫어한다. 발은 항상 깨끗해야 한다. 침대에서 거꾸로 누울때도 걱정없이 잘 수 있을 정도로 발은 청결해야 한다. 하지만 조부모님댁(이하 본가)은 연립주택인데다, 도심에 있어 먼지가 많이 쌓인다. 게다가 청소를 잘 안하신다. 발에 계속 뭔가 달라붙고 먼지가 쌓이고 그것으로 스트레스를 엄청 받았는데, 내가 청소를 하는 것으로 해결되었다. 난 청소를 좋아한다.</p>
<p>또, 나는 강박이 있어 밥을 남기지를 못한다. 죽을 것 같아도 밀어 넣는다. 그런 강박이 있다. 그래서 평소에는 음식 냄새를 맡으면 토가 쏠린다. 그런것은 문을 닫으면 해결될 수 있다. 하지만 본가의 세탁기는 부엌을 지나 베란다에 있다. 빨래를 해주시고 말리시는 과정에서 음식에 대해서 많은 일들이 일어난다. 첫번째 항목에와 마찬가지로 음식 먼지, 즉 고춧가루 소금이나 음식에 관련된 사소한 찌꺼기들에 엄청난 스트레스를 받는다. 빨래를 가져오시는 과정에서 음식 먼지가 많이 붙는다. 이건 어떻게 해결해야 할지 감이 안온다. 런드리고라고 빨래 대행까지 생각했는데, 도리가 아닌것 같아서 포기했다. 뭔가를 요구하기에는 얹혀 사는 입장이라 너무 불편하다.</p>
<p>내 방은 아무도 청소하지 않았으면 한다. 사생활 그런 문제는 아니고 그냥 &lsquo;있던 그대로&rsquo;라는 강박 때문이다. 물건이 나도 모르는 새에 위피가 바뀌어 있으면 사소한 것에도 스트레스를 받는다. 이건 어쩔 수 없는 성격상의 결점이라 부탁드리는 수밖에 없을 것 같다.</p>
<p>조부모님은 진짜 어려운 관계인 것 같다. 부모님보다는 거리감이 있지만 그 외에서는 가장 가까운 관계이다. 조부모님과 나의 관계는 극단적으로 생각하면 남이지만 사실 소중한 가족이다. 편해진다면 얼마든지 편해질 수 있지만 불편해지면 얼마든지 불편해질 수도 있는것 같다.</p>
</div>
<footer class="post-footer">
<ul class="post-tags">
</ul>
<nav class="pag-back">
<a href="#back" onclick="window.history.back()">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
</a>
</nav>
<br/>
</footer>
</article>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
<script>
document.querySelectorAll('pre > code').forEach((codeblock) => {
const container = codeblock.parentNode.parentNode;
const copybutton = document.createElement('button');
copybutton.classList.add('copy-code');
copybutton.innerHTML = 'copy';
function copyingDone() {
copybutton.innerHTML = 'copied!';
setTimeout(() => {
copybutton.innerHTML = 'copy';
}, 2000);
}
copybutton.addEventListener('click', (cb) => {
if ('clipboard' in navigator) {
navigator.clipboard.writeText(codeblock.textContent);
copyingDone();
return;
}
const range = document.createRange();
range.selectNodeContents(codeblock);
const selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);
try {
document.execCommand('copy');
copyingDone();
} catch (e) { };
selection.removeRange(range);
});
if (container.classList.contains("highlight")) {
container.appendChild(copybutton);
} else if (container.parentNode.firstChild == container) {
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
} else {
codeblock.parentNode.appendChild(copybutton);
}
});
</script>
</body>
</html>

View File

@ -0,0 +1,147 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Categories | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Hi! I&#39;m Morgan!">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/categories/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://blog.morgan.kr/categories/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Categories" />
<meta property="og:description" content="Hi! I&#39;m Morgan!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://blog.morgan.kr/categories/" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Categories"/>
<meta name="twitter:description" content="Hi! I&#39;m Morgan!"/>
</head>
<body class="list dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<header class="page-header">
<h1>Categories</h1>
</header>
<ul class="terms-tags">
</ul>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Categories on Morgan&#39;s Blog</title>
<link>http://blog.morgan.kr/categories/</link>
<description>Recent content in Categories on Morgan&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language><atom:link href="http://blog.morgan.kr/categories/index.xml" rel="self" type="application/rss+xml" />
</channel>
</rss>

BIN
public/favicon-inv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
public/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

371
public/index.html Normal file
View File

@ -0,0 +1,371 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head>
<meta name="generator" content="Hugo 0.120.4"><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Morgan&#39;s Blog</title>
<meta name="keywords" content="Blog">
<meta name="description" content="Hi! I&#39;m Morgan!">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://blog.morgan.kr/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Morgan&#39;s Blog" />
<meta property="og:description" content="Hi! I&#39;m Morgan!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://blog.morgan.kr/" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Morgan&#39;s Blog"/>
<meta name="twitter:description" content="Hi! I&#39;m Morgan!"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Morgan's Blog",
"url": "http://blog.morgan.kr",
"description": "Hi! I\u0026#39;m Morgan!",
"thumbnailUrl": "https://blog.morgan.kr/favicon.ico",
"sameAs": [
"https://github.com/morgan9e", "mailto:me@morgan.kr", "https://git.morgan.kr", "https://t.me/morgan9e"
]
}
</script>
</head>
<body class="list dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<div class="simpletitle">Morgan&rsquo;s Blog</div>
<div class="posts-entry-div">
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, PTY and TTY
</h2>
</header>
<div class="entry-content">
<p>PTY (Pseudo-TTY), TTY (TeleTYpewriter). TTY The term TTY originates from the early days of computing when teletype machines were used as the main way for hci. As technology evolved, the physical teletype machines were replaced with virtual terminals or screens, and TTY is used as interface for text-based communication between a user and the system. TTYs can be hardware-based, like a console, or software-based, commonly known as virtual consoles or terminals (e....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-26 10:47:11.631 &#43;0000 UTC&#39;&gt;Nov 26, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, PTY and TTY" href="http://blog.morgan.kr/2023/11/kernel-pty-and-tty/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, Process creation
</h2>
</header>
<div class="entry-content">
<p>static int init(void * unused) { lock_kernel(); do_basic_setup(); /* * Ok, we have completed the initial bootup, and * we&#39;re essentially up and running. Get rid of the * initmem segments and start the user-mode stuff.. */ free_initmem(); unlock_kernel(); if (open(&#34;/dev/console&#34;, O_RDWR, 0) &lt; 0) printk(&#34;Warning: unable to open an initial console.\n&#34;); (void) dup(0); (void) dup(0); /* * We try each of these until one succeeds. * * The Bourne shell can be used instead of init if we are * trying to recover a really broken machine....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-26 07:44:51.449 &#43;0000 UTC&#39;&gt;Nov 26, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, Process creation" href="http://blog.morgan.kr/2023/11/kernel-process-creation/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, Bootloader
</h2>
</header>
<div class="entry-content">
<p>부트로더가 하는 일은
CPU 초기화 IVT 초기화 하드웨어 초기화 및 커널 찾기 (외부 메모리 인터페이스 초기화 및 파일시스템 인식 과정) 커널을 메모리에 올리고 커널 Entry로 점프 인데, 여기서 부트로더가 커널을 메모리에 올릴때 어디에 어떻게 올리냐가 헷갈렸다.
컴파일 된 커널을 보면 relative 주소로 되어 있는데, 부트로더가 커널의 .data랑 .bss를 다른 프로세스처럼 적절한 곳에 따로 두는 걸로 착각했다. 당연히 부트로더 단계에서는 메모리 매핑이나 페이징이 아직 없고, 커널은 메모리에 매핑이 된게 아니라 고정된 주소에 있어야 한다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-22 05:35:09.645 &#43;0000 UTC&#39;&gt;Nov 22, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, Bootloader" href="http://blog.morgan.kr/2023/11/kernel-bootloader/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, syscalls
</h2>
</header>
<div class="entry-content">
<p>sys_fork() .align 2 _sys_fork: call _find_empty_process testl %eax,%eax js 1f push %gs pushl %esi pushl %edi pushl %ebp pushl %eax call _copy_process addl $20,%esp 1: ret FUNCTION find_empty_process() A: IF &#43;&#43;last_pid &lt; 0 last_pid = 1 FOR i : 0 -&gt; NR_TASKS IF task[i] &amp;&amp; task[i].pid == last_pid GOTO A FOR i : 1 -&gt; NR_TASKS IF NOT task[i] RETURN i RETURN -1 Set last_pid to 1 or more.
From taskid from 0 to max_tasks, if task exists and pid is last_pid then increases pid and again....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-11 01:22:30 &#43;0000 UTC&#39;&gt;Nov 11, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, syscalls" href="http://blog.morgan.kr/2023/11/kernel-syscalls/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Chat with GPT, about Nuclear Fission
</h2>
</header>
<div class="entry-content">
<p>I made GPT create a new question about GPTs response, and repeated it for 10 minutes.
This is log for it.
Question: What is nuclear fission reactor, and what is breeder reactor?
Answer: A nuclear fission reactor is a device used to initiate and control a self-sustained nuclear chain reaction. These reactions are used to generate heat, which is typically used in steam turbines to produce electricity in a nuclear power station....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-10-27 09:10:25 &#43;0000 UTC&#39;&gt;Oct 27, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Chat with GPT, about Nuclear Fission" href="http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Toward an Electronically-Mediated Decentralized Society
</h2>
</header>
<div class="entry-content">
<p>In the long and evolving tapestry of human civilization, each era has been defined by the tools it has harnessed and the political ideologies it has embraced. From the agrarian societies governed by monarchies to the industrial ages democratic revolutions, the interplay between technology and governance has constantly shaped the contours of societies. Today, as we stand at the crossroads of an unprecedented digital revolution, its imperative to reflect on this intricate relationship once more....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-10-04 21:50:35.465 &#43;0000 UTC&#39;&gt;Oct 4, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Toward an Electronically-Mediated Decentralized Society" href="http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>VAE의 손실 함수
</h2>
</header>
<div class="entry-content">
<p>VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2022-12-15 11:21:46.836 &#43;0000 UTC&#39;&gt;Dec 15, 2022&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to VAE의 손실 함수" href="http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Spectre Attacks: Exploiting Speculative Execution
</h2>
</header>
<div class="entry-content">
<p>The Central Processing Unit (CPU) is a device that plays a major role as the brain of a computer. The CPU controls four main functions: memory, interpretation, computation, and control, which are based on the role of interpreting the commands of a given program to perform operations with data. In CPU, there are the program counter, a command register, an ALU (arithmetic logic unit), a control unit, a bus, and a register....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:19:36 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Spectre Attacks: Exploiting Speculative Execution" href="http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Ad-Tech와 통계의 쓰임새
</h2>
</header>
<div class="entry-content">
<p>CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $로 나타난다. ($\sigma$ 표준편차, $\mu$는 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:10:34 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Ad-Tech와 통계의 쓰임새" href="http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>구글 페이지랭크 알고리즘
</h2>
</header>
<div class="entry-content">
<p>구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:07:55 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 구글 페이지랭크 알고리즘" href="http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>양자 컴퓨터와 양자 어닐링
</h2>
</header>
<div class="entry-content">
<p>양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:36:03 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 양자 컴퓨터와 양자 어닐링" href="http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Security of IoT
</h2>
</header>
<div class="entry-content">
<p>Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:32:57 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Security of IoT" href="http://blog.morgan.kr/2021/08/security-of-iot/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Hardware Security
</h2>
</header>
<div class="entry-content">
<p>Hardware Security 신뢰성과 관련된 기술 1. RoT (Root of Trust) Root of Trust, 신뢰점이란, 전자기기 안에서 별도로 존재하는 프로세싱 유닛으로, 메인 프로세서의 보조로서 다양한 암호화 기법이나 솔루션을 제공하거나 이를 제어하기 위한 보안 기능들을 의미한다. RoT가 궁극적으로 달성하고자 하는 것은 TC(Trusted Computing)으로, 신뢰할 수 있는 컴퓨팅, 즉 믿을 만 하고 무결성이 보장되는 계산 및 기능을 이야기한다. 이를 달성하기 위한, RoT에 포함되는 여러가지 기술들이나 알고리즘이 있고, 각 단계들을 순차적으로 달성되어 신뢰할 수 있는 보안적인 프로세스가 진행된다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:31:09 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Hardware Security" href="http://blog.morgan.kr/2021/08/hardware-security/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>CFD with Python (Navier-Stokes Equation)
</h2>
</header>
<div class="entry-content">
<p>1-D Linear Convection 1차원 선형 열전도 방정식은 가장 심플하면서도 가장 기초적인 방정식입니다.
$$ \frac{\partial u}{\partial t} &#43; c \frac{\partial u}{\partial x} = 0 $$
이 식을 오일러 방정식으로 변환하여 수치해석적으로 해를 구할 수 있도록 변환을 해줍니다.
$$ ui^{n&#43;1} = u_i^n - c \frac{\Delta t}{\Delta x}(u_i^n-u{i-1}^n) $$
이제 이 오일러 방정식을 파이썬으로 구현해봅니다.
import numpy from matplotlib import pyplot import time, sys %matplotlib inline nx = 41 # try changing this number from 41 to 81 and Run All ....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-07-10 08:23:47 &#43;0000 UTC&#39;&gt;Jul 10, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to CFD with Python (Navier-Stokes Equation)" href="http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Cryptography
</h2>
</header>
<div class="entry-content">
<p>Cryptography 공개키 암호화 알고리즘. 1. Diffie-Hellman 디피-헬먼 키 교환 방식은 암호화 통신을 위한 키를 교환하는 방식 중 하나이다. 두 통신 주체가 공통의 비밀 키를 사용할 수 있도록 하는 안전한 알고리즘이다. 디피-헬먼 방식은 기초적인 암호 통신 방법으로, 이 알고리즘에 RSA나 ECC같은 암호화 알고리즘을 합쳐서 암호화 통신이 성립된다. 공개키는 암호화할 수 있는 키이고, 개인키는 복호화할 수 있는 키이다.
디피-헬먼 키 교환은 공개키 암호화 방식에 기반한다. 공개키 암호화 방식이란, 자신의 공개키를 상대방에게 전송하고, 그 상대방은 그 공개키로 데이터를 암호화해서 전송하면, 자신은 자신의 개인키로 복호화 할 수 있어, 통신이 성립되는 방식이다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-07-09 10:24:00 &#43;0000 UTC&#39;&gt;Jul 9, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Cryptography" href="http://blog.morgan.kr/2021/07/cryptography/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>파이썬으로 구현한 뉴턴의 방정식과 적분방정식
</h2>
</header>
<div class="entry-content">
<p>우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-05-21 13:18:27 &#43;0000 UTC&#39;&gt;May 21, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 파이썬으로 구현한 뉴턴의 방정식과 적분방정식" href="http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/"></a>
</article>
</div>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
</body>
</html>

354
public/index.xml Normal file
View File

@ -0,0 +1,354 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Morgan&#39;s Blog</title>
<link>http://blog.morgan.kr/</link>
<description>Recent content on Morgan&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<lastBuildDate>Sun, 26 Nov 2023 10:47:11 +0000</lastBuildDate><atom:link href="http://blog.morgan.kr/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Kernel, PTY and TTY</title>
<link>http://blog.morgan.kr/2023/11/kernel-pty-and-tty/</link>
<pubDate>Sun, 26 Nov 2023 10:47:11 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-pty-and-tty/</guid>
<description>Linux Kernel #4</description>
</item>
<item>
<title>Kernel, Process creation</title>
<link>http://blog.morgan.kr/2023/11/kernel-process-creation/</link>
<pubDate>Sun, 26 Nov 2023 07:44:51 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-process-creation/</guid>
<description>Linux Kernel #3</description>
</item>
<item>
<title>Kernel, Bootloader</title>
<link>http://blog.morgan.kr/2023/11/kernel-bootloader/</link>
<pubDate>Wed, 22 Nov 2023 05:35:09 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-bootloader/</guid>
<description>Linux Kernel #2</description>
</item>
<item>
<title>Kernel, syscalls</title>
<link>http://blog.morgan.kr/2023/11/kernel-syscalls/</link>
<pubDate>Sat, 11 Nov 2023 01:22:30 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-syscalls/</guid>
<description>Deep dive Linux Kernel #1</description>
</item>
<item>
<title>Chat with GPT, about Nuclear Fission</title>
<link>http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/</link>
<pubDate>Fri, 27 Oct 2023 09:10:25 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/</guid>
<description>I made GPT create a new question about GPT&amp;rsquo;s response, and repeated it for 10 minutes.
This is log for it.
Question: What is nuclear fission reactor, and what is breeder reactor?
Answer: A nuclear fission reactor is a device used to initiate and control a self-sustained nuclear chain reaction. These reactions are used to generate heat, which is typically used in steam turbines to produce electricity in a nuclear power station.</description>
</item>
<item>
<title>미러서버를 운영하면서...</title>
<link>http://blog.morgan.kr/blog/operating-mirroring-server/</link>
<pubDate>Mon, 23 Oct 2023 09:45:50 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/operating-mirroring-server/</guid>
<description>operating-mirroring-server</description>
</item>
<item>
<title>Toward an Electronically-Mediated Decentralized Society</title>
<link>http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/</link>
<pubDate>Wed, 04 Oct 2023 21:50:35 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/</guid>
<description>The Evolution of Democracy in the Digital Age</description>
</item>
<item>
<title>About USB-C and DP Alt Mode.</title>
<link>http://blog.morgan.kr/blog/usb-c-and-dp-alt-mode/</link>
<pubDate>Sat, 06 May 2023 12:55:32 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/usb-c-and-dp-alt-mode/</guid>
<description>Microsoft Surface Laptop 4 &amp;amp; Linux 제가 밖에서도 쓰고 집에서도 사용하는 만능 서피스 랩탑 4를 사용한지 어느새 2년이 넘었습니다. 그 사이에 리퍼도 받고 OS도 여러번 갈아엎기도 하고, 또 제 하드한 작업들을 잘 버텨주기도 한 정말 대단한 랩탑입니다.
특히 3:2의 광활한 세로는 정말 좋아서 다른 비율의 노트북은 이제 사용할 수 없는 몸이 되어버리기도 했습니다. 길이를 측정해보면 13인치 랩탑들과 동일한데, 세로에 5cm정도를 추가한 정도라 타이틀바 하나정도 넓혀주는 셈이라 마음놓고 패널바를 띄어놓고 사용할 수 있습니다.</description>
</item>
<item>
<title>VAE의 손실 함수</title>
<link>http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/</link>
<pubDate>Thu, 15 Dec 2022 11:21:46 +0000</pubDate>
<guid>http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/</guid>
<description>VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다.</description>
</item>
<item>
<title>선택실패</title>
<link>http://blog.morgan.kr/blog/2022041406/</link>
<pubDate>Thu, 14 Apr 2022 06:55:25 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/2022041406/</guid>
<description>고등학교 3학년 때까지만 해도 나는 무조건 컴퓨터 공학과나 전기전자 공학과. 학과만 보고 대학교에 진학하리라 마음먹었었다. 진짜 학교 이름은 절대 보지 않을 것이라 생각했다. 하지만 막상 입시에 처하고 선택의 갈림길에 있으니 그 다짐은 물거품이 되었다.
역시나, 아니나 다를까 원서 접수 기간이 되니 진로 담당 선생님은 실적을 위해 상위 대학교의 낮은 학과에 원서를 넣어볼 것을 추천하셨다. 말이 추천이지 반 강제로 넣게 되었다. 아무런 관심도 없었고, 3년동안 생각도 없었는데다 자기소개서도 짜맞춰야 쓸 수 있는 학과에 지원했다.</description>
</item>
<item>
<title>다른 사람의 집에 산다는 것</title>
<link>http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/</link>
<pubDate>Sat, 09 Apr 2022 04:02:17 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/</guid>
<description>우리 집은 창원이다. 어렸을 때 서울에 살다가 초증학교때 창원으로 내려왔고, 중학교 3학년까지 거기서 살아왔다. 고등학교는 기숙사 학교를 가서, 어쨋든 학창시절은 창원에서 지냈다.
대학을 서울로 와서 대학 기숙사에 들어가게 되었다. 고등학교때 기숙사는 들어오자마자 화장실과 샤워실을 리모델링 하기도 했고, 전국에서 아마 가장 넓은 방을 가지고 있었지 않을까 싶다. 각 방마다 냉장고도 있고. 하지만 대학교 기숙사는 참담했다. 2/3로 줄어든 엄청 좁은 방에, 낮은 천장, 허술한 난방, 게다가 못 쓸정도로 더러운 화장실과 때와 곰팡이로 가득한 샤워실까지.</description>
</item>
<item>
<title>고등학교 돌아보기</title>
<link>http://blog.morgan.kr/blog/godeunghaggyo-dolabogi/</link>
<pubDate>Tue, 21 Dec 2021 16:23:55 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/godeunghaggyo-dolabogi/</guid>
<description>2021년을 돌아보며.
2021.12.22
벌써 12월 22일이다. 12월달에는 열심히 살아야지 하던게 어제같은데 벌써 새해가 다가온다. 나는 내년 성인이 되지만, 아직 실감이 안난다. 술담배를 할 수 있는 나이라기 보다는 내 행동에 내가 책임져야 하는 때가 되었다는 게 더 실감이 난다. 대학을 고민하며 내가 앞으로 뭘 하면서 먹고 살아야할지 꽤 오랫동안 고심했는데, 그 결과로 조금 성장한 것 같아 이제와서는 약간 기쁘기도 하고 무섭기도 하면서 슬픈 약간 오묘한 기분이다. 어찌되었든 이제 성인이 되니까 조금 변해야겠다고 다짐하고 있다.</description>
</item>
<item>
<title>대학 입시가 한단계만 남았다.</title>
<link>http://blog.morgan.kr/blog/daehag-ibsiga-handangye-namassda/</link>
<pubDate>Wed, 01 Dec 2021 08:09:52 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/daehag-ibsiga-handangye-namassda/</guid>
<description>대학 입시가 한단계만을 앞두고 있다.
합격자 발표와 등록.
뭐 공부하고 대비해야하는 시험은 다 끝났으니 마음껏 놀고 있지만 마음의 한편에는 아직 불안함이 많이 존재하고 있다. 또 공부와 시험대비라는 정해져 있는 계획만을 12년 동안 따르던 나에게서 갑자기 계획이나 강제성이 사라졌다. 이제부터는 내가 무엇을 할 것인지를 나 혼자서 알아서 결정해야 하고 또한 그 책임도 내가 져야할 것이다. 예를 들어 늦게자도 누군가 깨워주지 않는다는 것에서 그것을 처음으로 느꼈다.
지금 하고싶은 것도 없다. 무언가 해야하는 것도 딱히 없다.</description>
</item>
<item>
<title>Spectre Attacks: Exploiting Speculative Execution</title>
<link>http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/</link>
<pubDate>Sat, 30 Oct 2021 07:19:36 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/</guid>
<description>The Central Processing Unit (CPU) is a device that plays a major role as the brain of a computer. The CPU controls four main functions: memory, interpretation, computation, and control, which are based on the role of interpreting the commands of a given program to perform operations with data. In CPU, there are the program counter, a command register, an ALU (arithmetic logic unit), a control unit, a bus, and a register.</description>
</item>
<item>
<title>전자 제어의 세계인 미래, 그 보안의 위협</title>
<link>http://blog.morgan.kr/blog/jeonja-jeeoyi-segyein-mirae-geu-boanyi-wihyeob/</link>
<pubDate>Sat, 30 Oct 2021 07:17:47 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/jeonja-jeeoyi-segyein-mirae-geu-boanyi-wihyeob/</guid>
<description>미래 사회에는 전기자동차와 자율주행 자동차가 성하게 유행할 것이다. 사람 운전자의 역할이 거의 축소되고, AI나 전자적으로 제어될 것인데, 지금도 많이 일어나고 있는 논란은 바로 보안이다. 만약 자율주행 자동차가 해킹을 당하게 된다면 어떨까? 해커는 자동차에 타고 있는 사람의 생사여탈권을 가지게 될 정도로 심각한 문제가 있는 것이다. 그러므로, 이러한 생활환경에 직접적인 영향을 주는 전자기기의 보안은 매우 중요한 것으로 판단된다. 미래에 우리의 생활을 가장 많은 부분 담당할 사물인터넷도 마찬가지이다. 우리의 생활과 강하게 연관되어 있고, 그러므로 보안이 가장 주요한 요인이 된다.</description>
</item>
<item>
<title>Ad-Tech와 통계의 쓰임새</title>
<link>http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/</link>
<pubDate>Sat, 30 Oct 2021 07:10:34 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/</guid>
<description>CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $로 나타난다. ($\sigma$ 표준편차, $\mu$는 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다.</description>
</item>
<item>
<title>양자들의 트랜지스터와 핫 캐리어 효과</title>
<link>http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/</link>
<pubDate>Sat, 30 Oct 2021 07:09:53 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/</guid>
<description>트랜지스터가 점점 소형화가 되어가면서 전자가 예상한대로 움직이지 않는 작은 단위까지 내려갔다. 나노단위까지 생산공정이 작아지면서 양자역학적인 효과가 나타나기 시작했고, 이는 트랜지스터의 스위칭 작용을 방해하는 효과를 불어일으킨다. 이를 해결하기 위해서 양자 세계에서 사용할 수 있는 양자 트랜지스터와 단일 원자 트랜지스터가 개발되었다.
단일원자 트랜지스터 단일원자 트랜지스터는 양자 터널링 효과를 적극적으로 이용하여 스위칭 작용을 한다. 터널링 효과를 제어하기 위해서 직접 제어가 아닌 양자 얽힘 효과를 이용한다. 큐비트를 이용하여, 전자 주개로써의 원자를 제어하기 위해 원자 개개별의 스핀 상태를 이용한다.</description>
</item>
<item>
<title>구글 페이지랭크 알고리즘</title>
<link>http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link>
<pubDate>Sat, 30 Oct 2021 07:07:55 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</guid>
<description>구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다.</description>
</item>
<item>
<title>인생 두번째 실패. 두번째 대학탈락.</title>
<link>http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/</link>
<pubDate>Sat, 23 Oct 2021 08:52:59 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/</guid>
<description>내 첫번째 실패는 조기진학 실패이다. 대학을 떨어졌다.
내 두번째 실패도 대학 탈락이다. 이번엔 아직 9번 더 있지만, 작년에 떨어지고 느꼈던 그 참담함과 그 마음가짐을 다시 한번 느낄 수 있게 한 그 세글자 &amp;lsquo;불합격&amp;rsquo;. 역시 이번에도 참담함을 느꼈고, 여전히 안타까움과 공허함을 느낄 수 있었다.
내심 기대했었다. 붙기를 간절히 기도했다. 하지만 세상은 냉정했다.
바라던게 이제는 이룰 수 없다고 생각하니 공허했다. 하지만 그것도 잠깐이었다. 멘탈이 강하고 회복력도 강한게 내 장점이라 공허함으로 쳐져있는 것도 잠깐이었고, 앞으로를 다시 생각하고 마음가짐을 고치는 계기가 되었다.</description>
</item>
<item>
<title>나는 무엇을 하고 있는걸까</title>
<link>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/</link>
<pubDate>Sat, 23 Oct 2021 08:52:15 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/</guid>
<description>프로그래밍에 매력을 느껴 프로그래밍에 입덕하게 된 건 2학년때쯤.. 이후 그 재미를 느끼고 많은 것들을 시도해보곤 했다. HTML과 CSS를 배워 가장 기본적인 웹사이트를 만들고, 이를 더 화려하게 꾸미기 위해 JS를 공부했다. 이를 배포하기 위해 서버 구축에 대해 공부했고, PHP나 MySQL을 이용해 기능성을 부여하면서 DB와 SQL에 대해 공부했다. 이후 고전적인 서버를 넘어 SSR이나 CSR에 대해 알아보려 NodeJS를 공부했다. 학교 입학시 과제였던 C로 하는 PS를 하면서 C나 C++에 관심을 가졌고, 왜 C로 코딩하는데 C++를 써야하는지 의문을 가지고 C++을 공부했다.</description>
</item>
<item>
<title>학교에서 했던 프로젝트들..</title>
<link>http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/</link>
<pubDate>Sat, 23 Oct 2021 08:51:44 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/</guid>
<description> 귀가시간 수집 프로그램 기상곡 수집 프로그램 컴퓨터실 사용현황 학교 내부 정보공유망 문서파일 자동저장 및 복구 시스템 학교 저지 사이트 API 정리 및 제출시스템 프록시 선생님들이 부탁하셨던 수많은 프로그램들 </description>
</item>
<item>
<title>개인정보.. Privacy..</title>
<link>http://blog.morgan.kr/blog/gaeinjeongbo-privacy/</link>
<pubDate>Sat, 23 Oct 2021 08:31:52 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/gaeinjeongbo-privacy/</guid>
<description>나는 구글이 싫었다.
구글에 반대하며 지메일도 거의 쓰지 않고 있고, 다른 구글 플랫폼을 벗어나 다른 플랫폼으로 옮기고 있다. 하지만, 아이폰으로 옮기고 나서 몇주간을 생각해보니 내 분노의 대상은 구글이 아니라 애플이여야 한다는 것을 알게 되었다. 카카오, 구글에 가지고 있던 분노의 이유가 애플이라는 기업 자체를 강타한다. 물론 나도 알고 있었고, 구글 못지 않게 애플을 싫어하고 있었다. 새롭게 휴대폰을바꿀 때에도 OS만 구글이고 제조사는 다양한 (삼성이..겟지만..) 안드로이드 휴대폰과 휴대폰 하드웨어, 악세사리, OS, 결제, 게다가 웹엔진까지 제한하고 독점해버린 애플과는 비교가 된지 않는다고 생각했고, 이번에 플립이 잘 나와서 그것으로 바꾸려 했다.</description>
</item>
<item>
<title>데이터센터</title>
<link>http://blog.morgan.kr/blog/datacenter/</link>
<pubDate>Sat, 23 Oct 2021 08:15:14 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/datacenter/</guid>
<description>구글같은 검색엔진이 늘어나고, 다양한 기업들과 서비스들이 사용자들의 개인정보와 데이터를 마구 수집한다. 이로 인해 생겨나는 기하급수적인 양의 데이터들을 보관할 스토리지와 그것들을 사용할 수 있는 데이터로 가공하기 위해 필요한 수없이 큰 컴퓨팅 파워를, 큰 기업들이 대형으로 지어놓은 데이터 센터가 담당하고 있다. 게다가 이제는 작은 기업이나 서비스들은 AWS나 GCP, Oracle과 같은 서비스를 통해 Cloud로 Computing하기까지 하니, 아마존이나 구글의 데이터 센터는 얼마나 커다랗고, 커다래야 하는지 알 수 있다.
아마존과 구글의 데이터센터뿐 아니라 네이버, MS, 오라클, 및 작은 데이터센터들이 지어질때 중요하게 작용하는 것이 있다.</description>
</item>
<item>
<title>블로그 글쓰기는 너무 힘들어..</title>
<link>http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/</link>
<pubDate>Fri, 08 Oct 2021 05:19:00 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/</guid>
<description>야심차게 티스토리 블로그를 만들어 몇몇 글을 쓰고 나서, 한참동안이나 글을 쓰지 않았다. 하지만 나중에 돌아보면 쓰일 곳이 있지 않을까 하여 내 소장을 위해 Ghost + Vultr로 넘어왔고, 돈도 내야 하니까 글을 조금씩이라도 쓰지 않을까 생각했지만&amp;hellip;. 결국 글을 쓰지도 않은 채 달마다 돈만 나가고 있다&amp;hellip;
블로그 글을 왜 쓰지 않았지..? 고등학교 생활을 하느라 힘들고 바빠서 (노느라) 글을 쓰지 않았을 수도 있고, 마땅하게 글을 쓸만한 소재도 없고, 마땅하게 글을 쓸 기기 또한 없다.</description>
</item>
<item>
<title>나는 무엇을 해야 하는걸까</title>
<link>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/</link>
<pubDate>Sat, 11 Sep 2021 01:20:00 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/</guid>
<description>대학 탈락 이후 나는 대학을 한번 떨어진 경험이 있다. 과학고등학교 재학생 중 중상위권이었던 나는 조기진학의 기회를 받았고, KAIST만을 넣은 채로 떨어졌다. 그 때는 붙을 줄 알고 있어서 2학년 2학기 시험을 말아먹었고, 지금도 그 영향을 받아 피를 흘리고 있다.
다행히 그 이후 각성을 한건지 철이 든건지 3학년 1학기는 최상위권 성적을 받아 원래대로 유지는 할 수 있었다. 3-4등 정도 했으니까 망정이지 태도를 안고치고 그대로 했더라면 나는 그대로 멘탈이 없어져버렸을 것이다.
오늘까지 자기소개서를 작성했다.</description>
</item>
<item>
<title>Attitude for criticism</title>
<link>http://blog.morgan.kr/blog/attitude-for-criticism/</link>
<pubDate>Fri, 10 Sep 2021 07:30:10 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/attitude-for-criticism/</guid>
<description>요즘 우리 학교에 학교를 개혁하겠다는 학생회장이 나타나고 나서부터 친구들이 학교에 대한 여러 가지 불만들을 풀어내기 시작했다. 나도 마찬가지로 학교에 대한 여러 가지 불만사항들이 많았다. 나는 매 학기마다 개정된 학교 교칙이나 규정들을 정독하는 이벤트를 가지는데, 그때마다 항상 &amp;lsquo;아, 학생들이 당연히 너무 불리하다..&amp;rsquo; 라던가, &amp;lsquo;이 조항은 너무 아닌데, 너무 구시대적인 생각이 아닌가?&amp;lsquo;라는 생각이 들기도 한다.
대학을 가야하는 시기라서 여러 학교들의 생활이나 공부방법, 대학 진학 상황들에 대해서 더욱 관심을 가지게 되었다. 특히 전국급 자사고나 타 지역 과학고의 생활과 공부습관?</description>
</item>
<item>
<title>양자 컴퓨터와 양자 어닐링</title>
<link>http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/</link>
<pubDate>Fri, 06 Aug 2021 10:36:03 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/</guid>
<description>양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다.</description>
</item>
<item>
<title>Security of IoT</title>
<link>http://blog.morgan.kr/2021/08/security-of-iot/</link>
<pubDate>Fri, 06 Aug 2021 10:32:57 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/security-of-iot/</guid>
<description>Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.</description>
</item>
<item>
<title>Hardware Security</title>
<link>http://blog.morgan.kr/2021/08/hardware-security/</link>
<pubDate>Fri, 06 Aug 2021 10:31:09 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/hardware-security/</guid>
<description>Hardware Security 신뢰성과 관련된 기술 1. RoT (Root of Trust) Root of Trust, 신뢰점이란, 전자기기 안에서 별도로 존재하는 프로세싱 유닛으로, 메인 프로세서의 보조로서 다양한 암호화 기법이나 솔루션을 제공하거나 이를 제어하기 위한 보안 기능들을 의미한다. RoT가 궁극적으로 달성하고자 하는 것은 TC(Trusted Computing)으로, 신뢰할 수 있는 컴퓨팅, 즉 믿을 만 하고 무결성이 보장되는 계산 및 기능을 이야기한다. 이를 달성하기 위한, RoT에 포함되는 여러가지 기술들이나 알고리즘이 있고, 각 단계들을 순차적으로 달성되어 신뢰할 수 있는 보안적인 프로세스가 진행된다.</description>
</item>
<item>
<title>CFD with Python (Navier-Stokes Equation)</title>
<link>http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/</link>
<pubDate>Sat, 10 Jul 2021 08:23:47 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/</guid>
<description>1-D Linear Convection 1차원 선형 열전도 방정식은 가장 심플하면서도 가장 기초적인 방정식입니다.
$$ \frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0 $$
이 식을 오일러 방정식으로 변환하여 수치해석적으로 해를 구할 수 있도록 변환을 해줍니다.
$$ ui^{n+1} = u_i^n - c \frac{\Delta t}{\Delta x}(u_i^n-u{i-1}^n) $$
이제 이 오일러 방정식을 파이썬으로 구현해봅니다.
import numpy from matplotlib import pyplot import time, sys %matplotlib inline nx = 41 # try changing this number from 41 to 81 and Run All .</description>
</item>
<item>
<title>Cryptography</title>
<link>http://blog.morgan.kr/2021/07/cryptography/</link>
<pubDate>Fri, 09 Jul 2021 10:24:00 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/07/cryptography/</guid>
<description>Cryptography 공개키 암호화 알고리즘. 1. Diffie-Hellman 디피-헬먼 키 교환 방식은 암호화 통신을 위한 키를 교환하는 방식 중 하나이다. 두 통신 주체가 공통의 비밀 키를 사용할 수 있도록 하는 안전한 알고리즘이다. 디피-헬먼 방식은 기초적인 암호 통신 방법으로, 이 알고리즘에 RSA나 ECC같은 암호화 알고리즘을 합쳐서 암호화 통신이 성립된다. 공개키는 암호화할 수 있는 키이고, 개인키는 복호화할 수 있는 키이다.
디피-헬먼 키 교환은 공개키 암호화 방식에 기반한다. 공개키 암호화 방식이란, 자신의 공개키를 상대방에게 전송하고, 그 상대방은 그 공개키로 데이터를 암호화해서 전송하면, 자신은 자신의 개인키로 복호화 할 수 있어, 통신이 성립되는 방식이다.</description>
</item>
<item>
<title>시험을 일주일 앞두고</title>
<link>http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/</link>
<pubDate>Sun, 20 Jun 2021 09:23:28 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/</guid>
<description>지금까지 내 인생에서 가장 중요한 시험. 그 시험이 일부일 앞으로 다가왔다. 하루종일 시험공부 비슷한걸 하면서 심신이 지쳐 더 이상 집중을 할 수 없을 것 같다. 이제 이 고비만 넘기면 인생에서 가장 날아다닌다는 시기, 대학생이 된다. 앞으로 뭘 하고 살아야 할지, 무엇을 하고 싶은지, 내가 아는 게 많아지고 현실을 깨달으면서 철이 드니 생각이 복잡해지고 앞길이 막막하기만 하다.
몇일 전, 작년에 대학 원서 자기소개서를 다시 읽다 보니 내가 아는 게 많아졌음을 새삼 깨달았다.</description>
</item>
<item>
<title>파이썬으로 구현한 뉴턴의 방정식과 적분방정식</title>
<link>http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/</link>
<pubDate>Fri, 21 May 2021 13:18:27 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/</guid>
<description>우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다.</description>
</item>
<item>
<title>나는 무엇을 하고 싶은 걸까..</title>
<link>http://blog.morgan.kr/blog/what-i-wanted-to-do/</link>
<pubDate>Thu, 28 Jan 2021 06:14:00 +0000</pubDate>
<guid>http://blog.morgan.kr/blog/what-i-wanted-to-do/</guid>
<description>나는 개발자가 되고 싶었다. 그래서 나 나름대로 여러가지 언어를 배우기도 했고 컴퓨터 관련된 여러 가지 활동을 하면서 나의 꿈을 키워나간다고 믿었다. 고등학교를 다니면서 외적으로 개인적인 공부도 많이 하고 있고, 이를 바탕으로 진로를 정하려고 했다. 고등학교 3학년이라 앞으로의 진로를 정해야 했고, 이런 저런 고민을 하다 보니 내가 공부했던 것들이, 또 내가 알고 있는 것들이 단순히 빙산의 일각이라는 사실을 깨달았다.
과학고를 다니는 덕에 수학적인 내용을 기본으로 하는 여러가지 컴퓨터 분야에 대해서는 나름 쉽게 공부할 수 있었다.</description>
</item>
</channel>
</rss>

10
public/page/1/index.html Normal file
View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>http://blog.morgan.kr/</title>
<link rel="canonical" href="http://blog.morgan.kr/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://blog.morgan.kr/">
</head>
</html>

376
public/posts/index.html Normal file
View File

@ -0,0 +1,376 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Posts | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Posts - Morgan&#39;s Blog">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/posts/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://blog.morgan.kr/posts/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Posts" />
<meta property="og:description" content="Hi! I&#39;m Morgan!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://blog.morgan.kr/posts/" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Posts"/>
<meta name="twitter:description" content="Hi! I&#39;m Morgan!"/>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [,
{
"@type": "ListItem",
"position": 2 ,
"name": "Posts",
"item": "http://blog.morgan.kr/posts/"
}
]
}
</script>
</head>
<body class="list dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<header class="page-header post-title-header">
<h1>
Posts
</h1>
</header>
<div class="posts-entry-div">
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, PTY and TTY
</h2>
</header>
<div class="entry-content">
<p>PTY (Pseudo-TTY), TTY (TeleTYpewriter). TTY The term TTY originates from the early days of computing when teletype machines were used as the main way for hci. As technology evolved, the physical teletype machines were replaced with virtual terminals or screens, and TTY is used as interface for text-based communication between a user and the system. TTYs can be hardware-based, like a console, or software-based, commonly known as virtual consoles or terminals (e....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-26 10:47:11.631 &#43;0000 UTC&#39;&gt;Nov 26, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, PTY and TTY" href="http://blog.morgan.kr/2023/11/kernel-pty-and-tty/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, Process creation
</h2>
</header>
<div class="entry-content">
<p>static int init(void * unused) { lock_kernel(); do_basic_setup(); /* * Ok, we have completed the initial bootup, and * we&#39;re essentially up and running. Get rid of the * initmem segments and start the user-mode stuff.. */ free_initmem(); unlock_kernel(); if (open(&#34;/dev/console&#34;, O_RDWR, 0) &lt; 0) printk(&#34;Warning: unable to open an initial console.\n&#34;); (void) dup(0); (void) dup(0); /* * We try each of these until one succeeds. * * The Bourne shell can be used instead of init if we are * trying to recover a really broken machine....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-26 07:44:51.449 &#43;0000 UTC&#39;&gt;Nov 26, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, Process creation" href="http://blog.morgan.kr/2023/11/kernel-process-creation/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, Bootloader
</h2>
</header>
<div class="entry-content">
<p>부트로더가 하는 일은
CPU 초기화 IVT 초기화 하드웨어 초기화 및 커널 찾기 (외부 메모리 인터페이스 초기화 및 파일시스템 인식 과정) 커널을 메모리에 올리고 커널 Entry로 점프 인데, 여기서 부트로더가 커널을 메모리에 올릴때 어디에 어떻게 올리냐가 헷갈렸다.
컴파일 된 커널을 보면 relative 주소로 되어 있는데, 부트로더가 커널의 .data랑 .bss를 다른 프로세스처럼 적절한 곳에 따로 두는 걸로 착각했다. 당연히 부트로더 단계에서는 메모리 매핑이나 페이징이 아직 없고, 커널은 메모리에 매핑이 된게 아니라 고정된 주소에 있어야 한다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-22 05:35:09.645 &#43;0000 UTC&#39;&gt;Nov 22, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, Bootloader" href="http://blog.morgan.kr/2023/11/kernel-bootloader/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Kernel, syscalls
</h2>
</header>
<div class="entry-content">
<p>sys_fork() .align 2 _sys_fork: call _find_empty_process testl %eax,%eax js 1f push %gs pushl %esi pushl %edi pushl %ebp pushl %eax call _copy_process addl $20,%esp 1: ret FUNCTION find_empty_process() A: IF &#43;&#43;last_pid &lt; 0 last_pid = 1 FOR i : 0 -&gt; NR_TASKS IF task[i] &amp;&amp; task[i].pid == last_pid GOTO A FOR i : 1 -&gt; NR_TASKS IF NOT task[i] RETURN i RETURN -1 Set last_pid to 1 or more.
From taskid from 0 to max_tasks, if task exists and pid is last_pid then increases pid and again....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-11-11 01:22:30 &#43;0000 UTC&#39;&gt;Nov 11, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Kernel, syscalls" href="http://blog.morgan.kr/2023/11/kernel-syscalls/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Chat with GPT, about Nuclear Fission
</h2>
</header>
<div class="entry-content">
<p>I made GPT create a new question about GPTs response, and repeated it for 10 minutes.
This is log for it.
Question: What is nuclear fission reactor, and what is breeder reactor?
Answer: A nuclear fission reactor is a device used to initiate and control a self-sustained nuclear chain reaction. These reactions are used to generate heat, which is typically used in steam turbines to produce electricity in a nuclear power station....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-10-27 09:10:25 &#43;0000 UTC&#39;&gt;Oct 27, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Chat with GPT, about Nuclear Fission" href="http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Toward an Electronically-Mediated Decentralized Society
</h2>
</header>
<div class="entry-content">
<p>In the long and evolving tapestry of human civilization, each era has been defined by the tools it has harnessed and the political ideologies it has embraced. From the agrarian societies governed by monarchies to the industrial ages democratic revolutions, the interplay between technology and governance has constantly shaped the contours of societies. Today, as we stand at the crossroads of an unprecedented digital revolution, its imperative to reflect on this intricate relationship once more....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2023-10-04 21:50:35.465 &#43;0000 UTC&#39;&gt;Oct 4, 2023&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Toward an Electronically-Mediated Decentralized Society" href="http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>VAE의 손실 함수
</h2>
</header>
<div class="entry-content">
<p>VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2022-12-15 11:21:46.836 &#43;0000 UTC&#39;&gt;Dec 15, 2022&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to VAE의 손실 함수" href="http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Spectre Attacks: Exploiting Speculative Execution
</h2>
</header>
<div class="entry-content">
<p>The Central Processing Unit (CPU) is a device that plays a major role as the brain of a computer. The CPU controls four main functions: memory, interpretation, computation, and control, which are based on the role of interpreting the commands of a given program to perform operations with data. In CPU, there are the program counter, a command register, an ALU (arithmetic logic unit), a control unit, a bus, and a register....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:19:36 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Spectre Attacks: Exploiting Speculative Execution" href="http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Ad-Tech와 통계의 쓰임새
</h2>
</header>
<div class="entry-content">
<p>CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $로 나타난다. ($\sigma$ 표준편차, $\mu$는 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:10:34 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Ad-Tech와 통계의 쓰임새" href="http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>구글 페이지랭크 알고리즘
</h2>
</header>
<div class="entry-content">
<p>구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-10-30 07:07:55 &#43;0000 UTC&#39;&gt;Oct 30, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 구글 페이지랭크 알고리즘" href="http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>양자 컴퓨터와 양자 어닐링
</h2>
</header>
<div class="entry-content">
<p>양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:36:03 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 양자 컴퓨터와 양자 어닐링" href="http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Security of IoT
</h2>
</header>
<div class="entry-content">
<p>Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:32:57 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Security of IoT" href="http://blog.morgan.kr/2021/08/security-of-iot/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Hardware Security
</h2>
</header>
<div class="entry-content">
<p>Hardware Security 신뢰성과 관련된 기술 1. RoT (Root of Trust) Root of Trust, 신뢰점이란, 전자기기 안에서 별도로 존재하는 프로세싱 유닛으로, 메인 프로세서의 보조로서 다양한 암호화 기법이나 솔루션을 제공하거나 이를 제어하기 위한 보안 기능들을 의미한다. RoT가 궁극적으로 달성하고자 하는 것은 TC(Trusted Computing)으로, 신뢰할 수 있는 컴퓨팅, 즉 믿을 만 하고 무결성이 보장되는 계산 및 기능을 이야기한다. 이를 달성하기 위한, RoT에 포함되는 여러가지 기술들이나 알고리즘이 있고, 각 단계들을 순차적으로 달성되어 신뢰할 수 있는 보안적인 프로세스가 진행된다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:31:09 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Hardware Security" href="http://blog.morgan.kr/2021/08/hardware-security/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>CFD with Python (Navier-Stokes Equation)
</h2>
</header>
<div class="entry-content">
<p>1-D Linear Convection 1차원 선형 열전도 방정식은 가장 심플하면서도 가장 기초적인 방정식입니다.
$$ \frac{\partial u}{\partial t} &#43; c \frac{\partial u}{\partial x} = 0 $$
이 식을 오일러 방정식으로 변환하여 수치해석적으로 해를 구할 수 있도록 변환을 해줍니다.
$$ ui^{n&#43;1} = u_i^n - c \frac{\Delta t}{\Delta x}(u_i^n-u{i-1}^n) $$
이제 이 오일러 방정식을 파이썬으로 구현해봅니다.
import numpy from matplotlib import pyplot import time, sys %matplotlib inline nx = 41 # try changing this number from 41 to 81 and Run All ....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-07-10 08:23:47 &#43;0000 UTC&#39;&gt;Jul 10, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to CFD with Python (Navier-Stokes Equation)" href="http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>Cryptography
</h2>
</header>
<div class="entry-content">
<p>Cryptography 공개키 암호화 알고리즘. 1. Diffie-Hellman 디피-헬먼 키 교환 방식은 암호화 통신을 위한 키를 교환하는 방식 중 하나이다. 두 통신 주체가 공통의 비밀 키를 사용할 수 있도록 하는 안전한 알고리즘이다. 디피-헬먼 방식은 기초적인 암호 통신 방법으로, 이 알고리즘에 RSA나 ECC같은 암호화 알고리즘을 합쳐서 암호화 통신이 성립된다. 공개키는 암호화할 수 있는 키이고, 개인키는 복호화할 수 있는 키이다.
디피-헬먼 키 교환은 공개키 암호화 방식에 기반한다. 공개키 암호화 방식이란, 자신의 공개키를 상대방에게 전송하고, 그 상대방은 그 공개키로 데이터를 암호화해서 전송하면, 자신은 자신의 개인키로 복호화 할 수 있어, 통신이 성립되는 방식이다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-07-09 10:24:00 &#43;0000 UTC&#39;&gt;Jul 9, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Cryptography" href="http://blog.morgan.kr/2021/07/cryptography/"></a>
</article>
<article class="post-entry">
<header class="entry-header">
<h2>파이썬으로 구현한 뉴턴의 방정식과 적분방정식
</h2>
</header>
<div class="entry-content">
<p>우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-05-21 13:18:27 &#43;0000 UTC&#39;&gt;May 21, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to 파이썬으로 구현한 뉴턴의 방정식과 적분방정식" href="http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/"></a>
</article>
</div>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
</body>
</html>

172
public/posts/index.xml Normal file
View File

@ -0,0 +1,172 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Posts on Morgan&#39;s Blog</title>
<link>http://blog.morgan.kr/posts/</link>
<description>Recent content in Posts on Morgan&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<lastBuildDate>Sun, 26 Nov 2023 10:47:11 +0000</lastBuildDate><atom:link href="http://blog.morgan.kr/posts/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Kernel, PTY and TTY</title>
<link>http://blog.morgan.kr/2023/11/kernel-pty-and-tty/</link>
<pubDate>Sun, 26 Nov 2023 10:47:11 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-pty-and-tty/</guid>
<description>Linux Kernel #4</description>
</item>
<item>
<title>Kernel, Process creation</title>
<link>http://blog.morgan.kr/2023/11/kernel-process-creation/</link>
<pubDate>Sun, 26 Nov 2023 07:44:51 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-process-creation/</guid>
<description>Linux Kernel #3</description>
</item>
<item>
<title>Kernel, Bootloader</title>
<link>http://blog.morgan.kr/2023/11/kernel-bootloader/</link>
<pubDate>Wed, 22 Nov 2023 05:35:09 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-bootloader/</guid>
<description>Linux Kernel #2</description>
</item>
<item>
<title>Kernel, syscalls</title>
<link>http://blog.morgan.kr/2023/11/kernel-syscalls/</link>
<pubDate>Sat, 11 Nov 2023 01:22:30 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/11/kernel-syscalls/</guid>
<description>Deep dive Linux Kernel #1</description>
</item>
<item>
<title>Chat with GPT, about Nuclear Fission</title>
<link>http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/</link>
<pubDate>Fri, 27 Oct 2023 09:10:25 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/</guid>
<description>I made GPT create a new question about GPT&amp;rsquo;s response, and repeated it for 10 minutes.
This is log for it.
Question: What is nuclear fission reactor, and what is breeder reactor?
Answer: A nuclear fission reactor is a device used to initiate and control a self-sustained nuclear chain reaction. These reactions are used to generate heat, which is typically used in steam turbines to produce electricity in a nuclear power station.</description>
</item>
<item>
<title>Toward an Electronically-Mediated Decentralized Society</title>
<link>http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/</link>
<pubDate>Wed, 04 Oct 2023 21:50:35 +0000</pubDate>
<guid>http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/</guid>
<description>The Evolution of Democracy in the Digital Age</description>
</item>
<item>
<title>VAE의 손실 함수</title>
<link>http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/</link>
<pubDate>Thu, 15 Dec 2022 11:21:46 +0000</pubDate>
<guid>http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/</guid>
<description>VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다.</description>
</item>
<item>
<title>Spectre Attacks: Exploiting Speculative Execution</title>
<link>http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/</link>
<pubDate>Sat, 30 Oct 2021 07:19:36 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/</guid>
<description>The Central Processing Unit (CPU) is a device that plays a major role as the brain of a computer. The CPU controls four main functions: memory, interpretation, computation, and control, which are based on the role of interpreting the commands of a given program to perform operations with data. In CPU, there are the program counter, a command register, an ALU (arithmetic logic unit), a control unit, a bus, and a register.</description>
</item>
<item>
<title>Ad-Tech와 통계의 쓰임새</title>
<link>http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/</link>
<pubDate>Sat, 30 Oct 2021 07:10:34 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/</guid>
<description>CTR(클릭률) Click-through rate)는 특정 링크를 클릭한 사용자의 비율. Z지수는 표준점수로, 통계학적인 정규분포를 만들고 각각의 경우가 표준편차상의 어떤 위치를 차지하는지를 보여주는 차원없는 수치이다. Z-지수는 원수치가 평균에서 얼마나 떨어져 있는지를 나타내는 지수로, $ z = \frac{z - \mu}{\sigma} $로 나타난다. ($\sigma$ 표준편차, $\mu$는 모집단의 평균이다.
중심극한정리란 표본의 크기가 커질수록 표본 평균의 분포는 모집단의 분포 모양과는 관계없이 정규분표에 가까워진다는 정리이다.
점추정은 모집단의 특성을 단일한 값으로 추정하는 방법으로, 표본평균과 표본분산을 이용해 모집단의 평균과 분산을 계산해 내는 방법이 대표적인 예이다.</description>
</item>
<item>
<title>구글 페이지랭크 알고리즘</title>
<link>http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</link>
<pubDate>Sat, 30 Oct 2021 07:07:55 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</guid>
<description>구글은 방대한 웹페이지를 자사 데이터베이스에 기록하고 있으며, 이를 토대로 사용자가 검색한 검색결과와 가장 매치되는 페이지를 보여줌으로써 검색엔진의 역할을 할 수 있다. 구글이 이렇게까지 클 수 있었던 이유는 정확한 검색 결과를 보여주는 알고리즘 덕분이다. 그렇다면 이 알고리즘은 무엇일까? 구글이 웹페이지들의 관계를 산출하고 그 수치를 계산해내는 알고리즘인 페이지랭크 알고리즘은 구글의 창시자중 한명인 래리 페이지라는 사람이 석사논문으로 발명한 알고리즘이다. PageRank 알고리즘은 각각의 웹 페이지의 상대적 가중치를 계산하여 각각의 중요도와 연관성을 표현하는 방식을 이용하는데, 이를 이용하여 한 페이지와 가장 연관된 다른 페이지를 Rank를 매겨 정확한 연관성을 보여줄 수 있다.</description>
</item>
<item>
<title>양자 컴퓨터와 양자 어닐링</title>
<link>http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/</link>
<pubDate>Fri, 06 Aug 2021 10:36:03 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/</guid>
<description>양자 컴퓨터와 양자 어닐링 양자 컴퓨터 입문 / 양자 컴퓨팅 발전과 전망 / 1억배 빠른 양자 컴퓨터가 온다 / 스콧 애론슨의 양자 컴퓨터 강의
양자 컴퓨터란 무엇일까? Ø 현대 컴퓨터의 발전 과정 20세기, 컴퓨터(Computer)란 말은 계산하는 사람, Computing Person이라는 뜻으로 사용되었다. 하지만 단순 반복 행동을 굳이 사람이 하지 않아도 되는, 일명 계산기계가 사용될 수 있음이 증명되면서, Computer라는 말은 ‘일정한 규칙ㅇㄹ 가지고 주어진 값을 토대로 계산하는 장치’라는 의미를 가지게 되었다.
현대적인 컴퓨터의 정의를 시작한 사람은 ‘찰스 배비지’이다.</description>
</item>
<item>
<title>Security of IoT</title>
<link>http://blog.morgan.kr/2021/08/security-of-iot/</link>
<pubDate>Fri, 06 Aug 2021 10:32:57 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/security-of-iot/</guid>
<description>Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.</description>
</item>
<item>
<title>Hardware Security</title>
<link>http://blog.morgan.kr/2021/08/hardware-security/</link>
<pubDate>Fri, 06 Aug 2021 10:31:09 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/hardware-security/</guid>
<description>Hardware Security 신뢰성과 관련된 기술 1. RoT (Root of Trust) Root of Trust, 신뢰점이란, 전자기기 안에서 별도로 존재하는 프로세싱 유닛으로, 메인 프로세서의 보조로서 다양한 암호화 기법이나 솔루션을 제공하거나 이를 제어하기 위한 보안 기능들을 의미한다. RoT가 궁극적으로 달성하고자 하는 것은 TC(Trusted Computing)으로, 신뢰할 수 있는 컴퓨팅, 즉 믿을 만 하고 무결성이 보장되는 계산 및 기능을 이야기한다. 이를 달성하기 위한, RoT에 포함되는 여러가지 기술들이나 알고리즘이 있고, 각 단계들을 순차적으로 달성되어 신뢰할 수 있는 보안적인 프로세스가 진행된다.</description>
</item>
<item>
<title>CFD with Python (Navier-Stokes Equation)</title>
<link>http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/</link>
<pubDate>Sat, 10 Jul 2021 08:23:47 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/</guid>
<description>1-D Linear Convection 1차원 선형 열전도 방정식은 가장 심플하면서도 가장 기초적인 방정식입니다.
$$ \frac{\partial u}{\partial t} + c \frac{\partial u}{\partial x} = 0 $$
이 식을 오일러 방정식으로 변환하여 수치해석적으로 해를 구할 수 있도록 변환을 해줍니다.
$$ ui^{n+1} = u_i^n - c \frac{\Delta t}{\Delta x}(u_i^n-u{i-1}^n) $$
이제 이 오일러 방정식을 파이썬으로 구현해봅니다.
import numpy from matplotlib import pyplot import time, sys %matplotlib inline nx = 41 # try changing this number from 41 to 81 and Run All .</description>
</item>
<item>
<title>Cryptography</title>
<link>http://blog.morgan.kr/2021/07/cryptography/</link>
<pubDate>Fri, 09 Jul 2021 10:24:00 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/07/cryptography/</guid>
<description>Cryptography 공개키 암호화 알고리즘. 1. Diffie-Hellman 디피-헬먼 키 교환 방식은 암호화 통신을 위한 키를 교환하는 방식 중 하나이다. 두 통신 주체가 공통의 비밀 키를 사용할 수 있도록 하는 안전한 알고리즘이다. 디피-헬먼 방식은 기초적인 암호 통신 방법으로, 이 알고리즘에 RSA나 ECC같은 암호화 알고리즘을 합쳐서 암호화 통신이 성립된다. 공개키는 암호화할 수 있는 키이고, 개인키는 복호화할 수 있는 키이다.
디피-헬먼 키 교환은 공개키 암호화 방식에 기반한다. 공개키 암호화 방식이란, 자신의 공개키를 상대방에게 전송하고, 그 상대방은 그 공개키로 데이터를 암호화해서 전송하면, 자신은 자신의 개인키로 복호화 할 수 있어, 통신이 성립되는 방식이다.</description>
</item>
<item>
<title>파이썬으로 구현한 뉴턴의 방정식과 적분방정식</title>
<link>http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/</link>
<pubDate>Fri, 21 May 2021 13:18:27 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/</guid>
<description>우리의 세계에서 물체의 역학적 운동을 지배하는, 지배방정식이 있죠.뉴턴의 법칙, 방정식입니다.뉴턴의 법칙은 총 세개의 방정식이 있죠. 이 세가지 법칙만을 이용해서 물체의 운동을 계산할 수 있습니다.이것을 바탕으로 만들어진 역설이 라플라스의 역설이죠. 만약 모든 분자의 가속도, 속도, 위치 세가지 정보를 알고 있다면, 뉴턴의 법칙에 근거하여 그 다음 상황을 예측할 수 있고, 따라서 이 세상, 아니면 그것을 넘어서서 모든 분자의 정보를 알 수 있습니다.우리가 여기서 분석할 것은 가장 쉬운 법칙, 뉴턴의 제 2법칙, 가속도의 법칙입니다.</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>http://blog.morgan.kr/posts/</title>
<link rel="canonical" href="http://blog.morgan.kr/posts/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://blog.morgan.kr/posts/">
</head>
</html>

124
public/sitemap.xml Normal file
View File

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>http://blog.morgan.kr/2023/11/kernel-pty-and-tty/</loc>
<lastmod>2023-11-26T10:47:11+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/</loc>
<lastmod>2023-11-26T10:47:11+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/posts/</loc>
<lastmod>2023-11-26T10:47:11+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2023/11/kernel-process-creation/</loc>
<lastmod>2023-11-26T07:44:51+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2023/11/kernel-bootloader/</loc>
<lastmod>2023-11-22T05:35:09+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2023/11/kernel-syscalls/</loc>
<lastmod>2023-11-11T01:22:30+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2023/10/chat-with-gpt-about-nuclear-fission/</loc>
<lastmod>2023-10-27T09:10:25+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/</loc>
<lastmod>2023-10-23T09:45:50+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/operating-mirroring-server/</loc>
<lastmod>2023-10-23T09:45:50+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2023/10/toward-an-electronically-mediated-decentralized-society/</loc>
<lastmod>2023-10-04T21:50:35+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/usb-c-and-dp-alt-mode/</loc>
<lastmod>2023-05-06T12:55:32+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/</loc>
<lastmod>2022-12-15T11:21:46+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/2022041406/</loc>
<lastmod>2022-04-14T06:55:25+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/%EB%8B%A4%EB%A5%B8-%EC%82%AC%EB%9E%8C%EC%9D%98-%EC%A7%91%EC%97%90-%EC%82%B0%EB%8B%A4%EB%8A%94-%EA%B2%83/</loc>
<lastmod>2022-04-09T04:02:17+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/godeunghaggyo-dolabogi/</loc>
<lastmod>2021-12-21T16:23:55+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/daehag-ibsiga-handangye-namassda/</loc>
<lastmod>2021-12-01T08:09:52+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/10/spectre-attacks-exploiting-speculative-execution/</loc>
<lastmod>2021-10-30T07:19:36+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/jeonja-jeeoyi-segyein-mirae-geu-boanyi-wihyeob/</loc>
<lastmod>2021-10-30T07:17:47+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/10/ad-tech%EC%99%80-%ED%86%B5%EA%B3%84%EC%9D%98-%EC%93%B0%EC%9E%84%EC%83%88/</loc>
<lastmod>2021-10-30T07:10:34+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/yangjadeulyi-teuraenjiseuteo/</loc>
<lastmod>2021-10-30T07:09:53+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/10/%EA%B5%AC%EA%B8%80-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%9E%AD%ED%81%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98/</loc>
<lastmod>2021-10-30T07:07:55+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/insaeng-dubeonjjae-silpae/</loc>
<lastmod>2021-10-23T08:52:59+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%98%EA%B3%A0-%EC%9E%88%EB%8A%94%EA%B1%B8%EA%B9%8C/</loc>
<lastmod>2021-10-23T08:52:15+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/haggyoeseo-haessdeon-peurojegteudeul/</loc>
<lastmod>2021-10-23T08:51:44+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/gaeinjeongbo-privacy/</loc>
<lastmod>2021-10-23T08:31:52+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/datacenter/</loc>
<lastmod>2021-10-23T08:15:14+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/beulrogeu-geulsseugineun-neomu-himdeuleo/</loc>
<lastmod>2021-10-08T05:19:00+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/%EB%82%98%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%84-%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B1%B8%EA%B9%8C/</loc>
<lastmod>2021-09-11T01:20:00+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/attitude-for-criticism/</loc>
<lastmod>2021-09-10T07:30:10+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/08/%EC%96%91%EC%9E%90-%EC%BB%B4%ED%93%A8%ED%84%B0%EC%99%80-%EC%96%91%EC%9E%90-%EC%96%B4%EB%8B%90%EB%A7%81/</loc>
<lastmod>2021-08-06T10:36:03+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/tags/security/</loc>
<lastmod>2021-08-06T10:32:57+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/08/security-of-iot/</loc>
<lastmod>2021-08-06T10:32:57+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/tags/</loc>
<lastmod>2021-08-06T10:32:57+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/08/hardware-security/</loc>
<lastmod>2021-08-06T10:31:09+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/07/cfd-with-python-navier-stokes-equation/</loc>
<lastmod>2021-07-10T08:23:47+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/07/cryptography/</loc>
<lastmod>2021-07-09T10:24:00+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/20210620-siheomeul-iljuil-apdugo/</loc>
<lastmod>2021-06-20T09:23:28+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/2021/05/%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C-%EA%B5%AC%ED%98%84%ED%95%9C-%EB%89%B4%ED%84%B4%EC%9D%98-%EB%B0%A9%EC%A0%95%EC%8B%9D%EA%B3%BC-%EC%A0%81%EB%B6%84%EB%B0%A9%EC%A0%95%EC%8B%9D/</loc>
<lastmod>2021-05-21T13:18:27+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/blog/what-i-wanted-to-do/</loc>
<lastmod>2021-01-28T06:14:00+00:00</lastmod>
</url><url>
<loc>http://blog.morgan.kr/categories/</loc>
</url>
</urlset>

150
public/tags/index.html Normal file
View File

@ -0,0 +1,150 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>Tags | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Hi! I&#39;m Morgan!">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/tags/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://blog.morgan.kr/tags/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="Tags" />
<meta property="og:description" content="Hi! I&#39;m Morgan!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://blog.morgan.kr/tags/" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="Tags"/>
<meta name="twitter:description" content="Hi! I&#39;m Morgan!"/>
</head>
<body class="list dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<header class="page-header">
<h1>Tags</h1>
</header>
<ul class="terms-tags">
<li>
<a href="http://blog.morgan.kr/tags/security/">security <sup><strong><sup>1</sup></strong></sup> </a>
</li>
</ul>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
</body>
</html>

20
public/tags/index.xml Normal file
View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>Tags on Morgan&#39;s Blog</title>
<link>http://blog.morgan.kr/tags/</link>
<description>Recent content in Tags on Morgan&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<lastBuildDate>Fri, 06 Aug 2021 10:32:57 +0000</lastBuildDate><atom:link href="http://blog.morgan.kr/tags/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>security</title>
<link>http://blog.morgan.kr/tags/security/</link>
<pubDate>Fri, 06 Aug 2021 10:32:57 +0000</pubDate>
<guid>http://blog.morgan.kr/tags/security/</guid>
<description></description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,162 @@
<!DOCTYPE html>
<html lang="en" dir="auto">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="robots" content="index, follow">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>security | Morgan&#39;s Blog</title>
<meta name="keywords" content="">
<meta name="description" content="Hi! I&#39;m Morgan!">
<meta name="author" content="Me">
<link rel="canonical" href="http://blog.morgan.kr/tags/security/">
<script type="text/javascript">
let vh = window.innerHeight * 0.01;
document.documentElement.style.setProperty('--vh', `${vh}px`);
</script>
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM&#43;DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
renderMathInElement(document.body, {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false}
]
});
});
</script>
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
<meta name="theme-color" content="#2e2e33">
<meta name="msapplication-TileColor" content="#2e2e33">
<link rel="alternate" type="application/rss+xml" href="http://blog.morgan.kr/tags/security/index.xml">
<noscript>
<style>
#theme-toggle,
.top-link {
display: none;
}
</style>
</noscript><meta property="og:title" content="security" />
<meta property="og:description" content="Hi! I&#39;m Morgan!" />
<meta property="og:type" content="website" />
<meta property="og:url" content="http://blog.morgan.kr/tags/security/" /><meta property="og:site_name" content="Morgan&#39;s Blog" />
<meta name="twitter:card" content="summary"/>
<meta name="twitter:title" content="security"/>
<meta name="twitter:description" content="Hi! I&#39;m Morgan!"/>
</head>
<body class="list dark" id="top"><header class="header">
</header>
<script>
if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
document.getElementById('main-logo').src = "\/favicon-inv.png";
}
</script>
<main class="main">
<header class="page-header post-title-header">
<h1>
security
</h1>
</header>
<div class="posts-entry-div">
<article class="post-entry tag-entry">
<header class="entry-header">
<h2>Security of IoT
</h2>
</header>
<div class="entry-content">
<p>Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다....</p>
</div>
<footer class="entry-footer">&lt;span title=&#39;2021-08-06 10:32:57 &#43;0000 UTC&#39;&gt;Aug 6, 2021&lt;/span&gt;&amp;nbsp;·&amp;nbsp;Me</footer>
<a class="entry-link" aria-label="post link to Security of IoT" href="http://blog.morgan.kr/2021/08/security-of-iot/"></a>
</article>
</div>
</main>
<footer class="footer">
<a href="/admin/" style="text-decoration: none;">&copy;</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
<br/>
<span style="">Ver.11081623 </span>
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
</footer>
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
</button>
<script>
let menu = document.getElementById('menu')
if (menu) {
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
menu.onscroll = function () {
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
}
}
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener("click", function (e) {
e.preventDefault();
var id = this.getAttribute("href").substr(1);
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
behavior: "smooth"
});
} else {
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
}
if (id === "top") {
history.replaceState(null, null, " ");
} else {
history.pushState(null, null, `#${id}`);
}
});
});
</script>
<script>
var mybutton = document.getElementById("top-link");
window.onscroll = function () {
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
mybutton.style.visibility = "visible";
mybutton.style.opacity = "1";
} else {
mybutton.style.visibility = "hidden";
mybutton.style.opacity = "0";
}
};
</script>
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
document.getElementById('main-logo').src = "\/favicon-inv.png";
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
document.getElementById('main-logo').src = "\/favicon.png";
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>security on Morgan&#39;s Blog</title>
<link>http://blog.morgan.kr/tags/security/</link>
<description>Recent content in security on Morgan&#39;s Blog</description>
<generator>Hugo -- gohugo.io</generator>
<language>en</language>
<lastBuildDate>Fri, 06 Aug 2021 10:32:57 +0000</lastBuildDate><atom:link href="http://blog.morgan.kr/tags/security/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>Security of IoT</title>
<link>http://blog.morgan.kr/2021/08/security-of-iot/</link>
<pubDate>Fri, 06 Aug 2021 10:32:57 +0000</pubDate>
<guid>http://blog.morgan.kr/2021/08/security-of-iot/</guid>
<description>Security of IoT IoT란? IoT (Internet of Things)란, 독립적으로 존재했던 각종 전자기기 및 사물들이 인터넷으로 엮여 한번에 관리할 수 있게 되거나 상호 정보교환과 데이터 수집을 통해 사용자에게 최상의 서비스를 제공하는 기술을 의미이다. 여기에서 사물이라 함은 전구부터 세탁기, 그리고 신발이나 의류까지 모든 사물을 포함한다. 데이터를 분석하는 과정에서 인공지능을 주로 사용하므로 IoT에는 인공지능 기술이 들어가기도 한다.
IoT는 2013년부터 쭉 개발되어 왔으며 집에서 흔히 볼 수 있는 에어컨, 냉장고등 큰 가구들부터 연결되어 왔다. 그 이후 시간이 지나면서 점점 작은 기구들까지 연결되면서, TV, 전자레인지, 오븐부터 커피포트, 선풍기, 전등 뿐 아니라 변기, 샤워기, 거울, 헤어 드라이기까지 연결되어 있지 않은 것이 없을 정도로 발전되어 왔다.</description>
</item>
</channel>
</rss>

View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>http://blog.morgan.kr/tags/security/</title>
<link rel="canonical" href="http://blog.morgan.kr/tags/security/">
<meta name="robots" content="noindex">
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=http://blog.morgan.kr/tags/security/">
</head>
</html>