<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT기초 보관 - 하우인포-IT·테크</title>
	<atom:link href="https://howinfo.kr/category/it-tech/basics/feed/" rel="self" type="application/rss+xml" />
	<link>https://howinfo.kr/category/it-tech/basics/</link>
	<description>IT·AI 자동화 &#38; 인프라 전문 블로그 (하우인포)</description>
	<lastBuildDate>Sat, 28 Feb 2026 00:28:24 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://howinfo.kr/wp-content/uploads/2026/02/cropped-ChatGPT-Image-2026년-2월-12일-오후-05_39_40-32x32.png</url>
	<title>IT기초 보관 - 하우인포-IT·테크</title>
	<link>https://howinfo.kr/category/it-tech/basics/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>파이썬 프로그램을 윈도우 EXE로 만드는 방법 (PyInstaller 실전 가이드)</title>
		<link>https://howinfo.kr/%ed%8c%8c%ec%9d%b4%ec%8d%ac-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ec%9d%84-%ec%9c%88%eb%8f%84%ec%9a%b0-exe%eb%a1%9c-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-pyinstaller-%ec%8b%a4%ec%a0%84/</link>
					<comments>https://howinfo.kr/%ed%8c%8c%ec%9d%b4%ec%8d%ac-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ec%9d%84-%ec%9c%88%eb%8f%84%ec%9a%b0-exe%eb%a1%9c-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-pyinstaller-%ec%8b%a4%ec%a0%84/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Sat, 28 Feb 2026 00:28:23 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[exe배포]]></category>
		<category><![CDATA[Pyinstaller]]></category>
		<category><![CDATA[tkinter]]></category>
		<category><![CDATA[개발팁]]></category>
		<category><![CDATA[배포자동화]]></category>
		<category><![CDATA[빌드]]></category>
		<category><![CDATA[윈도우exe]]></category>
		<category><![CDATA[파이썬]]></category>
		<category><![CDATA[파이썬패키징]]></category>
		<category><![CDATA[프로그램 배포]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=2108</guid>

					<description><![CDATA[<p>파이썬으로 만든 스크립트가 잘 돌아가도, 주변 사람에게 공유하려면 항상 이런 문제가 생깁니다. 그래서 결국 많이 선택하는 방법이 EXE로 패키징하는 겁니다.이번...</p>
<p>게시물 <a href="https://howinfo.kr/%ed%8c%8c%ec%9d%b4%ec%8d%ac-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ec%9d%84-%ec%9c%88%eb%8f%84%ec%9a%b0-exe%eb%a1%9c-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-pyinstaller-%ec%8b%a4%ec%a0%84/">파이썬 프로그램을 윈도우 EXE로 만드는 방법 (PyInstaller 실전 가이드)</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<p>파이썬으로 만든 스크립트가 잘 돌아가도, 주변 사람에게 공유하려면 항상 이런 문제가 생깁니다.</p>



<ul class="wp-block-list">
<li>“파이썬 설치해야 해?”</li>



<li>“pip로 뭐 설치해야 해?”</li>



<li>“실행했더니 검은 창만 뜨고 꺼지는데?”</li>
</ul>



<p>그래서 결국 많이 선택하는 방법이 <strong>EXE로 패키징</strong>하는 겁니다.<br>이번 글은 제가 실제로 가장 많이 쓰는 도구인 <strong>PyInstaller</strong> 기준으로, “초보도 따라 할 수 있게” 정리했습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1) EXE 만들기 전에 꼭 알아야 할 것</h2>



<h3 class="wp-block-heading">✅ EXE로 만들면 좋은 점</h3>



<ul class="wp-block-list">
<li>파이썬이 설치되지 않은 PC에서도 실행 가능(대부분의 경우)</li>



<li>배포/공유가 편해짐</li>



<li>파일 1개(또는 폴더 1개)로 정리 가능</li>
</ul>



<h3 class="wp-block-heading">⚠️ 현실적으로 생기는 문제</h3>



<ul class="wp-block-list">
<li>용량이 커짐(수십~수백 MB도 흔함)</li>



<li>백신 오탐(특히 새로 만든 exe)</li>



<li>경로 문제(파일 저장/설정 파일 위치)</li>



<li>GUI(Tkinter 등)에서는 괜찮은데, 콘솔 출력은 안 보이기도 함</li>
</ul>



<p>이걸 미리 알고 가면 삽질이 크게 줄어요.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2) 준비물: 파이썬/폴더 구조 추천</h2>



<h3 class="wp-block-heading">권장 폴더 구조 예시</h3>



<pre class="wp-block-preformatted">my_app/<br>  main.py<br>  core/<br>  assets/<br>  data/<br>  requirements.txt</pre>



<ul class="wp-block-list">
<li><strong>assets/</strong> : 이미지, 아이콘 등 리소스</li>



<li><strong>data/</strong> : 설정 파일, 저장 파일(앱 실행 중 생성되는 데이터)</li>



<li><strong>requirements.txt</strong> : 의존성 목록</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3) PyInstaller 설치</h2>



<p>가장 먼저 <strong>가상환경</strong>을 추천합니다. (빌드가 깔끔해져요)</p>



<h3 class="wp-block-heading">(선택) 가상환경 만들기</h3>



<pre class="wp-block-preformatted">cd my_app<br>python -m venv .venv<br>.venv\Scripts\activate</pre>



<h3 class="wp-block-heading">PyInstaller 설치</h3>



<pre class="wp-block-preformatted">python -m pip install --upgrade pip<br>pip install pyinstaller</pre>



<p>설치 확인:</p>



<pre class="wp-block-preformatted">pyinstaller --version</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4) 가장 기본 빌드: onefile로 EXE 만들기</h2>



<h3 class="wp-block-heading">콘솔 프로그램(터미널 창 필요)</h3>



<pre class="wp-block-preformatted">pyinstaller --onefile main.py</pre>



<h3 class="wp-block-heading">GUI 프로그램(창만 띄우고 콘솔 숨김)</h3>



<pre class="wp-block-preformatted">pyinstaller --onefile --noconsole main.py</pre>



<p>빌드가 끝나면 보통 아래 폴더가 생깁니다.</p>



<ul class="wp-block-list">
<li><code>dist/</code> : 실제 배포 파일(exe)</li>



<li><code>build/</code> : 빌드 캐시</li>



<li><code>main.spec</code> : 빌드 설정 파일</li>
</ul>



<p>결과 EXE는 <code>dist/main.exe</code> 에서 확인합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5) 아이콘 넣기(윈도우 exe 느낌 살리기)</h2>



<p>아이콘은 <code>.ico</code> 파일이 필요합니다. (png 그대로는 안됨)</p>



<pre class="wp-block-preformatted">pyinstaller --onefile --noconsole --icon=assets/app.ico main.py</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6) 이미지/설정파일 등 “외부 파일” 포함하기</h2>



<p>여기서 많이 막힙니다.<br>파이썬에서는 상대경로로 잘 읽히는데, exe로 묶이면 경로가 달라져요.</p>



<h3 class="wp-block-heading">6-1) 빌드 옵션으로 파일 포함</h3>



<p>예: <code>assets/</code> 폴더를 함께 포함</p>



<pre class="wp-block-preformatted">pyinstaller --onefile --noconsole ^<br>  --add-data "assets;assets" ^<br>  main.py</pre>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>윈도우에서 <code>--add-data "원본;대상"</code> 형태로 세미콜론(<code>;</code>)을 사용합니다.</p>
</blockquote>



<h3 class="wp-block-heading">6-2) exe 환경에서 경로 처리(핵심)</h3>



<p>파이썬 코드에서 “실행 위치”를 잡는 함수를 넣어두면 안정적입니다.</p>



<pre class="wp-block-preformatted">import os, sysdef resource_path(relative_path: str) -&gt; str:<br>    # PyInstaller로 묶이면 _MEIPASS 경로에 리소스가 풀림<br>    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))<br>    return os.path.join(base_path, relative_path)</pre>



<p>사용 예:</p>



<pre class="wp-block-preformatted">icon_path = resource_path("assets/app.ico")</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7) “exe 실행하면 저장이 안돼요/초기화돼요” 문제 해결</h2>



<p>이 현상은 거의 대부분 <strong>저장 위치가 잘못 잡혀서</strong> 생깁니다.</p>



<ul class="wp-block-list">
<li>개발 중: 프로젝트 폴더에 저장</li>



<li>exe 실행: 사용자 PC의 다른 위치에서 실행 → 상대경로가 달라짐</li>



<li>또는 Program Files 아래라면 쓰기 권한 문제로 저장 실패</li>
</ul>



<h3 class="wp-block-heading">추천: 사용자 폴더(AppData) 아래에 저장 폴더 만들기</h3>



<pre class="wp-block-preformatted">import osdef get_app_data_dir(app_name="MyApp"):<br>    base = os.getenv("APPDATA")  # C:\Users\...\AppData\Roaming<br>    path = os.path.join(base, app_name)<br>    os.makedirs(path, exist_ok=True)<br>    return path</pre>



<p>저장 예:</p>



<pre class="wp-block-preformatted">cfg_path = os.path.join(get_app_data_dir("HStockGuard"), "config.json")</pre>



<p>이렇게 하면 exe로 배포해도 <strong>설정/저장 데이터가 유지</strong>됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8) 자주 겪는 에러/해결 체크리스트</h2>



<h3 class="wp-block-heading">✅ 실행하자마자 창이 꺼짐</h3>



<ul class="wp-block-list">
<li>콘솔 모드로 빌드해서 에러 확인<br><code>--noconsole</code> 빼고 실행해보기</li>
</ul>



<h3 class="wp-block-heading">✅ 모듈 못 찾는다고 나옴</h3>



<ul class="wp-block-list">
<li>누락된 모듈을 hidden-import로 추가</li>
</ul>



<pre class="wp-block-preformatted">pyinstaller --onefile --hidden-import=패키지명 main.py</pre>



<h3 class="wp-block-heading">✅ 백신이 위험하다고 막음</h3>



<ul class="wp-block-list">
<li>새 exe는 오탐이 흔함</li>



<li>코드서명까지는 현실적으로 어렵고, 최소한 배포 파일을 자주 바꾸지 않는 게 도움</li>



<li>가능하면 <code>onedir</code> 배포도 고려(오탐이 덜 나는 경우가 있음)</li>
</ul>



<h3 class="wp-block-heading">✅ 용량이 너무 큼</h3>



<ul class="wp-block-list">
<li>가상환경을 깨끗하게 유지</li>



<li>불필요한 패키지 제거</li>



<li><code>--exclude-module</code> 사용 고려(상황에 따라)</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9) 배포 방식 추천: onefile vs onedir</h2>



<h3 class="wp-block-heading">onefile</h3>



<ul class="wp-block-list">
<li>장점: 파일 1개로 배포 끝</li>



<li>단점: 실행 시 임시폴더에 풀리는 과정 때문에 첫 실행이 느릴 수 있음</li>
</ul>



<h3 class="wp-block-heading">onedir</h3>



<pre class="wp-block-preformatted">pyinstaller --noconsole main.py</pre>



<ul class="wp-block-list">
<li>장점: 실행 빠르고 문제 추적이 쉬움</li>



<li>단점: 폴더째로 배포해야 함</li>
</ul>



<p>개인적으로는 <strong>처음엔 onedir로 안정화 → 마지막에 onefile</strong>로 마무리하는 경우가 많았습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">FAQ</h2>



<p><strong>Q1. PyInstaller 말고 다른 방법도 있나요?</strong><br>A. 네. <code>cx_Freeze</code>, <code>Nuitka</code> 같은 대안도 있습니다. 다만 가장 대중적이고 자료가 많은 건 PyInstaller입니다.</p>



<p><strong>Q2. 32비트/64비트는 어떻게 맞추나요?</strong><br>A. 빌드에 사용하는 파이썬이 64비트면 보통 64비트 exe가 됩니다. 배포 대상 PC 환경과 맞추세요.</p>



<p><strong>Q3. exe로 만들면 소스가 완전히 숨겨지나요?</strong><br>A. 완전한 보안은 아닙니다. “배포 편의” 목적에 가깝다고 보는 게 현실적입니다.</p>



<h1 class="wp-block-heading">부록) 그대로 복사해서 쓰는 샘플 코드(저장 유지 + 리소스 경로)</h1>



<h2 class="wp-block-heading">core/paths.py</h2>



<pre class="wp-block-preformatted">import os<br>import sysdef resource_path(relative_path: str) -&gt; str:<br>    """<br>    PyInstaller(onefile)에서 리소스 경로를 안전하게 가져온다.<br>    """<br>    base_path = getattr(sys, "_MEIPASS", os.path.dirname(os.path.abspath(__file__)))<br>    return os.path.join(base_path, relative_path)def appdata_dir(app_name: str = "MyApp") -&gt; str:<br>    """<br>    AppData\Roaming 아래에 앱 폴더를 생성해 저장 경로로 사용한다.<br>    """<br>    base = os.getenv("APPDATA") or os.path.expanduser("~")<br>    path = os.path.join(base, app_name)<br>    os.makedirs(path, exist_ok=True)<br>    return path</pre>



<h2 class="wp-block-heading">core/config.py</h2>



<pre class="wp-block-preformatted">import json<br>import os<br>from .paths import appdata_dirdef load_config(app_name: str = "MyApp", filename: str = "config.json") -&gt; dict:<br>    path = os.path.join(appdata_dir(app_name), filename)<br>    if not os.path.exists(path):<br>        return {}<br>    with open(path, "r", encoding="utf-8") as f:<br>        return json.load(f)def save_config(cfg: dict, app_name: str = "MyApp", filename: str = "config.json") -&gt; str:<br>    path = os.path.join(appdata_dir(app_name), filename)<br>    with open(path, "w", encoding="utf-8") as f:<br>        json.dump(cfg, f, ensure_ascii=False, indent=2)<br>    return path</pre>



<h2 class="wp-block-heading">main.py (테스트용)</h2>



<pre class="wp-block-preformatted">from core.config import load_config, save_configAPP_NAME = "HowinfoPyExeDemo"def main():<br>    cfg = load_config(APP_NAME)<br>    run_count = int(cfg.get("run_count", 0)) + 1<br>    cfg["run_count"] = run_count    saved_path = save_config(cfg, APP_NAME)<br>    print(f"[OK] 실행 횟수: {run_count}")<br>    print(f"[OK] 설정 저장 위치: {saved_path}")if __name__ == "__main__":<br>    main()</pre>



<h2 class="wp-block-heading">빌드 명령어(윈도우)</h2>



<pre class="wp-block-preformatted">pyinstaller --onefile main.py</pre>



<p>GUI + 아이콘 + assets 포함 예시:</p>



<pre class="wp-block-preformatted">pyinstaller --onefile --noconsole ^<br>  --icon=assets/app.ico ^<br>  --add-data "assets;assets" ^<br>  main.py<br></pre>
<p>게시물 <a href="https://howinfo.kr/%ed%8c%8c%ec%9d%b4%ec%8d%ac-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ec%9d%84-%ec%9c%88%eb%8f%84%ec%9a%b0-exe%eb%a1%9c-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-pyinstaller-%ec%8b%a4%ec%a0%84/">파이썬 프로그램을 윈도우 EXE로 만드는 방법 (PyInstaller 실전 가이드)</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/%ed%8c%8c%ec%9d%b4%ec%8d%ac-%ed%94%84%eb%a1%9c%ea%b7%b8%eb%9e%a8%ec%9d%84-%ec%9c%88%eb%8f%84%ec%9a%b0-exe%eb%a1%9c-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-pyinstaller-%ec%8b%a4%ec%a0%84/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MCP란 무엇인가?</title>
		<link>https://howinfo.kr/mcp%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80/</link>
					<comments>https://howinfo.kr/mcp%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Mon, 23 Feb 2026 12:05:44 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[AI Agent]]></category>
		<category><![CDATA[AI 서버구조]]></category>
		<category><![CDATA[AI 연동]]></category>
		<category><![CDATA[AI기초]]></category>
		<category><![CDATA[AI인프라]]></category>
		<category><![CDATA[AI자동화 구조]]></category>
		<category><![CDATA[AI프로토콜]]></category>
		<category><![CDATA[LLM 아키텍쳐]]></category>
		<category><![CDATA[MCP]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=2019</guid>

					<description><![CDATA[<p>Model Context Protocol 기초부터 이해하기 1️⃣ MCP는 왜 등장했을까? AI 모델은 매우 똑똑합니다. 하지만 기본적으로는 이런 구조입니다. 사용자 → AI...</p>
<p>게시물 <a href="https://howinfo.kr/mcp%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80/">MCP란 무엇인가?</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">Model Context Protocol 기초부터 이해하기</h2>



<h2 class="wp-block-heading">1️⃣ MCP는 왜 등장했을까?</h2>



<p>AI 모델은 매우 똑똑합니다.</p>



<p>하지만 기본적으로는 이런 구조입니다.</p>



<pre class="wp-block-preformatted">사용자 → AI 모델 → 텍스트 응답</pre>



<p>문제가 무엇일까요?</p>



<p>AI는:</p>



<ul class="wp-block-list">
<li>내 컴퓨터 파일을 읽지 못함</li>



<li>사내 DB에 직접 접근 못함</li>



<li>API를 스스로 호출하지 못함</li>



<li>서버를 제어하지 못함</li>
</ul>



<p>즉, <strong>생각은 하지만 행동은 못 합니다.</strong></p>



<p>이 한계를 해결하기 위해 등장한 개념이<br>바로 <strong>MCP (Model Context Protocol)</strong> 입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2️⃣ MCP란 무엇인가?</h2>



<p>MCP는 쉽게 말해:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>AI 모델이 외부 도구와 안전하게 연결되도록 해주는 표준 인터페이스 구조</p>
</blockquote>



<p>조금 더 풀어보면,</p>



<p>AI가 단순히 답변하는 존재가 아니라<br><strong>외부 시스템을 사용할 수 있도록 연결하는 통로</strong>입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3️⃣ 기본 구조 이해하기</h2>



<h3 class="wp-block-heading">🔹 기존 AI 구조</h3>



<figure class="wp-block-image"><img decoding="async" src="https://www.researchgate.net/publication/377662177/figure/fig1/AS%3A11431281270420550%401723083617086/Illustrates-the-workflow-of-a-conversational-AI-model-speech-to-text-conversion-natural.png" alt="https://www.researchgate.net/publication/377662177/figure/fig1/AS%3A11431281270420550%401723083617086/Illustrates-the-workflow-of-a-conversational-AI-model-speech-to-text-conversion-natural.png"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://svg.template.creately.com/iutwrw2j1" alt="https://svg.template.creately.com/iutwrw2j1"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://www.researchgate.net/publication/395857907/figure/fig2/AS%3A11431281649134107%401758874390422/LLM-prompt-logic-flowchart-Selected-relevant-paragraphs-of-text-from-the-articles-were.jpg" alt="https://www.researchgate.net/publication/395857907/figure/fig2/AS%3A11431281649134107%401758874390422/LLM-prompt-logic-flowchart-Selected-relevant-paragraphs-of-text-from-the-articles-were.jpg"/></figure>



<pre class="wp-block-preformatted">사용자<br>   ↓<br>AI 모델<br>   ↓<br>텍스트 응답</pre>



<p>이 구조에서는<br>AI가 외부 시스템을 직접 사용할 수 없습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🔹 MCP 구조</h3>



<figure class="wp-block-image"><img decoding="async" src="https://miro.medium.com/1%2A-Pkc7FM5Z_6EeIOiUFB9aw.png" alt="https://miro.medium.com/1%2A-Pkc7FM5Z_6EeIOiUFB9aw.png"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://substackcdn.com/image/fetch/%24s_%215Qxi%21%2Cw_1200%2Ch_675%2Cc_fill%2Cf_jpg%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Cg_auto/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc01797d-9996-4b83-a00f-6771b8071d97_900x500.png" alt="https://substackcdn.com/image/fetch/%24s_%215Qxi%21%2Cw_1200%2Ch_675%2Cc_fill%2Cf_jpg%2Cq_auto%3Agood%2Cfl_progressive%3Asteep%2Cg_auto/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc01797d-9996-4b83-a00f-6771b8071d97_900x500.png"/></figure>



<figure class="wp-block-image"><img decoding="async" src="https://cdn.prod.website-files.com/62db30bc372ce21ab184bf7b/68605abb92db1ba0b18a7c00_diagram-export-6-28-2025-5_12_21-PM.png" alt="https://cdn.prod.website-files.com/62db30bc372ce21ab184bf7b/68605abb92db1ba0b18a7c00_diagram-export-6-28-2025-5_12_21-PM.png"/></figure>



<p>4</p>



<pre class="wp-block-preformatted">사용자<br>   ↓<br>AI 모델 (MCP Client)<br>   ↓<br>MCP Server<br>   ↓<br>Tool / DB / File / API</pre>



<p>이 구조에서는<br>AI가 외부 도구를 호출할 수 있습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4️⃣ MCP의 핵심 구성 요소</h2>



<h3 class="wp-block-heading">1️⃣ MCP Client</h3>



<p>AI 모델이 요청을 보내는 역할</p>



<h3 class="wp-block-heading">2️⃣ MCP Server</h3>



<p>실제로 외부 시스템과 연결되는 중간 계층</p>



<h3 class="wp-block-heading">3️⃣ Tool (도구)</h3>



<p>AI가 사용할 수 있도록 등록된 기능들</p>



<p>예시:</p>



<ul class="wp-block-list">
<li>get_stock_price()</li>



<li>read_file()</li>



<li>query_database()</li>



<li>send_notification()</li>
</ul>



<p>중요한 점은:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>AI는 직접 실행하지 않고<br>MCP 서버를 통해 안전하게 실행합니다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5️⃣ 왜 이런 구조가 필요할까?</h2>



<p>AI가 외부 시스템에 바로 접근하면:</p>



<ul class="wp-block-list">
<li>보안 문제 발생</li>



<li>무제한 실행 위험</li>



<li>시스템 손상 가능성</li>
</ul>



<p>MCP는:</p>



<ul class="wp-block-list">
<li>허용된 도구만 실행</li>



<li>정의된 형식으로 요청</li>



<li>권한 통제 가능</li>
</ul>



<p>즉, <strong>안전한 연결 구조</strong>를 제공합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6️⃣ MCP와 기존 자동화의 차이</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>일반 챗봇</th><th>MCP 기반 구조</th></tr></thead><tbody><tr><td>파일 접근</td><td>불가</td><td>가능</td></tr><tr><td>DB 조회</td><td>불가</td><td>가능</td></tr><tr><td>API 호출</td><td>제한적</td><td>가능</td></tr><tr><td>시스템 제어</td><td>불가</td><td>가능</td></tr><tr><td>확장성</td><td>낮음</td><td>높음</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7️⃣ MCP를 한 문장으로 정리하면</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>MCP는 AI를 “답변 엔진”에서<br>“도구를 사용하는 시스템”으로 확장하는 구조입니다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8️⃣ 어디에 사용될까?</h2>



<p>MCP는 앞으로 다음과 같은 분야에서 활용됩니다:</p>



<ul class="wp-block-list">
<li>AI 기반 업무 자동화</li>



<li>데이터 분석 시스템</li>



<li>서버 운영 관리</li>



<li>사내 도구 연동</li>



<li>투자 분석 자동화</li>



<li>로컬 LLM 확장</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9️⃣ 정리</h2>



<p>MCP를 이해하는 핵심은 이것입니다.</p>



<p>AI의 한계는 “지능”이 아니라<br>“연결 구조”에 있습니다.</p>



<p>MCP는<br>그 연결 구조를 표준화하려는 시도입니다.</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/mcp%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80/">MCP란 무엇인가?</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/mcp%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>운영체제(OS)는 왜 필요한가? — 장애가 나면 답은 결국 OS 안에 있다</title>
		<link>https://howinfo.kr/%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9cos%eb%8a%94-%ec%99%9c-%ed%95%84%ec%9a%94%ed%95%9c%ea%b0%80-%ec%bb%a4%eb%84%90%c2%b7%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4%c2%b7%eb%a9%94%eb%aa%a8%eb%a6%ac/</link>
					<comments>https://howinfo.kr/%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9cos%eb%8a%94-%ec%99%9c-%ed%95%84%ec%9a%94%ed%95%9c%ea%b0%80-%ec%bb%a4%eb%84%90%c2%b7%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4%c2%b7%eb%a9%94%eb%aa%a8%eb%a6%ac/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 03:23:14 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[oom]]></category>
		<category><![CDATA[OS기초]]></category>
		<category><![CDATA[가상메모리]]></category>
		<category><![CDATA[리눅스]]></category>
		<category><![CDATA[메모리]]></category>
		<category><![CDATA[서버 트러블슈팅]]></category>
		<category><![CDATA[스왑]]></category>
		<category><![CDATA[운영체제]]></category>
		<category><![CDATA[커널]]></category>
		<category><![CDATA[프로세스]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1770</guid>

					<description><![CDATA[<p>0️⃣ 3줄 요약 1️⃣ OS가 왜 필요하냐고요? “장애가 나면” 바로 답이 나옵니다 운영체제는 평소엔 존재감이 거의 없습니다.그런데 서버가 느려지거나, 서비스가...</p>
<p>게시물 <a href="https://howinfo.kr/%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9cos%eb%8a%94-%ec%99%9c-%ed%95%84%ec%9a%94%ed%95%9c%ea%b0%80-%ec%bb%a4%eb%84%90%c2%b7%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4%c2%b7%eb%a9%94%eb%aa%a8%eb%a6%ac/">운영체제(OS)는 왜 필요한가? — 장애가 나면 답은 결국 OS 안에 있다</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">0️⃣ 3줄 요약</h2>



<ul class="wp-block-list">
<li>OS는 “있으면 좋은 것”이 아니라, 장애를 막는 안전장치다.</li>



<li>커널은 프로그램 대신 CPU·메모리·디스크·네트워크를 중재한다.</li>



<li>RAM 용량보다 <strong>swap·OOM·I/O wait</strong>을 볼 줄 아는 게 더 중요하다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1️⃣ OS가 왜 필요하냐고요? “장애가 나면” 바로 답이 나옵니다</h2>



<p>운영체제는 평소엔 존재감이 거의 없습니다.<br>그런데 서버가 느려지거나, 서비스가 갑자기 죽으면 상황이 달라집니다.</p>



<p>제가 실제로 겪었던 케이스들입니다.</p>



<ul class="wp-block-list">
<li>사이트가 갑자기 느려짐 → CPU 100% / I/O wait 증가 / swap 사용</li>



<li>잘 돌아가던 서비스가 새벽에 죽음 → OOM Killer</li>



<li>디스크 꽉 참 → 로그·백업·Docker 잔여물 폭증</li>



<li>SSH는 되는데 서비스는 안 뜸 → 권한/실행 계정 문제</li>
</ul>



<p>이때 OS는 배경이 아니라 <strong>사건 현장</strong>입니다.<br>커널·프로세스·메모리를 모르면 원인 추적 속도가 확실히 느립니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2️⃣ 한 문장 정의</h2>



<p>운영체제(OS)는 <strong>프로그램이 하드웨어를 안전하게 쓰도록 중재하는 관리자</strong>입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3️⃣ 그림 하나로 이해하기</h2>



<p>OS를 이렇게 생각하면 편합니다.</p>



<ul class="wp-block-list">
<li>프로그램 = 요청하는 사람</li>



<li>하드웨어(CPU/디스크/네트워크) = 자원</li>



<li>커널 = 자원 배분 관리자</li>
</ul>



<p>프로그램은 직접 CPU를 잡지 못합니다.<br>항상 커널을 통해서만 접근합니다.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="512" height="591" src="https://howinfo.kr/wp-content/uploads/2026/02/image-3.png" alt="" class="wp-image-1840" srcset="https://howinfo.kr/wp-content/uploads/2026/02/image-3.png 512w, https://howinfo.kr/wp-content/uploads/2026/02/image-3-260x300.png 260w" sizes="(max-width: 512px) 100vw, 512px" /></figure>



<h2 class="wp-block-heading">4️⃣ 커널(Kernel): 내가 모르는 사이에 다 대신 처리하는 관리자</h2>



<p>워드프레스 기준으로 보면 흐름은 이렇습니다.</p>



<ol class="wp-block-list">
<li>브라우저 요청 도착</li>



<li>커널이 네트워크 패킷 수신</li>



<li>웹서버(Nginx/Apache) 프로세스에 전달</li>



<li>디스크에서 파일 읽기</li>



<li>PHP 프로세스가 DB 접근</li>



<li>결과를 다시 네트워크로 전송</li>
</ol>



<p>여기서 느려지면 보통 <strong>커널이 관리하는 자원</strong> 중 하나가 병목입니다.</p>



<h3 class="wp-block-heading">제가 실제로 겪은 사례 3가지</h3>



<p>✔ CPU는 30%인데 서버가 멈춘 느낌<br>→ 원인은 I/O wait (디스크 대기)</p>



<p>✔ 트래픽 증가 후 502/504<br>→ 동시 연결 수 / 파일 핸들 한계</p>



<p>✔ systemd로 실행하면 실패<br>→ 실행 계정 권한 문제</p>



<p>앱만 보면 안 보이고, OS 자원 관점으로 봐야 잡히는 문제입니다.</p>



<h2 class="wp-block-heading">5️⃣ 프로세스(Process): 범인을 찾는 출발점</h2>



<p>실무에서 OS를 보는 가장 현실적인 이유는 단순합니다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>누가 자원을 먹고 있는지 찾는 것</p>
</blockquote>



<p>제가 항상 하는 순서:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="655" height="492" src="https://howinfo.kr/wp-content/uploads/2026/02/linux5.png" alt="" class="wp-image-1776" srcset="https://howinfo.kr/wp-content/uploads/2026/02/linux5.png 655w, https://howinfo.kr/wp-content/uploads/2026/02/linux5-300x225.png 300w" sizes="(max-width: 655px) 100vw, 655px" /></figure>



<pre class="wp-block-preformatted">top<br>free -h<br>df -h</pre>



<ul class="wp-block-list">
<li>CPU 100% 프로세스 → 무한 루프/계산 문제 가능성</li>



<li>메모리 계속 증가 → 누수 가능성</li>



<li>프로세스 사라짐 → OOM / 크래시 확인</li>
</ul>



<p>그리고 경험상, 프로세스는 거짓말을 하지 않습니다.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="653" height="416" src="https://howinfo.kr/wp-content/uploads/2026/02/linux1.png" alt="" class="wp-image-1771" srcset="https://howinfo.kr/wp-content/uploads/2026/02/linux1.png 653w, https://howinfo.kr/wp-content/uploads/2026/02/linux1-300x191.png 300w" sizes="(max-width: 653px) 100vw, 653px" /></figure>



<ul class="wp-block-list">
<li>CPU 100% 찍는 프로세스가 있으면, 뭔가 계산/루프/대기 문제가 있고</li>



<li>메모리가 계속 늘면, 누수(Leak)거나 캐시가 풀리지 않는 구조일 가능성이 높고</li>



<li>프로세스가 죽어 있으면, 누가 죽였는지(OOM/크래시/kill)를 OS 로그에서 찾을 수 있어요.</li>
</ul>



<h3 class="wp-block-heading">“프로세스가 여러 개라서 더 안전해진” 경험</h3>



<p>예전에 한 번은 웹서버+PHP가 한 덩어리처럼 꽉 묶여 있어서<br>하나가 죽으면 전체가 불안정해졌던 적이 있어요.<br>그 뒤로는 프로세스 분리/풀 관리가 되는 구조(Nginx ↔ PHP-FPM)를 선호하게 됐습니다.</p>



<ul class="wp-block-list">
<li>문제가 생겨도 “부분”만 영향을 받는 구조</li>



<li>그리고 문제를 “프로세스 단위”로 좁혀서 해결이 쉬움</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6️⃣ 메모리(Memory): RAM보다 swap과 OOM이 핵심</h2>



<p>초보 때는 “RAM이 많으면 안전하다”고 생각했습니다.<br>운영해보니 포인트는 다르더군요.</p>



<h3 class="wp-block-heading">메모리 문제의 전형적인 흐름</h3>



<ol class="wp-block-list">
<li>체감상 느려짐</li>



<li>swap 사용량 증가</li>



<li>load 상승</li>



<li>OOM Killer가 프로세스 강제 종료</li>
</ol>



<p>가장 당황스러운 순간은:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“내가 내린 적 없는데 서비스가 죽어 있음”</p>
</blockquote>



<p>하지만 OS는 흔적을 남깁니다.</p>



<pre class="wp-block-preformatted">dmesg | grep -i oom<br>journalctl -xe</pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="656" height="871" src="https://howinfo.kr/wp-content/uploads/2026/02/linux4.png" alt="" class="wp-image-1772" srcset="https://howinfo.kr/wp-content/uploads/2026/02/linux4.png 656w, https://howinfo.kr/wp-content/uploads/2026/02/linux4-226x300.png 226w" sizes="auto, (max-width: 656px) 100vw, 656px" /></figure>



<p>여기서 거의 다 나옵니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">오해했던 부분: RAM 사용률</h3>



<p>free -h에서 RAM이 거의 다 차 있어도<br>그게 반드시 문제는 아닙니다.</p>



<p>리눅스는 캐시를 적극 활용합니다.</p>



<p>진짜 위험 신호는:</p>



<ul class="wp-block-list">
<li>swap이 계속 증가</li>



<li>OOM 로그 발생</li>
</ul>



<ul class="wp-block-list">
<li>리눅스면 보통 <strong>dmesg / journalctl</strong>에서 OOM 흔적을 찾을 수 있어요.</li>
</ul>



<h3 class="wp-block-heading">캐시는 “정상”인데, 오해하기 쉬웠던 경험</h3>



<p>리눅스에서 free -h 보면 RAM이 대부분 사용 중으로 보이는데<br>그게 꼭 문제는 아니더라고요.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="656" height="448" src="https://howinfo.kr/wp-content/uploads/2026/02/linux3.png" alt="" class="wp-image-1773" srcset="https://howinfo.kr/wp-content/uploads/2026/02/linux3.png 656w, https://howinfo.kr/wp-content/uploads/2026/02/linux3-300x205.png 300w" sizes="auto, (max-width: 656px) 100vw, 656px" /></figure>



<ul class="wp-block-list">
<li>OS가 <strong>캐시로 RAM을 적극 활용</strong>하는 게 정상</li>



<li>문제는 캐시가 아니라 <strong>스왑이 늘고 반응이 무너질 때</strong>입니다.</li>
</ul>



<p>즉, “RAM 사용률”보다 “swap/oom”을 더 경계하게 됐어요.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7️⃣ 워드프레스 글 하나 열 때 OS 안에서 벌어지는 일</h2>



<p>사용자 요청<br>→ 커널이 네트워크 처리<br>→ 웹서버 프로세스 실행<br>→ PHP-FPM 동작<br>→ DB 접근 (네트워크/디스크 I/O)<br>→ 응답 반환</p>



<p>이 중 하나라도 병목이면 체감이 바로 느려집니다.</p>



<p>그래서 OS를 이해하면 이런 감이 생깁니다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“이건 코드가 아니라 I/O 같다.”<br>“CPU가 아니라 메모리 압박이다.”</p>
</blockquote>



<p>이 감이 운영에선 정말 큽니다.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="656" height="416" src="https://howinfo.kr/wp-content/uploads/2026/02/linux2.png" alt="" class="wp-image-1774" srcset="https://howinfo.kr/wp-content/uploads/2026/02/linux2.png 656w, https://howinfo.kr/wp-content/uploads/2026/02/linux2-300x190.png 300w" sizes="auto, (max-width: 656px) 100vw, 656px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8️⃣ 제가 쓰는 3분 점검 루틴</h2>



<p>서버가 느릴 때 저는 거의 이 순서입니다.</p>



<pre class="wp-block-preformatted">top<br>free -h<br>df -h<br>iostat<br>journalctl -xe</pre>



<ol class="wp-block-list">
<li>누가 CPU/RAM 먹는지</li>



<li>swap 증가 여부</li>



<li>디스크 용량</li>



<li>I/O wait</li>



<li>OOM/크래시 로그</li>
</ol>



<p>이 루틴이 습관이 되면<br>OS는 시험 과목이 아니라 <strong>장애 해결 지도</strong>가 됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9️⃣ 자주 하는 실수 TOP3</h2>



<p>1️⃣ CPU만 보고 판단<br>→ 실제 원인은 I/O wait</p>



<p>2️⃣ RAM 사용률만 보고 “메모리 부족” 단정<br>→ 캐시 정상 사용일 수 있음</p>



<p>3️⃣ 애플리케이션 로그만 보고 OS 로그 안 봄<br>→ OOM은 커널 로그에 남음</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🔟 체크리스트</h2>



<ul class="wp-block-list">
<li>CPU %만 보지 않는다</li>



<li>swap 증가 여부 확인</li>



<li>OOM 로그 확인</li>



<li>디스크 용량 주기 점검</li>



<li>프로세스 단위로 문제를 좁힌다</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">FAQ</h1>



<p><strong>Q1. OS를 알면 코딩에도 도움이 되나요?</strong><br>네. 왜 느려지는지, 왜 죽는지가 보이기 시작합니다.</p>



<p><strong>Q2. 커널을 직접 건드릴 일도 있나요?</strong><br>직접 수정은 거의 없지만, 로그와 자원 상태를 읽는 일은 매우 많습니다.</p>



<p><strong>Q3. 메모리 위험 신호는 무엇인가요?</strong><br>RAM 사용률보다 swap 증가와 OOM 로그가 더 위험 신호였습니다.</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9cos%eb%8a%94-%ec%99%9c-%ed%95%84%ec%9a%94%ed%95%9c%ea%b0%80-%ec%bb%a4%eb%84%90%c2%b7%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4%c2%b7%eb%a9%94%eb%aa%a8%eb%a6%ac/">운영체제(OS)는 왜 필요한가? — 장애가 나면 답은 결국 OS 안에 있다</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/%ec%9a%b4%ec%98%81%ec%b2%b4%ec%a0%9cos%eb%8a%94-%ec%99%9c-%ed%95%84%ec%9a%94%ed%95%9c%ea%b0%80-%ec%bb%a4%eb%84%90%c2%b7%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4%c2%b7%eb%a9%94%eb%aa%a8%eb%a6%ac/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>로그인 상태는 어떻게 유지될까? 쿠키·세션 초보자 실전 가이드</title>
		<link>https://howinfo.kr/%ec%bf%a0%ed%82%a4%ec%99%80-%ec%84%b8%ec%85%98%ec%9d%98-%ec%b0%a8%ec%9d%b4-php-python-%ec%bd%94%eb%93%9c-%ec%98%88%ec%8b%9c-%ed%8f%ac%ed%95%a8/</link>
					<comments>https://howinfo.kr/%ec%bf%a0%ed%82%a4%ec%99%80-%ec%84%b8%ec%85%98%ec%9d%98-%ec%b0%a8%ec%9d%b4-php-python-%ec%bd%94%eb%93%9c-%ec%98%88%ec%8b%9c-%ed%8f%ac%ed%95%a8/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Sun, 15 Feb 2026 06:57:56 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[flask세션]]></category>
		<category><![CDATA[php세션]]></category>
		<category><![CDATA[보안기초]]></category>
		<category><![CDATA[웹개발기초]]></category>
		<category><![CDATA[웹로그인관리]]></category>
		<category><![CDATA[쿠키설정]]></category>
		<category><![CDATA[쿠키세션차이]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1694</guid>

					<description><![CDATA[<p>0️⃣ 상단 요약 5줄 1️⃣ 상황으로 시작: “새로고침하면 왜 로그인 상태가 유지될까?” 처음 웹 개발을 할 때 제일 신기했던 게...</p>
<p>게시물 <a href="https://howinfo.kr/%ec%bf%a0%ed%82%a4%ec%99%80-%ec%84%b8%ec%85%98%ec%9d%98-%ec%b0%a8%ec%9d%b4-php-python-%ec%bd%94%eb%93%9c-%ec%98%88%ec%8b%9c-%ed%8f%ac%ed%95%a8/">로그인 상태는 어떻게 유지될까? 쿠키·세션 초보자 실전 가이드</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">0️⃣ 상단 요약 5줄</h2>



<ul class="wp-block-list">
<li><strong>쿠키</strong>는 브라우저(사용자 PC)에 저장되는 작은 정보입니다.</li>



<li><strong>세션</strong>은 서버에 저장되는 사용자 상태 정보입니다.</li>



<li>대부분 로그인은 <strong>세션을 만들고, 세션 ID를 쿠키로 들고 다니는 방식</strong>입니다.</li>



<li>쿠키에 비밀번호 같은 민감 정보를 저장하면 위험합니다.</li>



<li>아래 예제로 “쿠키/세션이 실제로 어떻게 동작하는지” 바로 확인할 수 있습니다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1️⃣ 상황으로 시작: “새로고침하면 왜 로그인 상태가 유지될까?”</h2>



<p>처음 웹 개발을 할 때 제일 신기했던 게 이거였습니다.</p>



<ul class="wp-block-list">
<li>로그인 한 번 했는데</li>



<li>새로고침을 해도</li>



<li>다른 페이지로 이동해도</li>



<li>계속 로그인 상태가 유지됨</li>
</ul>



<p>그런데 HTTP는 기본적으로 <strong>기억력이 없습니다(stateless)</strong>.<br>즉, 요청을 한 번 보내고 끝… “이 사람이 누구인지” 원래는 모릅니다.</p>



<p>그래서 로그인은 보통 이렇게 구현됩니다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>서버가 세션을 만들고 → 브라우저는 세션 ID를 쿠키로 저장 → 다음 요청마다 쿠키를 같이 보냄</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2️⃣ 한 문장 정의</h2>



<ul class="wp-block-list">
<li><strong>쿠키(Cookie)</strong>: 브라우저에 저장되는 정보</li>



<li><strong>세션(Session)</strong>: 서버에 저장되는 사용자 상태 정보</li>



<li>실무에선 대부분 <strong>세션 ID를 쿠키로 들고 다닌다</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3️⃣ 한 장으로 정리: 차이점 표</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>쿠키</th><th>세션</th></tr></thead><tbody><tr><td>저장 위치</td><td>브라우저</td><td>서버</td></tr><tr><td>보안</td><td>상대적으로 취약</td><td>비교적 안전</td></tr><tr><td>용량</td><td>작음</td><td>비교적 자유</td></tr><tr><td>만료</td><td>설정 가능</td><td>서버 정책에 따름</td></tr><tr><td>주 용도</td><td>식별자/설정</td><td>로그인 상태/권한</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4️⃣ 왜 둘을 같이 쓸까?</h2>



<p>로그인은 “매 요청마다 이 사람이 누구인지” 알아야 합니다.</p>



<p>하지만 서버가 매번 “로그인 정보 전체”를 들고 다니게 하면 부담이고 위험합니다.</p>



<p>그래서 절충안이 등장합니다.</p>



<ol class="wp-block-list">
<li>로그인 성공</li>



<li>서버가 세션 생성(서버 저장소에 user 정보 저장)</li>



<li>세션을 구분하는 <strong>세션 ID만 쿠키로 내려줌</strong></li>



<li>다음 요청부터 브라우저는 쿠키(세션 ID)를 자동 전송</li>



<li>서버는 세션 ID로 사용자 확인</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5️⃣ 미니 실습 1: PHP 세션 로그인/로그아웃</h2>



<p>PHP는 <code>session_start()</code>만 해도<br>브라우저 쿠키에 **PHPSESSID(세션 ID)**를 자동으로 심습니다.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“세션 만들고 → 세션 ID를 쿠키로 내려준다”가 자동으로 구현되는 셈입니다.</p>
</blockquote>



<h3 class="wp-block-heading">login.php</h3>



<pre class="wp-block-preformatted">&lt;?php<br>session_start();$valid_user = "howinfo";<br>$valid_pass = "1234";$user = $_POST["user"] ?? "";<br>$pass = $_POST["pass"] ?? "";if ($user === $valid_user &amp;&amp; $pass === $valid_pass) {<br>    $_SESSION["user"] = $user;<br>    $_SESSION["login_time"] = time();<br>    echo "로그인 성공! &lt;a href='mypage.php'&gt;마이페이지&lt;/a&gt;";<br>} else {<br>    echo "로그인 실패. &lt;a href='index.html'&gt;다시 시도&lt;/a&gt;";<br>}</pre>



<h3 class="wp-block-heading">mypage.php</h3>



<pre class="wp-block-preformatted">&lt;?php<br>session_start();if (!isset($_SESSION["user"])) {<br>    echo "로그인이 필요합니다. &lt;a href='index.html'&gt;로그인&lt;/a&gt;";<br>    exit;<br>}$user = $_SESSION["user"];<br>$login_time = date("Y-m-d H:i:s", $_SESSION["login_time"]);echo "&lt;h2&gt;환영합니다, {$user}님&lt;/h2&gt;";<br>echo "&lt;p&gt;로그인 시간: {$login_time}&lt;/p&gt;";<br>echo "&lt;a href='logout.php'&gt;로그아웃&lt;/a&gt;";</pre>



<h3 class="wp-block-heading">logout.php</h3>



<pre class="wp-block-preformatted">&lt;?php<br>session_start();<br>session_unset();<br>session_destroy();echo "로그아웃 완료. &lt;a href='index.html'&gt;처음으로&lt;/a&gt;";</pre>



<p>✅ 확인 포인트(진짜 중요한 부분)</p>



<ul class="wp-block-list">
<li>개발자 도구 → Application/Storage → Cookies</li>



<li><code>PHPSESSID</code> 같은 값이 생겼으면 “세션 ID가 쿠키로 내려간 것”입니다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6️⃣ 미니 실습 2: 쿠키를 직접 다뤄보기(자동 로그인 느낌)</h2>



<p>주의: <strong>비밀번호를 쿠키에 저장하는 건 금지</strong>입니다.<br>예제는 사용자명만 저장합니다.</p>



<h3 class="wp-block-heading">set_cookie.php</h3>



<pre class="wp-block-preformatted">&lt;?php<br>setcookie(<br>  "remember_user",<br>  "howinfo",<br>  time() + (60 * 60 * 24 * 7),<br>  "/",<br>  "",<br>  true,<br>  true<br>);echo "쿠키 저장 완료. &lt;a href='read_cookie.php'&gt;쿠키 확인&lt;/a&gt;";</pre>



<h3 class="wp-block-heading">read_cookie.php</h3>



<pre class="wp-block-preformatted">&lt;?php<br>$user = $_COOKIE["remember_user"] ?? "";if ($user) echo "쿠키에 저장된 사용자: {$user}";<br>else echo "쿠키가 없습니다.";</pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7️⃣ 미니 실습 3: Python Flask 세션 로그인</h2>



<p>Flask도 세션을 쓰면 내부적으로 <strong>세션 ID를 쿠키로 관리</strong>합니다.<br>즉 구조는 PHP와 같습니다.</p>



<p>설치:</p>



<pre class="wp-block-preformatted">pip install flask</pre>



<p>app.py:</p>



<pre class="wp-block-preformatted">from flask import Flask, request, session, redirect, url_forapp = Flask(__name__)<br>app.secret_key = "howinfo-secret-key"  # 실전에서는 환경변수 추천VALID_USER = "howinfo"<br>VALID_PASS = "1234"@app.route("/")<br>def home():<br>    user = session.get("user")<br>    if user:<br>        return f"✅ 로그인 상태: {user} | &lt;a href='/mypage'&gt;마이페이지&lt;/a&gt; | &lt;a href='/logout'&gt;로그아웃&lt;/a&gt;"<br>    return """<br>    &lt;h3&gt;로그인&lt;/h3&gt;<br>    &lt;form method="post" action="/login"&gt;<br>      &lt;input name="user" placeholder="user"&gt;&lt;br&gt;<br>      &lt;input name="pass" placeholder="pass" type="password"&gt;&lt;br&gt;<br>      &lt;button type="submit"&gt;로그인&lt;/button&gt;<br>    &lt;/form&gt;<br>    """@app.route("/login", methods=["POST"])<br>def login():<br>    user = request.form.get("user", "")<br>    pw = request.form.get("pass", "")<br>    if user == VALID_USER and pw == VALID_PASS:<br>        session["user"] = user<br>        return redirect(url_for("mypage"))<br>    return "로그인 실패 &lt;a href='/'&gt;돌아가기&lt;/a&gt;"@app.route("/mypage")<br>def mypage():<br>    user = session.get("user")<br>    if not user:<br>        return redirect(url_for("home"))<br>    return f"&lt;h2&gt;환영합니다, {user}님&lt;/h2&gt;&lt;a href='/logout'&gt;로그아웃&lt;/a&gt;"@app.route("/logout")<br>def logout():<br>    session.clear()<br>    return redirect(url_for("home"))if __name__ == "__main__":<br>    app.run(host="0.0.0.0", port=5000, debug=True)</pre>



<p>실행:</p>



<pre class="wp-block-preformatted">python app.py</pre>



<p>접속:</p>



<ul class="wp-block-list">
<li><code>http://localhost:5000</code></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">8️⃣ 자주 하는 실수 TOP3 (실무에서 진짜 많이 봄)</h2>



<ol class="wp-block-list">
<li>쿠키에 비밀번호/민감정보 저장<br>→ 세션 탈취/노출 시 바로 사고</li>



<li>HTTPS 없이 로그인 운영<br>→ 세션 ID 가로채기 위험 증가</li>



<li>쿠키 보안 옵션을 안 줌<br>→ Secure/HttpOnly/SameSite는 기본값으로 넣는 게 안전</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">9️⃣ 체크리스트</h2>



<ul class="wp-block-list">
<li>세션은 서버에, 세션 ID는 쿠키로 내려간다</li>



<li>개발자 도구에서 쿠키(PHPSESSID 등)를 확인했다</li>



<li>쿠키에 민감정보를 저장하지 않는다</li>



<li>Secure/HttpOnly/SameSite 옵션 의미를 안다</li>



<li>쿠키 삭제 시 로그인 풀림을 직접 확인했다</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">FAQ</h1>



<p><strong>Q1. 자동 로그인은 쿠키만으로 구현하나요?</strong><br>대부분은 “긴 만료 쿠키 + 서버 토큰(리프레시 토큰)” 조합을 씁니다.</p>



<p><strong>Q2. 세션은 서버 메모리를 많이 쓰나요?</strong><br>사용자가 많으면 부담이 됩니다. 그래서 Redis 같은 세션 저장소를 쓰기도 합니다.</p>



<p><strong>Q3. 쿠키를 삭제하면 어떻게 되나요?</strong><br>세션 ID 쿠키가 없어지면 서버는 사용자를 식별하지 못해서 로그인이 풀립니다.</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/%ec%bf%a0%ed%82%a4%ec%99%80-%ec%84%b8%ec%85%98%ec%9d%98-%ec%b0%a8%ec%9d%b4-php-python-%ec%bd%94%eb%93%9c-%ec%98%88%ec%8b%9c-%ed%8f%ac%ed%95%a8/">로그인 상태는 어떻게 유지될까? 쿠키·세션 초보자 실전 가이드</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/%ec%bf%a0%ed%82%a4%ec%99%80-%ec%84%b8%ec%85%98%ec%9d%98-%ec%b0%a8%ec%9d%b4-php-python-%ec%bd%94%eb%93%9c-%ec%98%88%ec%8b%9c-%ed%8f%ac%ed%95%a8/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Postman으로 API 테스트하는 방법</title>
		<link>https://howinfo.kr/postman%ec%9c%bc%eb%a1%9c-api-%ed%85%8c%ec%8a%a4%ed%8a%b8%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95/</link>
					<comments>https://howinfo.kr/postman%ec%9c%bc%eb%a1%9c-api-%ed%85%8c%ec%8a%a4%ed%8a%b8%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Fri, 13 Feb 2026 15:02:40 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[API 호출방법]]></category>
		<category><![CDATA[GET POST차이]]></category>
		<category><![CDATA[HTTP상태코드]]></category>
		<category><![CDATA[Postman사용법]]></category>
		<category><![CDATA[REST API테스트]]></category>
		<category><![CDATA[개발입문]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1647</guid>

					<description><![CDATA[<p>REST API를 직접 호출해보는 가장 쉬운 방법 📌 왜 Postman이 필요할까? REST API를 이해했다면이제 직접 테스트해보고 싶어집니다. 그런데 브라우저 주소창은GET...</p>
<p>게시물 <a href="https://howinfo.kr/postman%ec%9c%bc%eb%a1%9c-api-%ed%85%8c%ec%8a%a4%ed%8a%b8%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95/">Postman으로 API 테스트하는 방법</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">REST API를 직접 호출해보는 가장 쉬운 방법</h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 왜 Postman이 필요할까?</h2>



<p>REST API를 이해했다면<br>이제 직접 테스트해보고 싶어집니다.</p>



<p>그런데 브라우저 주소창은<br>GET 요청만 가능합니다.</p>



<p>POST, PUT, DELETE 요청을 하려면<br>전용 도구가 필요합니다.</p>



<p>👉 그 대표적인 도구가 <strong>Postman</strong> 입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧠 Postman이란?</h1>



<p>Postman은</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>API 요청을 쉽게 보내고<br>응답 결과를 확인할 수 있는 프로그램</p>
</blockquote>



<p>입니다.</p>



<p>개발자가 아니어도 충분히 사용할 수 있습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🚀 1️⃣ Postman 설치하기</h1>



<ol class="wp-block-list">
<li><a href="https://www.postman.com">https://www.postman.com</a> 접속</li>



<li>Download 클릭</li>



<li>설치 후 실행</li>
</ol>



<p>회원가입 없이도 기본 사용은 가능합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧪 2️⃣ 가장 쉬운 테스트 (GET 요청)</h1>



<p>테스트용 무료 API를 사용해보겠습니다.</p>



<h3 class="wp-block-heading">① 새 요청 만들기</h3>



<ul class="wp-block-list">
<li>New → HTTP Request</li>



<li>상단에서 Method를 <strong>GET</strong> 선택</li>
</ul>



<h3 class="wp-block-heading">② URL 입력</h3>



<pre class="wp-block-code"><code>https:&#47;&#47;jsonplaceholder.typicode.com/posts
</code></pre>



<h3 class="wp-block-heading">③ Send 버튼 클릭</h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🎉 결과 확인</h2>



<p>아래 창에 JSON 데이터가 보이면 성공입니다.</p>



<p>예시:</p>



<pre class="wp-block-code"><code>{
  "userId": 1,
  "id": 1,
  "title": "sunt aut facere repellat",
  "body": "quia et suscipit..."
}
</code></pre>



<p>이게 바로 API 응답입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🔥 3️⃣ POST 요청 테스트 (데이터 생성)</h1>



<p>이번에는 데이터를 보내보겠습니다.</p>



<h3 class="wp-block-heading">① Method를 POST로 변경</h3>



<h3 class="wp-block-heading">② URL 동일하게 입력</h3>



<pre class="wp-block-code"><code>https:&#47;&#47;jsonplaceholder.typicode.com/posts
</code></pre>



<h3 class="wp-block-heading">③ Body 탭 클릭</h3>



<ul class="wp-block-list">
<li>raw 선택</li>



<li>JSON 선택</li>
</ul>



<h3 class="wp-block-heading">④ 아래 내용 입력</h3>



<pre class="wp-block-code"><code>{
  "title": "howinfo 테스트",
  "body": "Postman 실습 중입니다",
  "userId": 1
}
</code></pre>



<h3 class="wp-block-heading">⑤ Send 클릭</h3>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🎉 결과 확인</h2>



<p>응답으로 생성된 데이터가 반환됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📦 PUT / DELETE도 테스트 가능</h1>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>메서드</th><th>의미</th></tr></thead><tbody><tr><td>PUT</td><td>수정</td></tr><tr><td>DELETE</td><td>삭제</td></tr></tbody></table></figure>



<p>예:</p>



<pre class="wp-block-code"><code>PUT https://jsonplaceholder.typicode.com/posts/1
DELETE https://jsonplaceholder.typicode.com/posts/1
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧩 상태 코드 이해하기</h1>



<p>응답 위에 이런 숫자가 보입니다.</p>



<ul class="wp-block-list">
<li>200 → 정상</li>



<li>201 → 생성 성공</li>



<li>400 → 잘못된 요청</li>



<li>404 → 찾을 수 없음</li>



<li>500 → 서버 오류</li>
</ul>



<p>이 숫자를 <strong>HTTP 상태 코드</strong>라고 합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📌 자주 사용하는 기능</h1>



<h2 class="wp-block-heading">✔ Headers 설정</h2>



<p>API Key, Authorization 설정 가능</p>



<h2 class="wp-block-heading">✔ Params 설정</h2>



<p>URL 파라미터 추가</p>



<p>예:</p>



<pre class="wp-block-code"><code>?userId=1
</code></pre>



<h2 class="wp-block-heading">✔ 환경 변수 사용</h2>



<p>서버 주소를 변수로 관리 가능</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">💡 실무에서 어떻게 쓰일까?</h1>



<ul class="wp-block-list">
<li>AI API 테스트</li>



<li>로그인 API 확인</li>



<li>서버 연동 확인</li>



<li>결제 API 점검</li>



<li>장애 원인 분석</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📋 초보자 체크리스트</h1>



<p>✔ GET 요청 성공<br>✔ JSON 응답 확인<br>✔ POST 요청 성공<br>✔ 상태 코드 확인<br>✔ Body에 JSON 입력 가능</p>
<p>게시물 <a href="https://howinfo.kr/postman%ec%9c%bc%eb%a1%9c-api-%ed%85%8c%ec%8a%a4%ed%8a%b8%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95/">Postman으로 API 테스트하는 방법</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/postman%ec%9c%bc%eb%a1%9c-api-%ed%85%8c%ec%8a%a4%ed%8a%b8%ed%95%98%eb%8a%94-%eb%b0%a9%eb%b2%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>REST API 쉽게 이해하기</title>
		<link>https://howinfo.kr/rest-api-%ec%89%bd%ea%b2%8c-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/</link>
					<comments>https://howinfo.kr/rest-api-%ec%89%bd%ea%b2%8c-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Fri, 13 Feb 2026 14:41:43 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[API개념]]></category>
		<category><![CDATA[GET POST차이]]></category>
		<category><![CDATA[HTTP메소드]]></category>
		<category><![CDATA[JSON이해하기]]></category>
		<category><![CDATA[REST API]]></category>
		<category><![CDATA[서버통신]]></category>
		<category><![CDATA[웹개발기초]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1643</guid>

					<description><![CDATA[<p>초보자도 이해하는 REST 개념 정리 📌 REST API가 뭐길래 이렇게 많이 들릴까? 요즘 이런 말 많이 들어보셨죠? 그런데 실제로는 생각보다...</p>
<p>게시물 <a href="https://howinfo.kr/rest-api-%ec%89%bd%ea%b2%8c-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/">REST API 쉽게 이해하기</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">초보자도 이해하는 REST 개념 정리</h2>



<figure class="wp-block-image is-resized"><img decoding="async" src="https://images.openai.com/static-rsc-3/nsetL_1lFjxts-XUQqekPA30IVAzJR-hwkhrBNva4a0bK6pFClvaH0DnIiKkLftJcUU3vkIOcJ0_VbqYeE3IOr-EVRYcrnbmjiJ_0HRUZFc?purpose=fullsize&amp;v=1" alt="https://images.openai.com/static-rsc-3/nsetL_1lFjxts-XUQqekPA30IVAzJR-hwkhrBNva4a0bK6pFClvaH0DnIiKkLftJcUU3vkIOcJ0_VbqYeE3IOr-EVRYcrnbmjiJ_0HRUZFc?purpose=fullsize&amp;v=1" style="aspect-ratio:2.048780487804878;width:733px;height:auto"/></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 REST API가 뭐길래 이렇게 많이 들릴까?</h2>



<p>요즘 이런 말 많이 들어보셨죠?</p>



<ul class="wp-block-list">
<li>“API 연동”</li>



<li>“REST API 호출”</li>



<li>“서버 API 개발”</li>



<li>“앱에서 API로 데이터 가져오기”</li>
</ul>



<p>그런데 실제로는 생각보다 단순합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧠 아주 쉽게 설명해보면</h1>



<p>REST API는</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>📱 앱이나 브라우저가<br>🖥 서버에게 데이터를 요청하고<br>📦 데이터를 받는 약속된 방식</p>
</blockquote>



<p>입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🍽 식당 비유로 이해하기</h1>



<p>REST API를 식당에 비유해보겠습니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>개념</th><th>비유</th></tr></thead><tbody><tr><td>클라이언트</td><td>손님</td></tr><tr><td>서버</td><td>주방</td></tr><tr><td>요청(Request)</td><td>주문</td></tr><tr><td>응답(Response)</td><td>음식</td></tr><tr><td>API</td><td>주문서</td></tr></tbody></table></figure>



<p>손님이 “김치찌개 주세요”라고 말하면<br>주방이 김치찌개를 만들어 줍니다.</p>



<p>이게 바로 요청 → 응답 구조입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🔹 REST는 무엇의 약자?</h1>



<p>REST = Representational State Transfer</p>



<p>어렵게 들리지만 실제로는</p>



<p>👉 “HTTP를 이용해서 자원을 다루는 방식”</p>



<p>입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📦 자원(Resource)이란?</h1>



<p>REST에서 가장 중요한 개념은 “자원”입니다.</p>



<p>예시:</p>



<pre class="wp-block-code"><code>/users
/posts
/products
/orders
</code></pre>



<p>이게 바로 자원입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🔥 REST의 4가지 핵심 동작</h1>



<p>REST는 HTTP 메서드를 사용합니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>동작</th><th>의미</th><th>예시</th></tr></thead><tbody><tr><td>GET</td><td>조회</td><td>글 목록 보기</td></tr><tr><td>POST</td><td>생성</td><td>글 작성</td></tr><tr><td>PUT</td><td>수정</td><td>글 수정</td></tr><tr><td>DELETE</td><td>삭제</td><td>글 삭제</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">예시로 이해하기</h2>



<h3 class="wp-block-heading">1️⃣ 게시글 목록 가져오기</h3>



<pre class="wp-block-code"><code>GET https://example.com/posts
</code></pre>



<p>→ 게시글 목록 반환</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2️⃣ 게시글 작성</h3>



<pre class="wp-block-code"><code>POST https://example.com/posts
</code></pre>



<p>→ 새 글 생성</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3️⃣ 게시글 수정</h3>



<pre class="wp-block-code"><code>PUT https://example.com/posts/1
</code></pre>



<p>→ 1번 글 수정</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">4️⃣ 게시글 삭제</h3>



<pre class="wp-block-code"><code>DELETE https://example.com/posts/1
</code></pre>



<p>→ 1번 글 삭제</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📦 데이터는 어떻게 오고 갈까?</h1>



<p>대부분 <strong>JSON 형식</strong>으로 주고받습니다.</p>



<p>예시 응답:</p>



<pre class="wp-block-code"><code>{
  "id": 1,
  "title": "REST API 쉽게 이해하기",
  "author": "howinfo"
}
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🔁 전체 흐름 정리</h1>



<pre class="wp-block-code"><code>앱/브라우저
    ↓ 요청 (GET/POST 등)
서버
    ↓ JSON 응답
앱/브라우저 화면 표시
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">💡 REST API의 장점</h1>



<p>✔ 단순함<br>✔ 표준 HTTP 사용<br>✔ 웹과 잘 맞음<br>✔ 확장성 좋음</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">❓ 자주 하는 질문</h1>



<h3 class="wp-block-heading">Q1. REST API와 일반 웹사이트의 차이는?</h3>



<p>웹사이트는 HTML을 반환합니다.<br>REST API는 **데이터(JSON)**만 반환합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Q2. REST API는 앱에서만 쓰나요?</h3>



<p>아니요.</p>



<ul class="wp-block-list">
<li>웹사이트</li>



<li>모바일 앱</li>



<li>서버 간 통신</li>



<li>IoT 장비</li>
</ul>



<p>모두 사용합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">Q3. POST와 PUT 차이는?</h3>



<p>POST는 “새로 생성”<br>PUT은 “이미 있는 것 수정”</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 실제 사용 예</h1>



<ul class="wp-block-list">
<li>블로그 글 목록 불러오기</li>



<li>로그인 처리</li>



<li>결제 정보 전송</li>



<li>날씨 정보 가져오기</li>



<li>AI API 호출</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📌 핵심 한 줄 정리</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>REST API는<br>“HTTP를 이용해 서버와 데이터를 주고받는 표준 방식”입니다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📋 초보자 체크리스트</h1>



<p>✔ GET은 조회<br>✔ POST는 생성<br>✔ PUT은 수정<br>✔ DELETE는 삭제<br>✔ 데이터는 JSON으로 주고받음</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/rest-api-%ec%89%bd%ea%b2%8c-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/">REST API 쉽게 이해하기</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/rest-api-%ec%89%bd%ea%b2%8c-%ec%9d%b4%ed%95%b4%ed%95%98%ea%b8%b0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GitHub에 코드 올리는 방법(따라 하는 초보자 가이드)</title>
		<link>https://howinfo.kr/github%ec%97%90-%ec%bd%94%eb%93%9c-%ec%98%ac%eb%a6%ac%eb%8a%94-%eb%b0%a9%eb%b2%95%eb%94%b0%eb%9d%bc-%ed%95%98%eb%8a%94-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/</link>
					<comments>https://howinfo.kr/github%ec%97%90-%ec%bd%94%eb%93%9c-%ec%98%ac%eb%a6%ac%eb%8a%94-%eb%b0%a9%eb%b2%95%eb%94%b0%eb%9d%bc-%ed%95%98%eb%8a%94-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Fri, 13 Feb 2026 05:57:22 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[GitHub 사용법]]></category>
		<category><![CDATA[github저장소만들기]]></category>
		<category><![CDATA[Git기초]]></category>
		<category><![CDATA[개발 기초]]></category>
		<category><![CDATA[초보자git가이드]]></category>
		<category><![CDATA[코드업로드방법]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1631</guid>

					<description><![CDATA[<p>📌 GitHub는 무엇인가요? 👉 **GitHub**는코드를 인터넷에 저장하고 관리할 수 있는 서비스입니다. 쉽게 말하면, 📂 내 컴퓨터에 있는 코드를☁️ 온라인 저장소에...</p>
<p>게시물 <a href="https://howinfo.kr/github%ec%97%90-%ec%bd%94%eb%93%9c-%ec%98%ac%eb%a6%ac%eb%8a%94-%eb%b0%a9%eb%b2%95%eb%94%b0%eb%9d%bc-%ed%95%98%eb%8a%94-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/">GitHub에 코드 올리는 방법(따라 하는 초보자 가이드)</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">📌 GitHub는 무엇인가요?</h2>



<p>👉 **GitHub**는<br>코드를 인터넷에 저장하고 관리할 수 있는 서비스입니다.</p>



<p>쉽게 말하면,</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>📂 내 컴퓨터에 있는 코드를<br>☁️ 온라인 저장소에 올려두는 공간</p>
</blockquote>



<p>왜 필요할까요?</p>



<ul class="wp-block-list">
<li>코드 백업</li>



<li>협업</li>



<li>포트폴리오 관리</li>



<li>버전 관리</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧠 Git과 GitHub의 차이</h1>



<p>많이 헷갈리는 부분입니다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>구분</th><th>의미</th></tr></thead><tbody><tr><td>Git</td><td>내 컴퓨터에서 코드 변경 이력을 관리하는 도구</td></tr><tr><td>GitHub</td><td>그 코드를 인터넷에 저장하는 서비스</td></tr></tbody></table></figure>



<p>👉 Git은 프로그램<br>👉 GitHub는 저장소 서비스</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🚀 준비물</h1>



<p>✔ GitHub 회원가입 완료<br>✔ Git 설치 완료</p>



<p>Git 설치 확인:</p>



<pre class="wp-block-code"><code>git --version
</code></pre>



<p>버전이 나오면 정상입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🪜 단계별 따라 하기</h1>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">1️⃣ GitHub에서 저장소 만들기</h2>



<ol class="wp-block-list">
<li>GitHub 로그인</li>



<li>오른쪽 위 &#8220;+&#8221; 클릭</li>



<li>&#8220;New repository&#8221; 선택</li>



<li>저장소 이름 입력 (예: my-project)</li>



<li>Create repository 클릭</li>
</ol>



<p>이제 온라인 저장소가 생성되었습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2️⃣ 내 컴퓨터에서 폴더 준비</h2>



<p>예시:</p>



<pre class="wp-block-code"><code>mkdir my-project
cd my-project
</code></pre>



<p>파일 하나 만들어 보겠습니다.</p>



<pre class="wp-block-code"><code>echo "Hello GitHub" &gt; index.txt
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3️⃣ Git 초기화</h2>



<pre class="wp-block-code"><code>git init
</code></pre>



<p>이 명령은<br>“이 폴더를 Git 관리 대상으로 설정한다”는 의미입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">4️⃣ 파일 추가</h2>



<pre class="wp-block-code"><code>git add .
</code></pre>



<p>의미:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>변경된 파일을 업로드 준비 상태로 만든다</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">5️⃣ 커밋(저장)</h2>



<pre class="wp-block-code"><code>git commit -m "첫 번째 업로드"
</code></pre>



<p>커밋은<br>“이 시점의 상태를 저장한다”는 뜻입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">6️⃣ GitHub 저장소와 연결</h2>



<p>GitHub에서 생성된 주소를 복사합니다.</p>



<p>예시:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;github.com/아이디/my-project.git
</code></pre>



<p>연결 명령:</p>



<pre class="wp-block-code"><code>git remote add origin 저장소주소
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">7️⃣ 업로드 (Push)</h2>



<pre class="wp-block-code"><code>git push -u origin main
</code></pre>



<p>이제 GitHub에 코드가 올라갑니다 🎉</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">❗ 자주 발생하는 오류</h1>



<h3 class="wp-block-heading">🔹 main 브랜치 오류</h3>



<pre class="wp-block-code"><code>git branch -M main
</code></pre>



<p>실행 후 다시 push</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🔹 로그인 오류</h3>



<p>GitHub는 비밀번호 대신<br><strong>Personal Access Token</strong>을 사용합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧾 전체 명령어 한 번에 보기</h1>



<pre class="wp-block-code"><code>git init
git add .
git commit -m "첫 업로드"
git branch -M main
git remote add origin 저장소주소
git push -u origin main
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📋 초보자 체크리스트</h1>



<p>✔ GitHub 회원가입<br>✔ 저장소 생성<br>✔ git init 실행<br>✔ commit 완료<br>✔ push 성공<br>✔ GitHub에서 파일 확인</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🎯 왜 꼭 배워야 할까?</h1>



<p>특히 IT 기초를 공부하는 분이라면:</p>



<ul class="wp-block-list">
<li>포트폴리오 관리 가능</li>



<li>협업 능력 향상</li>



<li>실무 필수 기술</li>
</ul>



<p>개발자가 아니더라도<br>자동화 스크립트, Docker 설정 파일, 서버 구성 파일 등을<br>저장해두기 좋습니다.</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/github%ec%97%90-%ec%bd%94%eb%93%9c-%ec%98%ac%eb%a6%ac%eb%8a%94-%eb%b0%a9%eb%b2%95%eb%94%b0%eb%9d%bc-%ed%95%98%eb%8a%94-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/">GitHub에 코드 올리는 방법(따라 하는 초보자 가이드)</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/github%ec%97%90-%ec%bd%94%eb%93%9c-%ec%98%ac%eb%a6%ac%eb%8a%94-%eb%b0%a9%eb%b2%95%eb%94%b0%eb%9d%bc-%ed%95%98%eb%8a%94-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Let&#8217;s Encrypt로 HTTPS 만드는 방법 (초보자 가이드)</title>
		<link>https://howinfo.kr/lets-encrypt%eb%a1%9c-https-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/</link>
					<comments>https://howinfo.kr/lets-encrypt%eb%a1%9c-https-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Fri, 13 Feb 2026 05:48:14 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[https 설정]]></category>
		<category><![CDATA[Let's Encrypt]]></category>
		<category><![CDATA[Nginx SSL]]></category>
		<category><![CDATA[ssl인증서]]></category>
		<category><![CDATA[Ubuntu서버설정]]></category>
		<category><![CDATA[무료 SSL 인증서]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1628</guid>

					<description><![CDATA[<p>📌 HTTPS가 뭐길래 꼭 해야 할까? 웹사이트 주소창을 보면어떤 곳은 http://어떤 곳은 https:// 로 시작합니다. 차이점은 단 하나입니다. 👉 S...</p>
<p>게시물 <a href="https://howinfo.kr/lets-encrypt%eb%a1%9c-https-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/">Let&#8217;s Encrypt로 HTTPS 만드는 방법 (초보자 가이드)</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">📌 HTTPS가 뭐길래 꼭 해야 할까?</h2>



<p>웹사이트 주소창을 보면<br>어떤 곳은 <strong>http://</strong><br>어떤 곳은 <strong>https://</strong> 로 시작합니다.</p>



<p>차이점은 단 하나입니다.</p>



<p>👉 <strong>S = Secure (보안)</strong></p>



<p>즉, HTTPS는</p>



<ul class="wp-block-list">
<li>🔒 데이터가 암호화되고</li>



<li>🔐 해킹 위험이 줄어들고</li>



<li>📈 검색 노출에도 유리합니다</li>
</ul>



<p>요즘은 HTTPS가 아니면 브라우저가<br>“안전하지 않음” 경고를 띄웁니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">🧠 SSL 인증서란?</h2>



<p>쉽게 말하면,</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>“이 사이트는 진짜이고, 안전합니다”<br>라고 증명해주는 전자 증명서</p>
</blockquote>



<p>이 증명서를 발급해주는 기관이 있습니다.</p>



<p>👉 <strong>Let&#8217;s Encrypt</strong></p>



<p>이곳은 <strong>무료로 SSL 인증서</strong>를 발급해주는 기관입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🏠 쉽게 비유해볼게요</h1>



<ul class="wp-block-list">
<li>HTTP = 유리로 된 편지 봉투</li>



<li>HTTPS = 자물쇠가 채워진 봉투</li>
</ul>



<p>우리는 지금 <strong>자물쇠를 설치하는 작업</strong>을 하는 것입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🛠 준비물 (이미 되어 있어야 함)</h1>



<p>✔ 도메인 구매 완료<br>✔ 서버에 Ubuntu 설치<br>✔ Nginx 웹서버 실행 중<br>✔ 80번 포트 열려 있음</p>



<p>(이 부분이 어려우면 이전 글 참고)</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🚀 실습 시작 (Ubuntu + Nginx 기준)</h1>



<h2 class="wp-block-heading">1️⃣ Certbot 설치</h2>



<p>Certbot은 SSL을 자동으로 발급해주는 프로그램입니다.</p>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install certbot python3-certbot-nginx -y
</code></pre>



<p>설치 확인:</p>



<pre class="wp-block-code"><code>certbot --version
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">2️⃣ 인증서 발급</h2>



<p>이제 진짜 핵심 단계입니다.</p>



<pre class="wp-block-code"><code>sudo certbot --nginx
</code></pre>



<p>실행하면:</p>



<ol class="wp-block-list">
<li>이메일 입력</li>



<li>약관 동의</li>



<li>도메인 선택</li>



<li>HTTP → HTTPS 자동 변경 여부 선택</li>
</ol>



<p>👉 자동 변경을 선택하세요.</p>



<p>완료되면 Nginx 설정까지 자동으로 수정됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">3️⃣ 성공 확인</h2>



<p>브라우저에서:</p>



<pre class="wp-block-code"><code>https:&#47;&#47;내도메인.com
</code></pre>



<p>주소창에 🔒 자물쇠가 보이면 성공입니다 🎉</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🔄 자동 갱신은 어떻게 되나요?</h1>



<p>Let&#8217;s Encrypt 인증서는 90일짜리입니다.</p>



<p>하지만 걱정할 필요 없습니다.</p>



<p>자동 갱신이 설정됩니다.</p>



<p>확인:</p>



<pre class="wp-block-code"><code>sudo certbot renew --dry-run
</code></pre>



<p>에러가 없으면 정상입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">❓ 왜 90일마다 갱신하나요?</h1>



<p>보안 강화를 위해 짧은 유효기간을 사용합니다.</p>



<p>짧을수록:</p>



<ul class="wp-block-list">
<li>보안 위험 감소</li>



<li>최신 암호 기술 유지</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">⚠ 자주 겪는 문제</h1>



<h3 class="wp-block-heading">1️⃣ 도메인이 서버 IP와 연결 안 된 경우</h3>



<p>→ DNS 설정 확인</p>



<h3 class="wp-block-heading">2️⃣ 80번 포트 막힘</h3>



<p>→ 공유기 포트포워딩 확인</p>



<h3 class="wp-block-heading">3️⃣ 방화벽 차단</h3>



<pre class="wp-block-code"><code>sudo ufw allow 80
sudo ufw allow 443
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🧩 한 줄 정리</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Let&#8217;s Encrypt는<br>“무료로 HTTPS를 만들어주는 자동 보안 도구”입니다.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📋 초보자 체크리스트</h1>



<p>✔ HTTP → HTTPS 변경됨<br>✔ 주소창 자물쇠 표시 확인<br>✔ 자동 갱신 테스트 성공<br>✔ 80 / 443 포트 열림</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/lets-encrypt%eb%a1%9c-https-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/">Let&#8217;s Encrypt로 HTTPS 만드는 방법 (초보자 가이드)</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/lets-encrypt%eb%a1%9c-https-%eb%a7%8c%eb%93%9c%eb%8a%94-%eb%b0%a9%eb%b2%95-%ec%b4%88%eb%b3%b4%ec%9e%90-%ea%b0%80%ec%9d%b4%eb%93%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker 기초 실습 가이드</title>
		<link>https://howinfo.kr/docker-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/</link>
					<comments>https://howinfo.kr/docker-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 13:18:39 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[ai자동화]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[docker설치]]></category>
		<category><![CDATA[nas운영]]></category>
		<category><![CDATA[리눅스]]></category>
		<category><![CDATA[리눅스서버]]></category>
		<category><![CDATA[서버구축]]></category>
		<category><![CDATA[서버운영]]></category>
		<category><![CDATA[서버자동화]]></category>
		<category><![CDATA[자동화기ㅗ]]></category>
		<category><![CDATA[컨테이너기술]]></category>
		<category><![CDATA[컨테이너실습]]></category>
		<category><![CDATA[홈서버]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1614</guid>

					<description><![CDATA[<p>리눅스 서버 위에 나만의 컨테이너 환경 만들기 Linux 명령어에 익숙해졌다면, 이제 한 단계 올라갈 차례입니다.요즘 서버 운영, AI, 자동화, NAS...</p>
<p>게시물 <a href="https://howinfo.kr/docker-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/">Docker 기초 실습 가이드</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">리눅스 서버 위에 나만의 컨테이너 환경 만들기</h2>



<p>Linux 명령어에 익숙해졌다면, 이제 한 단계 올라갈 차례입니다.<br>요즘 서버 운영, AI, 자동화, NAS 환경에서 빠지지 않는 기술이 바로 <strong>Docker</strong>입니다.</p>



<p>Docker를 이해하면:</p>



<p>✔ 서버 세팅이 빨라지고<br>✔ 환경 충돌이 사라지고<br>✔ 자동화 구성이 쉬워지고<br>✔ 이식성이 극대화됩니다</p>



<p>이번 글에서는 <strong>직접 설치 → 실행 → 컨테이너 운영까지 실습</strong>해봅니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">1️⃣ Docker란 무엇인가?</h1>



<p>Docker는 <strong>컨테이너 기반 가상화 플랫폼</strong>입니다.</p>



<p>기존 가상머신(VM)은 OS를 통째로 올리지만,<br>Docker는 필요한 실행 환경만 분리해서 올립니다.</p>



<p>👉 가볍고 빠릅니다<br>👉 서버 운영에 최적화되어 있습니다</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">2️⃣ Docker 설치 실습 (Ubuntu 기준)</h1>



<h2 class="wp-block-heading">📌 1단계: 패키지 업데이트</h2>



<pre class="wp-block-code"><code>sudo apt update
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 2단계: Docker 설치</h2>



<pre class="wp-block-code"><code>sudo apt install docker.io -y
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 3단계: Docker 실행 확인</h2>



<pre class="wp-block-code"><code>docker --version
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 4단계: Docker 서비스 활성화</h2>



<pre class="wp-block-code"><code>sudo systemctl enable docker
sudo systemctl start docker
</code></pre>



<p>상태 확인:</p>



<pre class="wp-block-code"><code>sudo systemctl status docker
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">3️⃣ 첫 번째 컨테이너 실행해보기</h1>



<h2 class="wp-block-heading">📌 Hello World 실행</h2>



<pre class="wp-block-code"><code>sudo docker run hello-world
</code></pre>



<p>정상이라면 테스트 메시지가 출력됩니다.</p>



<p>👉 이 순간 Docker 엔진이 동작한 것입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">4️⃣ Nginx 웹서버 컨테이너 실행 실습</h1>



<h2 class="wp-block-heading">📌 Nginx 실행</h2>



<pre class="wp-block-code"><code>sudo docker run -d -p 8080:80 nginx
</code></pre>



<p>설명:</p>



<ul class="wp-block-list">
<li><code>-d</code> : 백그라운드 실행</li>



<li><code>-p 8080:80</code> : 포트 연결</li>



<li><code>nginx</code> : 이미지 이름</li>
</ul>



<p>브라우저에서 접속:</p>



<pre class="wp-block-code"><code>http:&#47;&#47;서버IP:8080
</code></pre>



<p>👉 웹서버가 바로 실행됩니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">5️⃣ 컨테이너 관리하기</h1>



<h2 class="wp-block-heading">📌 실행 중 컨테이너 확인</h2>



<pre class="wp-block-code"><code>docker ps
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 전체 컨테이너 보기</h2>



<pre class="wp-block-code"><code>docker ps -a
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 컨테이너 중지</h2>



<pre class="wp-block-code"><code>docker stop 컨테이너ID
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 컨테이너 삭제</h2>



<pre class="wp-block-code"><code>docker rm 컨테이너ID
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">6️⃣ Docker 이미지 관리</h1>



<h2 class="wp-block-heading">📌 이미지 목록 확인</h2>



<pre class="wp-block-code"><code>docker images
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 이미지 삭제</h2>



<pre class="wp-block-code"><code>docker rmi 이미지ID
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">7️⃣ 실제 운영 감각 익히기 (중요)</h1>



<p>Docker는 단순 실행이 목적이 아닙니다.</p>



<p>운영에서 중요한 개념:</p>



<h3 class="wp-block-heading">🔹 포트 매핑</h3>



<p>외부포트:내부포트</p>



<pre class="wp-block-code"><code>-p 3000:3000
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🔹 볼륨 연결 (데이터 보존)</h3>



<pre class="wp-block-code"><code>docker run -d -p 8080:80 -v /home/data:/usr/share/nginx/html nginx
</code></pre>



<p>👉 컨테이너 삭제해도 데이터 유지</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">🔹 재부팅 시 자동 실행</h3>



<pre class="wp-block-code"><code>docker run -d --restart=always nginx
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">8️⃣ Docker Compose 기초 (실무 핵심)</h1>



<p>Docker를 여러 개 운영하면 <code>docker-compose</code>가 필요합니다.</p>



<p>설치:</p>



<pre class="wp-block-code"><code>sudo apt install docker-compose -y
</code></pre>



<p>예시 <code>docker-compose.yml</code></p>



<pre class="wp-block-code"><code>version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
</code></pre>



<p>실행:</p>



<pre class="wp-block-code"><code>docker-compose up -d
</code></pre>



<p>👉 실무에서는 거의 이 방식으로 운영합니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📌 Docker를 배우면 생기는 변화</h1>



<p>✔ 서버 세팅 시간이 획기적으로 단축<br>✔ 개발/운영 환경 동일화<br>✔ 자동화 구성 쉬워짐<br>✔ NAS 활용도 상승<br>✔ AI 모델 배포 쉬워짐</p>



<p>Docker는 이제 선택이 아니라 기본입니다.</p>



<p></p>
<p>게시물 <a href="https://howinfo.kr/docker-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/">Docker 기초 실습 가이드</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/docker-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Linux 기초 실습 가이드</title>
		<link>https://howinfo.kr/linux-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/</link>
					<comments>https://howinfo.kr/linux-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/#respond</comments>
		
		<dc:creator><![CDATA[hong]]></dc:creator>
		<pubDate>Thu, 12 Feb 2026 13:12:20 +0000</pubDate>
				<category><![CDATA[IT기초]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[리눅스]]></category>
		<category><![CDATA[리눅스기초]]></category>
		<category><![CDATA[리눅스명령어]]></category>
		<category><![CDATA[리눅스서버]]></category>
		<category><![CDATA[리눅스실습]]></category>
		<category><![CDATA[리눅스터미널]]></category>
		<category><![CDATA[서버기초]]></category>
		<category><![CDATA[서버운영기초]]></category>
		<category><![CDATA[시스템관리]]></category>
		<category><![CDATA[터미널명령어]]></category>
		<guid isPermaLink="false">https://howinfo.kr/?p=1611</guid>

					<description><![CDATA[<p>터미널 명령어부터 서버 운영 감각까지 한 번에 익히기 운영체제를 이해했다면, 이제는 직접 만져볼 차례입니다.Linux는 “읽는 것”보다 “직접 입력해보는 것”이 훨씬...</p>
<p>게시물 <a href="https://howinfo.kr/linux-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/">Linux 기초 실습 가이드</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">터미널 명령어부터 서버 운영 감각까지 한 번에 익히기</h2>



<p>운영체제를 이해했다면, 이제는 직접 만져볼 차례입니다.<br>Linux는 “읽는 것”보다 “직접 입력해보는 것”이 훨씬 중요합니다.</p>



<p>이 글에서는 <strong>실제로 가장 많이 사용하는 명령어 위주</strong>로 실습을 진행해보겠습니다.</p>



<p>👉 실습 환경: Ubuntu / NAS / Orange Pi / 가상머신 모두 가능</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">1️⃣ 현재 시스템 상태 확인하기</h1>



<h2 class="wp-block-heading">📌 현재 위치 확인</h2>



<pre class="wp-block-code"><code>pwd
</code></pre>



<p>현재 내가 있는 디렉토리 경로를 보여줍니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 파일 목록 보기</h2>



<pre class="wp-block-code"><code>ls
ls -al
</code></pre>



<ul class="wp-block-list">
<li><code>-a</code> : 숨김 파일 포함</li>



<li><code>-l</code> : 상세 정보 표시</li>
</ul>



<p>👉 서버 운영에서 가장 기본이 되는 명령어입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">2️⃣ 디렉토리(폴더) 다루기</h1>



<h2 class="wp-block-heading">📌 디렉토리 이동</h2>



<pre class="wp-block-code"><code>cd /home
cd ..
cd ~
</code></pre>



<ul class="wp-block-list">
<li><code>..</code> → 상위 폴더</li>



<li><code>~</code> → 내 홈 디렉토리</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 디렉토리 생성</h2>



<pre class="wp-block-code"><code>mkdir test_folder
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 디렉토리 삭제</h2>



<pre class="wp-block-code"><code>rm -r test_folder
</code></pre>



<p>⚠ <code>-r</code> 옵션은 하위 폴더까지 삭제<br>⚠ 서버에서 매우 조심해야 합니다</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">3️⃣ 파일 다루기 실습</h1>



<h2 class="wp-block-heading">📌 파일 생성</h2>



<pre class="wp-block-code"><code>touch test.txt
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 파일 내용 확인</h2>



<pre class="wp-block-code"><code>cat test.txt
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 파일 편집 (nano 사용)</h2>



<pre class="wp-block-code"><code>nano test.txt
</code></pre>



<ul class="wp-block-list">
<li>수정 후 → <code>Ctrl + X</code></li>



<li>Y → 저장</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 파일 복사</h2>



<pre class="wp-block-code"><code>cp test.txt copy.txt
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 파일 이동 / 이름 변경</h2>



<pre class="wp-block-code"><code>mv copy.txt newname.txt
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">4️⃣ 권한(Permission) 이해하기</h1>



<p>파일 상세 보기:</p>



<pre class="wp-block-code"><code>ls -l
</code></pre>



<p>출력 예시:</p>



<pre class="wp-block-code"><code>-rwxr-xr--
</code></pre>



<p>구조:</p>



<pre class="wp-block-code"><code>&#91;소유자]&#91;그룹]&#91;기타 사용자]
</code></pre>



<h2 class="wp-block-heading">📌 권한 변경</h2>



<pre class="wp-block-code"><code>chmod 755 test.txt
</code></pre>



<p>755 의미:</p>



<ul class="wp-block-list">
<li>7 → 읽기+쓰기+실행</li>



<li>5 → 읽기+실행</li>



<li>5 → 읽기+실행</li>
</ul>



<p>👉 서버 보안의 기본입니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">5️⃣ 프로세스 확인하기</h1>



<h2 class="wp-block-heading">📌 실행 중인 프로세스 보기</h2>



<pre class="wp-block-code"><code>ps aux
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 실시간 모니터링</h2>



<pre class="wp-block-code"><code>top
</code></pre>



<p>종료: <code>q</code></p>



<p>👉 CPU 사용률, 메모리 확인 가능</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">6️⃣ 서비스 관리 (서버 운영 핵심)</h1>



<p>Linux는 대부분 <strong>systemd</strong> 기반입니다.</p>



<h2 class="wp-block-heading">📌 서비스 상태 확인</h2>



<pre class="wp-block-code"><code>systemctl status nginx
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 서비스 시작</h2>



<pre class="wp-block-code"><code>systemctl start nginx
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 부팅 시 자동 실행 설정</h2>



<pre class="wp-block-code"><code>systemctl enable nginx
</code></pre>



<p>👉 NAS, AI 서버 자동 실행 시 필수 개념</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">7️⃣ 로그 확인하기 (장애 분석 기본)</h1>



<pre class="wp-block-code"><code>tail -f /var/log/syslog
</code></pre>



<p>실시간 로그 확인</p>



<p>👉 장애 발생 시 가장 먼저 보는 영역</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">8️⃣ 패키지 설치 (Ubuntu 기준)</h1>



<pre class="wp-block-code"><code>sudo apt update
sudo apt install htop
</code></pre>



<p>설치 후 실행:</p>



<pre class="wp-block-code"><code>htop
</code></pre>



<p><code>top</code>보다 보기 편한 시스템 모니터링 도구</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">9️⃣ 네트워크 확인</h1>



<h2 class="wp-block-heading">📌 IP 확인</h2>



<pre class="wp-block-code"><code>ip addr
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">📌 포트 확인</h2>



<pre class="wp-block-code"><code>netstat -tulnp
</code></pre>



<p>👉 어떤 서비스가 어떤 포트를 사용하는지 확인 가능</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">🔟 실습 루틴 추천</h1>



<p>매일 10분씩 아래를 반복해보세요:</p>



<ol class="wp-block-list">
<li>폴더 만들기</li>



<li>파일 생성/수정</li>



<li>권한 변경</li>



<li>프로세스 확인</li>



<li>서비스 재시작</li>



<li>로그 확인</li>
</ol>



<p>2주만 해도 서버 감각이 생깁니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h1 class="wp-block-heading">📌 Linux 실습을 하면 생기는 변화</h1>



<p>✔ 서버가 무섭지 않습니다<br>✔ NAS 관리가 쉬워집니다<br>✔ 자동화가 이해됩니다<br>✔ 장애 분석이 가능해집니다<br>✔ Docker 구조가 이해됩니다</p>



<p>Linux는 “암기”가 아니라 “반복 실습”입니다.</p>
<p>게시물 <a href="https://howinfo.kr/linux-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/">Linux 기초 실습 가이드</a>이 <a href="https://howinfo.kr">하우인포-IT·테크</a>에 처음 등장했습니다.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://howinfo.kr/linux-%ea%b8%b0%ec%b4%88-%ec%8b%a4%ec%8a%b5-%ea%b0%80%ec%9d%b4%eb%93%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
